优秀的Java Web页面呈现库

时间:2012-10-15 02:12:59

标签: java html html-parsing rendering

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

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

是否有任何图书馆可以更好地实现我的目标?

5 个答案:

答案 0 :(得分:1)

建议

考虑使用Geb

  

它汇集了WebDriver的力量,jQuery的优雅   内容选择,Page Object建模的稳健性和   表达Groovy语言。

     

它可以用于脚本编写,抓取和一般自动化 - 或   同样作为功能/网络/验收测试解决方案   与SpockJUnit和&等测试框架集成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

我不会说它易于使用或轻便,但看看。