代码之家  ›  专栏  ›  技术社区  ›  Gavrilo Adamovic

jsoup不加载整个html[重复]

  •  1
  • Gavrilo Adamovic  · 技术社区  · 7 年前

    这个问题已经有了答案:

    我想抓取一个网站,但当我用 Jsoup.connect(url) 只加载页面的一部分。

    当我以HTML的形式下载页面时,我看到页面的一部分中只有一个加载程序图标,因此我得出结论,页面的一部分随后是从其他来源加载的。

    有趣的是,inspect元素包含缺少的HTML,而view page source不包含。从jsoup加载的HTML与从“view page source”打开的HTML基本相同。

    有没有一种方法可以绕过它并在浏览器中显示整个页面时加载它?

    有问题的页面是: https://www.oddsportal.com/tennis/australia/atp-australian-open-2017/results/page/1/

    询问我能提供的任何其他信息。

    事业的发展

    编辑: 我正在像这样连接到URL:

    Document doc = null;
    
    try {
        doc =  Jsoup.connect(url).get();
    } catch (IOException e) {
        e.printStackTrace();
    }
    

    我正在使用CSS选择器获取此分区:

    Elements tournamentTable = doc.select("div[id=tournamentTable]");
    

    内容 tournamentTable 是 <div id="tournamentTable"></div>

    1 回复  |  直到 7 年前
        1
  •  2
  •   Krzysztof Atłasik    7 年前

    似乎 id=tournamentTable 使用javascript动态生成。JSoup不评估javascript,因此您必须使用类似的库 HtmlUnit . 例如:

    WebClient webClient = new WebClient(BrowserVersion.CHROME);
    webClient.getOptions().setJavaScriptEnabled(true); // enable javascript
    webClient.getOptions().setThrowExceptionOnScriptError(false); //even if there is error in js continue
    webClient.waitForBackgroundJavaScript(5000); // important! wait when javascript finishes rendering
    HtmlPage page = webClient.getPage(url);
    
    page.getElementById("tournamentTable");