浏览器显示的图像URL

时间:2017-05-30 16:24:11

标签: java ui-automation

我自动化了我们组织的供应订购系统。在当前(纸质)系统下,如果我们要从网站订购,我们需要附加显示所请求项目的网页的打印输出。我写的系统有一种上传扫描文档的方法,但是我想一键操作而不是打印网页,扫描它,然后上传扫描文件。

我发现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;
    }
}

有没有办法返回浏览器显示的网址的图片

2 个答案:

答案 0 :(得分:1)

您正在使用Java,因此实际上这是一个非常简单的解决方案。浏览器自动化是Selenium的一个(主要)解决的问题。

以下是一些示例代码,请注意,如果页面加载时间比平时要长,但它不是特别健壮,但它应该足以证明执行所需操作所需的步骤。另请注意,如果需要无头地运行,您可能需要查看JBrowserDriver而不是FireFox驱动程序。

WebDriver driver = new FirefoxDriver();
driver.manage().window().maximize();
driver.get("https://www.amazon.com/I-Robot-Isaac-Asimov/dp/055338256X/ref=sr_1_2?ie=UTF8&qid=1496161782&sr=8-2&keywords=Asimov");
// 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);

答案 1 :(得分:0)

您需要一个完全成熟的浏览器,它支持大量的Web标准(HTML,CSS,JS),以实现您的目标。否则,您将经常通过不合标准的Web浏览器捕获严重渲染的图像。

BCqrstoO的建议查看Selenium。

此外,Chrome 59还附带Headless Chrome(尚未推出适用于Windows) 或遗憾的是,PhantomJS不再被维护,因此呈现最新和最好的页面的能力会随着时间的推移而减少。