如何使用Java中的HtmlUnit获取javascript创建的Html,然后使用Jsoup解析它?

时间:2016-02-24 00:53:30

标签: javascript java jsoup htmlunit

我正在尝试访问由某些Javascript创建的网页上的某些内容。但是,我希望访问的内容是在页面加载后由javascript创建的,所以当我尝试用Jsoup解析时,这个Html源代码块无处可寻。

使用HtmlUnit获取Html源代码的代码如下:

public static void main(String[] args) throws IOException {
           java.util.logging.Logger.getLogger("com.gargoylesoftware").setLevel(java.util.logging.Level.OFF); 

    WebClient webClient = new WebClient(BrowserVersion.CHROME);
    webClient.getOptions().setThrowExceptionOnScriptError(false);
    webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);

    String url = "myUrl.com";
    out.println("accessing " + url);

    HtmlPage page = webClient.getPage(url);

    out.println("waiting for js");
    webClient.waitForBackgroundJavaScriptStartingBefore(200);
    webClient.waitForBackgroundJavaScript(20000);

    out.println(page.asXml());

    webClient.close();
}

但是当我运行它时,不打印应该创建的Html。我想知道如何获得这个由Javascript创建的Html源代码,使用HtmlUnit然后获得所述结果并将其传递给Jsoup进行解析?

1 个答案:

答案 0 :(得分:0)

Jsoup是服务器端处理框架,
我不确定你的最终目标是什么,我假设你想在同一个页面中使用它,所以我将使用Ajax,你可以这样做:

  • 准备好文档,捕获文档dom
  • 发送处理
  • 服务器端的
  • 显示结果。

同一页上的sults。

$( document ).ready(function() {
    var allClientSideHtml = $("html").html();

var dataToSend = JSON.stringify({'htmlSendToSever':allClientSideHtml });
 $.ajax({ url: "your_Jsoup_server_url.jsp_or_php/YourJsoupParser",
        type: "POST",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        data: dataToSend , // pass that text to the server as a JSON String
        success: function (msg) { alert(msg.d); },
        error: function (type) { alert("ERROR!!" + type.responseText); }

    });

});