1

我有一个使用 Javascript 创建表格的网页。现在我在我的 Java 项目中使用 JSoup 来解析网页。顺便说一句,JSoup 无法运行 Javascript,因此无法生成表格并且网页的来源不完整。如何包含该脚本创建的 HTML 代码以便使用 JSoup 解析其内容?你能提供一个简单的例子吗?谢谢!

网页示例:

<!doctype html>
<html>
  <head>
    <title>A blank HTML5 page</title>
    <meta charset="utf-8" />
  </head>
  <body>
    <script>
        var table = document.createElement("table");
        var tr = document.createElement("tr");
        table.appendChild(tr);
        document.body.appendChild(table);
    </script>
    <p>First paragraph</p>
  </body>
</html>

输出应该是:

<!DOCTYPE html>
<html>
    <head>
        <title>
            A blank HTML5 page
        </title>
        <meta charset="utf-8"></meta>
    </head>
    <body>
        <script>
            var table = document.createElement("table");
            var tr = document.createElement("tr");
            table.appendChild(tr);
            document.body.appendChild(table);   
        </script>
        <table>
            <tr></tr>
        </table>
        <p>
            First paragraph
        </p>
    </body>
</html>

顺便说一句,JSoup 不包含 table 标记,因为它无法执行 Javascript。我怎样才能做到这一点?

4

1 回答 1

3

第一种可能性

您在 Jsoup 之外还有一些选择,即使用“真正的”浏览器并与之交互。一个很好的选择是selenium webdriver。使用 selenium,您可以使用不同的浏览器作为后端,也许在您的情况下,非常轻量级的htmlUnit已经可以了。如果调用更复杂的 JavaScript,通常没有其他选择,然后运行完整的浏览器。幸运的是,phantomjs就在那里,它的足迹还不错(无头和全部)。

第二种可能性

另一种方法可能是您使用 JSoup 获取 javascript 源代码并在 Java 中启动 JavaScript 解释器。为此,您可以使用Rhino。但是,如果你走那条路,你不妨直接使用 HtmlUnit,它可能不那么笨重。

于 2013-10-19T15:43:37.900 回答