2017-05-30 158 views
1

我正在自動化我們組織的供應訂購系統。在當前的(紙張)系統下,如果我們要訂購一個網站,我們需要打印出顯示所需項目的網頁。我正在編寫的系統提供了一種上傳掃描文檔的方法,但是我希望將其作爲一鍵式操作,而不是打印網頁,掃描它,然後上載掃描文件。瀏覽器顯示的圖像URL

我發現this代碼頁轉換爲圖像,並確實工作,但產生的圖像是基於關閉HTML(這是有道理的),但沒有什麼是瀏覽器中顯示。

例如,我看這資料:

Sample Amazon item


當我運行通過代碼的URL,這是返回的圖像:

Returned image

該項目是使用servlet的Java web。 servlet代碼:

try { 
     if (request.getParameter("formType").equalsIgnoreCase("addReference")) { 
      String url = request.getParameter("url"); 
      BufferedImage bi = WebImage.create(url, 800, 600); 
      File tmpFile = new File("c:/testimages/url2img.png"); 
      ImageIO.write(bi, "png", tmpFile); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

從上面的鏈接代碼:

public abstract class WebImage { 
    static class Kit extends HTMLEditorKit { 
     @Override 
     public Document createDefaultDocument() { 
      HTMLDocument doc 
        = (HTMLDocument) super.createDefaultDocument(); 
      doc.setTokenThreshold(Integer.MAX_VALUE); 
      doc.setAsynchronousLoadPriority(-1); 
      return doc; 
     } 
    } 
    public static BufferedImage create(String src, int width, int height) { 
     BufferedImage image = null; 
     JEditorPane pane = new JEditorPane(); 
     Kit kit = new Kit(); 
     pane.setEditorKit(kit); 
     pane.setEditable(false); 
     pane.setMargin(new Insets(0, 0, 0, 0)); 
     try { 
      pane.setPage(src); 
      image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 
      Graphics g = image.createGraphics(); 
      Container c = new Container(); 
      SwingUtilities.paintComponent(g, pane, c, 0, 0, width, height); 
      g.dispose(); 
     } catch (Exception e) { 
      System.out.println(e); 
     } 
     return image; 
    } 
} 

有什麼辦法由瀏覽器所顯示返回的URL 的形象?

回答

1

您正在使用Java,所以實際上有一個非常簡單的解決方案。瀏覽器自動化是Selenium(主要)解決的問題。

下面是一些示例代碼,只需注意,如果頁面需要比平常更長的時間來加載,但它應該足以證明必要步驟,做你想做的不是特別強勁。另外請注意,如果這需要無頭奔跑,您可能需要查看JBrowserDriver而不是FireFox驅動程序。

WebDriver driver = new FirefoxDriver(); 
driver.manage().window().maximize(); 
driver.get("http://rads.stackoverflow.com/amzn/click/055338256X"); 
// This move is necessary, the original file is temporary and gets deleted after java exists 
File resultingScreenshot = new File(System.getProperty("user.home"), "screenshot.png"); 
Files.move(screenshotFile, resultingScreenshot); 
driver.quit(); 

System.out.println("The screenshot is found here: " + resultingScreenshot); 
+0

雖然我確定你的回答是有效的,但我無法讓它在我的項目上工作。另外,它好像我加入了很多的項目(即,硒),這是不必要的 - 有點像使用全車的時候我需要的是左轉向燈燈泡。但是,謝謝你的回答。 –

+1

我不知道你是如何導入相應的庫,但我建議使用maven來管理你的依賴。它將簡化創建類路徑並運行此代碼。 [這是在github](https://github.com/paul-nelson-baker/selenium-screenshot-demo)。至於添加很多,對於您的問題來說,這是強制性的。你要麼重新發明輪子,並建立一個支持Java的JavaScript引擎和瀏覽器(你必須保持自己,這可能很有趣,學術又費時),或者你使用一個已經有效的項目。你只需要挑選最適合你的東西。 –

0

你需要一個完全成熟的瀏覽器,它支持大量的web標準(HTML,CSS,JS),以實現你想要的。否則,您通常會通過不合標準的Web瀏覽器捕獲嚴重渲染的圖像。

按照BCqrstoO的建議查看Selenium。

此外還有Headless Chrome裏面自帶的Chrome 59(未到對於Windows) 或PhantomJS不幸的是不再進行維護,因此呈現最新和最偉大的網頁會隨着時間逐漸褪去的能力。

相關問題