2009-04-17 15 views
11

Desidero essere in grado di creare una schermata di un determinato sito Web, ma il sito Web potrebbe essere più grande di quello che può essere visualizzato sullo schermo. C'è un modo per farlo?Come posso creare a livello di codice una schermata di un determinato sito Web?

L'obiettivo è eseguire ciò con .NET in C# in un'applicazione WinForms.

+0

C'è qualcuno che vuole fare questo come uno script server-side, ma ho bisogno di un'applicazione WinForms. –

risposta

0

facendo in una schermata è probabile ottenere brutto. È abbastanza facile catturare l'intero contenuto della pagina con wget, ma l'immagine significa catturare il rendering.

Ecco some tools che si presume di farlo.

2

Ho appena scoperto il sito Web browsershots.org che genera schermate per un intero gruppo di browser diversi. In una certa misura puoi persino specificare la risoluzione.

1

Ho scritto un programma in VB.NET che ha fatto quello che hai specificato, tranne per il problema relativo alle dimensioni dello schermo.

Ho incorporato un controllo Web (guarda la parte inferiore di tutti i controlli) sul mio modulo e modificato le sue impostazioni (Nascondi scorrimento). Ho usato un timer per attendere contenuti dinamici, e poi ho usato "copyFromScreen" per ottenere l'immagine.

Il mio programma aveva dimensioni dinamiche (impostabili tramite riga di comando). Ho scoperto che se avessi reso il mio programma più grande dello schermo, l'immagine avrebbe restituito solo i pixel neri per l'area fuori dallo schermo. Non ho fatto ulteriori ricerche poiché il mio lavoro era terminato in quel momento.

Spero che ti dia un buon inizio. Ci scusiamo per eventuali diciture sbagliate. Accedo a Windows per svilupparlo solo una volta ogni due mesi.

0

Questo è il codice per la creazione di screenshot programatically:

 

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 Questo è uno screenshot del desktop degli utenti, non di un sito web – Basic

0

si può rendere sul controllo WebBrowser e poi prendere snapshot se le dimensioni della pagina più grande di dimensioni dello schermo si deve scorrere il controllo prelevare uno o più istantanee e poi unire tutte le foto :)

0

Java Screenshots di WebSite

Combine Screens insieme per Final Schermi di pagina Web Intere caldo.

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(); 
    } 
Problemi correlati