URL 到浏览器显示的图像
URL to image as displayed by browser
我正在自动化我们组织的供应订购系统。在当前(纸质)系统下,如果我们从网站订购,我们需要附上显示所请求项目的网页的打印输出。我写的系统有上传扫描文件的方法,但我想做的是一键操作,而不是打印网页,扫描它,然后上传扫描文件。
我找到 this 将页面转换为图像的代码,它 确实 有效,但创建的图像是基于 html (这是有道理的),但不是浏览器中显示的内容。
例如,我正在查看此项目:
当我通过代码 运行 url 时,这是 returned 图像:
该项目是 Java 使用 servlet 的网络。 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();
}
上面link的代码:
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;
}
}
有什么方法可以 return 浏览器显示 url 的图像?
您正在使用 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);
您需要一个完全支持大量网络标准(HTML、CSS、JS)的浏览器才能实现您的目标。否则,您通常会通过不合标准的 Web 浏览器捕获渲染不佳的图像。
按照 BCqrstoO 的建议查看 Selenium。
此外还有 Headless Chrome 附带 Chrome 59(尚未出现 Windows)
或 PhantomJS,不幸的是,它已不再维护,因此呈现最新和最佳页面的能力将随着时间的推移而减弱。
我正在自动化我们组织的供应订购系统。在当前(纸质)系统下,如果我们从网站订购,我们需要附上显示所请求项目的网页的打印输出。我写的系统有上传扫描文件的方法,但我想做的是一键操作,而不是打印网页,扫描它,然后上传扫描文件。
我找到 this 将页面转换为图像的代码,它 确实 有效,但创建的图像是基于 html (这是有道理的),但不是浏览器中显示的内容。
例如,我正在查看此项目:
当我通过代码 运行 url 时,这是 returned 图像:
该项目是 Java 使用 servlet 的网络。 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();
}
上面link的代码:
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;
}
}
有什么方法可以 return 浏览器显示 url 的图像?
您正在使用 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);
您需要一个完全支持大量网络标准(HTML、CSS、JS)的浏览器才能实现您的目标。否则,您通常会通过不合标准的 Web 浏览器捕获渲染不佳的图像。
按照 BCqrstoO 的建议查看 Selenium。
此外还有 Headless Chrome 附带 Chrome 59(尚未出现 Windows) 或 PhantomJS,不幸的是,它已不再维护,因此呈现最新和最佳页面的能力将随着时间的推移而减弱。