我需要一个好的页面渲染库,以便我可以从网页中提取所有链接(包括锚文本、底层超链接、链接在页面上的绝对位置)。
我一直在使用 CSSBox 库,但是渲染的框模型中缺少 href 属性。换句话说,我只能单独使用 CSSBox 获取链接的锚文本和位置。我必须利用锚文本和另一个 html 解析库(例如,Jsoup)来获取 href 属性(即,事实上的 URL)。
有没有什么图书馆可以更好地实现我的目标?
我需要一个好的页面渲染库,以便我可以从网页中提取所有链接(包括锚文本、底层超链接、链接在页面上的绝对位置)。
我一直在使用 CSSBox 库,但是渲染的框模型中缺少 href 属性。换句话说,我只能单独使用 CSSBox 获取链接的锚文本和位置。我必须利用锚文本和另一个 html 解析库(例如,Jsoup)来获取 href 属性(即,事实上的 URL)。
有没有什么图书馆可以更好地实现我的目标?
考虑使用Geb:
它汇集了 的力量
WebDriver
、内容选择的优雅、建模jQuery
的稳健性和语言的表现力。Page Object
Groovy
它可以用于脚本、抓取和一般自动化——或者通过与测试框架(如
Spock
,JUnit
&TestNG
.
如前所述,这仅适用于您愿意使用Groovy的情况。但是,由于 Groovy 很容易与 Java 集成,所以这通常不是问题。
此外,这将需要一个浏览器。我不确定这对你来说是否会破坏交易。
从文档:
您可以获取页面上内容的大小和位置。所有单位都以像素为单位。大小可以通过 height 和 width 属性获得,而 location 可以通过 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.
"""
}
}
你可以很容易地用CSSBox做到这一点。每个ElementBox
实例都有getElement()
获得相应 DOM 元素的 。a
这意味着,拥有一个表示呈现链接的元素框,您可以使用a.getElement().getAttribute("href")
. 另请参阅CSSBox 讨论论坛中的相关主题。
编辑
如果您需要解析器,以便您可以查看 HTML 页面的所有链接并做任何您需要做的事情,我推荐 Jericho。
Jericho HTML Parser是一个 java 库,允许分析和操作 HTML 文档的各个部分,包括服务器端标签,同时逐字复制任何无法识别或无效的 HTML。它还提供高级 HTML 表单操作功能。
它既简单又小巧,性能也不错
您可能想看看http://htmlunit.sourceforge.net。它不是一个渲染器,而是一个无 GUI 的浏览器。它甚至支持各种 JavaScript 引擎和 ActiveX。
但是我很确定您不能使用它来跟踪任何元素的位置,因为它实际上并没有呈现网页。
JavaFX 的 WebEngine 可能适合您:http ://docs.oracle.com/javafx/2/api/javafx/scene/web/WebEngine.html
我不会称它易于使用或轻量级,但请看一看。