1

我需要一个好的页面渲染库,以便我可以从网页中提取所有链接(包括锚文本、底层超链接、链接在页面上的绝对位置)。

我一直在使用 CSSBox 库,但是渲染的框模型中缺少 href 属性。换句话说,我只能单独使用 CSSBox 获取链接的锚文本和位置。我必须利用锚文本和另一个 html 解析库(例如,Jsoup)来获取 href 属性(即,事实上的 URL)。

有没有什么图书馆可以更好地实现我的目标?

4

5 回答 5

1

推荐

考虑使用Geb

它汇集了 的力量WebDriver、内容选择的优雅、建模jQuery 的稳健性和语言的表现力。Page ObjectGroovy

它可以用于脚本、抓取和一般自动化——或者通过与测试框架(如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.
     """
  }
}
于 2012-10-15T02:21:25.813 回答
1

你可以很容易地用CSSBox做到这一点。每个ElementBox实例都有getElement()获得相应 DOM 元素的 。a这意味着,拥有一个表示呈现链接的元素框,您可以使用a.getElement().getAttribute("href"). 另请参阅CSSBox 讨论论坛中的相关主题。

于 2012-10-15T07:51:59.653 回答
0

编辑

如果您需要解析器,以便您可以查看 HTML 页面的所有链接并做任何您需要做的事情,我推荐 Jericho。

Jericho HTML Parser是一个 java 库,允许分析和操作 HTML 文档的各个部分,包括服务器端标签,同时逐字复制任何无法识别或无效的 HTML。它还提供高级 HTML 表单操作功能。

它既简单又小巧,性能也不错

于 2012-10-15T02:17:14.740 回答
0

您可能想看看http://htmlunit.sourceforge.net。它不是一个渲染器,而是一个无 GUI 的浏览器。它甚至支持各种 JavaScript 引擎和 ActiveX。

但是我很确定您不能使用它来跟踪任何元素的位置,因为它实际上并没有呈现网页。

于 2012-10-15T02:22:08.213 回答
0

JavaFX 的 WebEngine 可能适合您:http ://docs.oracle.com/javafx/2/api/javafx/scene/web/WebEngine.html

我不会称它易于使用或轻量级,但请看一看。

于 2012-10-15T03:06:42.370 回答