用于离线呈现网页的Java(或任何语言)库?

用于离线呈现网页的Java(或任何语言)库?,java,browser,Java,Browser,我正在开发一个java应用程序。我有一个场景来截取进入服务器的URL的屏幕截图 是否有任何java(或任何lang)浏览器库来加载网页并获取加载页面的一些屏幕截图。如果lib允许DOM遍历就好了 更新: java(或任何lang):任何其他语言都不是问题,但是库应该与java合作 我已经试过了,并且花了很多时间在这上面,但是结果什么都没有。 如果您提供任何具体材料来安装Jambi,我们将不胜感激 我也试了一下。我的母语是Java,我想我可以将spynner.py与Jython结合使用。但是,P

我正在开发一个java应用程序。我有一个场景来截取进入服务器的URL的屏幕截图

是否有任何java(或任何lang)浏览器库来加载网页并获取加载页面的一些屏幕截图。如果lib允许DOM遍历就好了


更新:

java(或任何lang)
:任何其他语言都不是问题,但是库应该与java合作

我已经试过了,并且花了很多时间在这上面,但是结果什么都没有。 如果您提供任何具体材料来安装Jambi,我们将不胜感激

我也试了一下。我的母语是Java,我想我可以将
spynner.py
Jython
结合使用。但是,
PyQt
不能与
Jython
一起使用。因此,我并不期待任何与
Python
相关的答案


基本上,我需要一个库来完成:

  • 拍摄屏幕截图

  • 一些DOM遍历

  • 一些Javascript执行

  • 并获取执行的JS代码的结果

谢谢



我感谢所有的答复。我最终得到了一份工作。它很适合我的需要。这是一个命令行工具。

在java中,您应该阅读以下stackoverflow帖子:


因为你说“或任何语言”:

在Python中,您有:

Spynner是一个基于QtWebKit框架的Python有状态编程web浏览器模块,支持Javascript/AJAX

根据文档,这里有一个小片段:

import spynner

browser = spynner.Browser()
browser.load("http://www.wordreference.com")
browser.runjs("console.log('I can run Javascript!')")
browser.runjs("_jQuery('div').css('border', 'solid red')") # and jQuery!
browser.select("#esen")
browser.fill("input[name=enit]", "hola")
browser.click("input[name=b]")
browser.wait_page_load()
print browser.url, len(browser.html)
browser.close()

Selenium/Webdriver提供了所有这些功能。

Webdriver提供了一个简单的api,允许您“驱动”浏览器实例。支持多种浏览器

请参见此处的简单示例:

使用“By”定位器遍历dom:

这里有很好的例子:

执行Javascript:

?

截图捕获:


如果你需要一个屏幕截图,我想渲染的质量对你来说很重要。
我们也有类似的情况。我们最终做的是在无头模式下运行firefox,实际浏览网页并在内存中获得屏幕截图。这不是一件小事,但如果你愿意的话,我可以给你更多的细节。

这个网站提供了屏幕截图:

教程:

该方案:

有没有可能更容易一些

该页还提到了一些其他工具:

" 如果你使用mac电脑,但不喜欢命令行,那么你可能想试试狗仔队或小Snapler。 如果你使用linux,你可能会对khtml2png、Matt Biddulph的Mozilla截图脚本或Roland Tapken的QT Webkit脚本更感兴趣。 "

您可以使用Rhino、Gecko执行javascript

对于dom遍历有很多选项,但是如果您使用Rhino,您可以使用jQuery使其更加简单


希望这对你有用

也许这篇文章对你有帮助我想这就是你想要的:我的答案有什么问题吗?@Sandro Munda:我真的很感谢你的帮助。但它不符合我的要求。查看我的更新。如果我的答案遗漏了任何要求,请告诉我。对于通常需要滚动的高或宽页面,屏幕截图将只获得浏览器窗口中可见的区域。
driver.findElement(By.name("q"));
WebDriver driver; // Assigned elsewhere
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("return document.title");
 File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);