Java 浏览器显示的图像的URL
我正在自动化我们组织的供应订购系统。在当前的(纸质)系统下,如果我们从网站订购,我们需要附上一份显示所需物品的网页打印件。我正在编写的系统有一种上传扫描文件的方法,但我希望它是一次点击操作,而不是打印网页,扫描它,然后上传扫描文件 我找到了将页面转换为图像的代码,它确实有效,但创建的图像是基于html的(这很有意义),而不是浏览器中显示的内容 例如,我正在查看此项目:Java 浏览器显示的图像的URL,java,ui-automation,Java,Ui Automation,我正在自动化我们组织的供应订购系统。在当前的(纸质)系统下,如果我们从网站订购,我们需要附上一份显示所需物品的网页打印件。我正在编写的系统有一种上传扫描文件的方法,但我希望它是一次点击操作,而不是打印网页,扫描它,然后上传扫描文件 我找到了将页面转换为图像的代码,它确实有效,但创建的图像是基于html的(这很有意义),而不是浏览器中显示的内容 例如,我正在查看此项目: 当我在代码中运行url时,这是返回的图像: 该项目是使用servlet的JavaWeb。servlet代码: tr
当我在代码中运行url时,这是返回的图像: 该项目是使用servlet的JavaWeb。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图像?。您使用的是Java,因此实际上有一个非常简单的解决方案。浏览器自动化是一个(主要)解决的问题 这里是一些示例代码,请注意,如果页面加载时间比平时长,那么它并不特别健壮,但它应该足以演示执行所需操作的必要步骤。另外请注意,如果需要无头运行,您可能需要查看FireFox驱动程序,而不是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);
你需要一个完全成熟的浏览器,它支持大量的web标准(HTML、CSS、JS),才能实现你想要的。否则,您通常会使用不合格的web浏览器捕获渲染不良的图像 请按照建议查看硒 此外,还有Chrome59附带的一些功能(Windows尚未推出)
或者不幸的是,它不再被维护,因此呈现最新和最好页面的能力将随着时间的推移而减弱。虽然我确信您的答案是正确的,但我无法让它在我的项目中发挥作用。另外,我似乎在为这个项目添加了很多不必要的东西(比如硒元素)——有点像在我只需要左转向灯灯泡的情况下使用整辆车。但是,谢谢你的回答。我不确定你是如何导入这个库的,但是我建议使用maven来管理你的依赖关系。这将简化创建类路径和运行此代码的过程。至于增加很多,这对你的问题来说是强制性的。你要么重新发明轮子,构建一个支持java的javascript引擎和浏览器(你必须自己维护,这可能很有趣,很学术,但很费时),要么使用一个已经激活的项目。你只需要挑选最适合你的。