2009-04-17 124 views
11

我希望能夠創建給定網站的屏幕快照,但網站可能比可以在屏幕上查看的大。有什麼辦法可以做到這一點?如何以編程方式創建給定網站的屏幕截圖?

目標是在一個WinForms應用程序使用.NET做這在C#。

+0

有人希望做到這一點作爲服務器端腳本,但我需要一個WinForms應用程序。 – 2009-04-17 21:08:30

回答

0

在一個屏幕截圖可能會變得醜陋做。用wget捕獲頁面的全部內容是很容易的,但圖像意味着捕獲渲染。

這裏的some tools是聲稱這樣做。

2

我只是發現了關於網站browsershots.org這對於一大堆不同的瀏覽器生成截圖。在一定程度上,你甚至可以指定分辨率。

1

我寫在VB.NET程序指定什麼,除了屏幕大小的問題是沒有。

我在窗體上嵌入了一個web控件(查看所有控件的底部),並調整了它的設置(隱藏滾動)。我使用了一個計時器來等待動態內容,然後我使用「copyFromScreen」來獲取圖像。

我的程序有動態尺寸(可通過命令行設置)。我發現如果我讓我的程序比屏幕更大,那麼圖像只會返回屏幕外的黑色像素。自那時我的工作完成以來,我沒有進一步研究。

希望給你一個良好的開端。對不起,有任何錯誤的措辭。我登錄窗口,每隔幾個月纔會開發一次。

0

這是編程創建截圖中的代碼:

 

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

-1這是用戶桌面的截圖,而不是網站的截圖 – Basic 2012-07-02 13:58:16

0

可以渲染它WebBrowser控件,然後拍攝快照,如果頁面尺寸比屏幕尺寸更大,你必須滾動控制採用一個或多個快照,然後合併所有圖片:)

0

Java網站截圖

Combine Screens共同爲最終整個網頁畫面熱。

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(); 
    } 
相關問題