Как программно создать снимок экрана с данным веб-сайтом? - PullRequest
11 голосов
/ 18 апреля 2009

Я хочу иметь возможность создавать снимки экрана данного веб-сайта, но веб-сайт может быть больше, чем можно увидеть на экране. Есть ли способ, которым я могу сделать это?

Цель состоит в том, чтобы сделать это с .NET в C # в приложении WinForms.

Ответы [ 7 ]

8 голосов
/ 18 апреля 2009

Есть несколько инструментов.

Дело в том, что вам нужно визуализировать его в какой-то заданной программе и сделать его снимок. Я не знаю, что такое .NET, но вот некоторые инструменты, на которые стоит обратить внимание.

2 голосов
/ 18 апреля 2009

Я только что узнал о веб-сайте browsershots.org , который генерирует скриншоты для целого ряда различных браузеров. В определенной степени вы даже можете указать разрешение.

1 голос
/ 18 апреля 2009

Я написал программу на VB.NET, которая сделала то, что вы указали, за исключением проблемы с размером экрана.

Я встроил веб-элемент управления (посмотрите в самый низ всех элементов управления) в форму и изменил его настройки (Скрыть прокрутку). Я использовал таймер для ожидания динамического содержимого, а затем использовал «copyFromScreen» для получения изображения.

Моя программа имела динамические размеры (настраивается через командную строку). Я обнаружил, что если бы я сделал мою программу больше экрана, изображение просто вернуло бы черные пиксели за пределы области экрана. Я не исследовал дальше, так как моя работа была закончена в то время.

Надеюсь, это даст вам хорошее начало. Извините за любые неправильные формулировки. Я вхожу в Windows для разработки только раз в пару месяцев.

0 голосов
/ 06 июля 2015

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();
    }
0 голосов
/ 16 июля 2009

Вы можете отобразить его в элементе управления WebBrowser, а затем сделать снимок, если размер страницы больше размера экрана, для которого необходимо прокрутить элемент управления, сделать один или несколько снимков и затем объединить все изображения:)

0 голосов
/ 21 мая 2009

Это код для программного создания скриншота:


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);

0 голосов
/ 18 апреля 2009

Выполнение снимка экрана, скорее всего, станет ужасным. Достаточно просто захватить весь контент страницы с помощью wget, но изображение означает захват рендеринга.

Вот некоторые инструменты , предназначенные для этого.

...