我需要一个好的页面渲染库,以便我可以从网页中提取所有链接(包括锚文本,底层超链接,页面上链接的绝对位置)。
我一直在使用CSSBox库,但是渲染的盒子模型中缺少href属性。换句话说,我只能使用CSSBox获取锚文本和链接的位置。我必须利用锚文本和另一个html解析库(例如,Jsoup)来获取href属性(即事实上的URL)。
是否有任何图书馆可以更好地实现我的目标?
答案 0 :(得分:1)
考虑使用Geb:
它汇集了
WebDriver
的力量,jQuery
的优雅 内容选择,Page Object
建模的稳健性和 表达Groovy
语言。它可以用于脚本编写,抓取和一般自动化 - 或 同样作为功能/网络/验收测试解决方案 与
Spock
,JUnit
和&等测试框架集成TestNG
。
如上所述,这仅适用于Groovy的使用。但是,由于Groovy很容易与Java集成,因此这通常不是问题。
此外,这将需要一个浏览器。我不确定这对你来说是否是一个交易破坏者。
来自docs:
您可以在页面上获取内容的大小和位置。所有单位 以像素为单位。尺寸可通过高度和宽度获得 属性,而位置可用作x和y属性 表示距页面左上角(或父级)的距离 框架)到内容的左上角。
例如:
Browser.drive {
// Load the page
go "http://myapp.com"
// $("a") returns all hyperlinks on the page, similar to jQuery
$("a").each { a ->
// Display the required link properties and attributes
println """
The link to '${a.@href}' with text '${a.text()}' is at location (${a.x}, ${a.y}),
with a height of ${a.height}px and a width of ${a.width}px.
"""
}
}
答案 1 :(得分:1)
您可以很轻松地使用CSSBox执行此操作。每个ElementBox
实例都有getElement()
获取相应的DOM元素。这意味着,如果元素框a
表示呈现的链接,您可以使用a.getElement().getAttribute("href")
获取目标网址。另请参阅CSSBox discussion forum中的相关主题。
答案 2 :(得分:0)
修改强>
如果你需要一个解析器,那么你可以看到HTML页面的所有链接并做你需要做的任何事情,我推荐杰里科。
Jericho HTML Parser是一个java库,允许分析和处理HTML文档的各个部分,包括服务器端标记,同时逐字地再现任何无法识别或无效的HTML。它还提供高级HTML表单操作功能。
它简单小巧,性能不错
答案 3 :(得分:0)
您可能需要查看http://htmlunit.sourceforge.net。它不是渲染器,而是更多的GUI浏览器。它甚至支持各种JavaScript引擎和ActiveX。
但是我很确定你不能用它来跟踪任何元素的位置,因为它实际上并没有呈现网页。
答案 4 :(得分:0)
JavaFX的WebEngine可能适合您:http://docs.oracle.com/javafx/2/api/javafx/scene/web/WebEngine.html
我不会说它易于使用或轻便,但看看。