Я хочу иметь возможность создать снимок экрана определенного веб-сайта, но веб-сайт может быть больше, чем можно просмотреть на экране. Есть ли способ сделать это?
Цель состоит в том, чтобы сделать это с помощью .NET на С# в приложении WinForms.
Я хочу иметь возможность создать снимок экрана определенного веб-сайта, но веб-сайт может быть больше, чем можно просмотреть на экране. Есть ли способ сделать это?
Цель состоит в том, чтобы сделать это с помощью .NET на С# в приложении WinForms.
Есть несколько инструментов.
Дело в том, что вам нужно отрендерить его в какой-то заданной программе и сделать снимок. Я не знаю о .NET, но вот несколько инструментов, на которые стоит обратить внимание.
Я только что узнал о веб-сайте browsershots.org, который создает множество скриншотов. различных браузеров. В определенной степени вы даже можете указать разрешение.
Я написал программу на VB.NET, которая делала то, что вы указали, за исключением проблемы с размером экрана.
Я встроил веб-элемент управления (посмотрите в самый низ всех элементов управления) в свою форму и изменил его настройки (скрыть прокрутку). Я использовал таймер для ожидания динамического содержимого, а затем использовал «copyFromScreen», чтобы получить изображение.
Моя программа имела динамические размеры (настраиваемые через командную строку). Я обнаружил, что если я сделаю свою программу больше, чем экран, изображение просто вернет черные пиксели для области вне экрана. Я не исследовал дальше, так как моя работа была завершена в то время.
Надеюсь, это даст вам хороший старт. Извините за любые неправильные формулировки. Я захожу в Windows для разработки только раз в пару месяцев.
Делать в качестве снимка экрана, скорее всего, будет некрасиво. Достаточно просто захватить все содержимое страницы с помощью wget, но изображение означает захват рендеринга.
Вот некоторые инструменты которые намерены это сделать.
Вы можете отобразить его в элементе управления WebBrowser, а затем сделать снимок, если размер страницы больше размера экрана, вам нужно прокрутить элемент управления, сделать один или несколько снимков, а затем объединить все изображения :)
Это код для создания скриншота программно:
using System.Drawing.Imaging;
int screenWidth = Screen.GetBounds(new Point(0, 0)).Width;
int screenHeight = Screen.GetBounds(new Point(0, 0)).Height;
Bitmap bmpScreenShot = new Bitmap(screenWidth, screenHeight);
Graphics gfx = Graphics.FromImage((Image)bmpScreenShot);
gfx.CopyFromScreen(0, 0, 0, 0, new Size(screenWidth, screenHeight));
bmpScreenShot.Save("test.jpg", ImageFormat.Jpeg);
Скриншоты веб-сайта Java
Объединить экраны вместе для окончательного снимка экрана всей веб-страницы.
public static void main(String[] args) throws FileNotFoundException, IOException {
System.setProperty("webdriver.chrome.driver", "D:\\chromedriver.exe");
ChromeDriver browser = new ChromeDriver();
WebDriver driver = browser;
driver.get("https://news.google.co.in/");
driver.manage().timeouts().implicitlyWait(500, TimeUnit.SECONDS);
JavascriptExecutor jse = (JavascriptExecutor) driver;
Long clientHeight = (Long) jse.executeScript("return document.documentElement.clientHeight");
Long scrollHeight = (Long) jse.executeScript("return document.documentElement.scrollHeight");
int screens = 0, xAxis = 0, yAxis = clientHeight.intValue();
String screenNames = "D:\\Screenshots\\Yash";
for (screens = 0; ; screens++) {
if (scrollHeight.intValue() - xAxis < clientHeight) {
File crop = new File(screenNames + screens+".jpg");
FileUtils.copyFile(browser.getScreenshotAs(OutputType.FILE), crop);
BufferedImage image = ImageIO.read(new FileInputStream(crop));
int y_Axixs = scrollHeight.intValue() - xAxis;
BufferedImage croppedImage = image.getSubimage(0, image.getHeight()-y_Axixs, image.getWidth(), y_Axixs);
ImageIO.write(croppedImage, "jpg", crop);
break;
}
FileUtils.copyFile(browser.getScreenshotAs(OutputType.FILE), new File(screenNames + screens+".jpg"));
jse.executeScript("window.scrollBy("+ xAxis +", "+yAxis+")");
jse.executeScript("var elems = window.document.getElementsByTagName('*');"
+ " for(i = 0; i < elems.length; i++) { "
+ " var elemStyle = window.getComputedStyle(elems[i], null);"
+ " if(elemStyle.getPropertyValue('position') == 'fixed' && elems[i].innerHTML.length != 0 ){"
+ " elems[i].parentNode.removeChild(elems[i]); "
+ "}}"); // Sticky Content Removes
xAxis += yAxis;
}
driver.quit();
}