首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HtmlUnit -未找到动态内容

HtmlUnit -未找到动态内容
EN

Stack Overflow用户
提问于 2018-10-29 01:55:51
回答 1查看 1K关注 0票数 0

当加载此页面:https://www.fangraphs.com/leaders/splits-leaderboards?splitArr=5&strgroup=season&statgroup=1&startDate=2018-03-01&endDate=2018-11-01&filter=IP%7Cgt%7C0&position=P&statType=player&autoPt=true&players=&pg=0&pageItems=30&sort=22,1&splitArrPitch=&splitTeams=false时,在https://www.fangraphs.com/leaders/splits-leaderboards?splitArr=5&strgroup=season&statgroup=1&startDate=2018-03-01&endDate=2018-11-01&filter=IP%7Cgt%7C0&position=P&statType=player&autoPt=true&players=&pg=0&pageItems=30&sort=22,1&splitArrPitch=&splitTeams=false对象中返回的动态内容没有任何进展。

“反应滴测试”是空的。我试图找到锚与“导出数据”文本,以便我可以点击它,并获得内容作为一个流。

对于如何让HtmlPage包含动态内容,有什么想法吗?

这是我现在拥有的一个样本。锚从不返回任何元素。

代码语言:javascript
复制
    webClient = new WebClient(BrowserVersion.CHROME);
    webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
    webClient.getCookieManager().setCookiesEnabled(false);
    webClient.getOptions().setThrowExceptionOnScriptError(false);
    webClient.setAjaxController(new NicelyResynchronizingAjaxController());
    webClient.setJavaScriptTimeout(jsTimeout);
    updateJSErrorListener(webClient);

    int thisYear = year;
    if (isEarlySeason()) {
        thisYear = year - 1;
    }
    String leftyURL = "https://www.fangraphs.com/leaderssplits.aspx?splitArr=5&strgroup=season&statgroup=1&startDate=" + thisYear + "-03-01&endDate=" + year + "-11-01&filter=IP%7Cgt%7C0&position=P&statType=player&autoPt=true&players=&pg=0&pageItems=30&sort=22,1";

    HtmlPage page = webClient.getPage(leftyURL);

    HtmlAnchor leftyAnchor = null;
    HtmlDivision div = (HtmlDivision) page.getElementById("react-drop-test");
    List<HtmlElement> anchors = div.getElementsByTagName("a");
    for (DomElement anchor:anchors2) {
        if ((anchor.getAttribute("class").contains("data-export"))) {
            leftyAnchor = (HtmlAnchor) anchor;
            break;
        }
    }

    Page p = leftyAnchor.click();
    InputStream is = p.getWebResponse().getContentAsStream();
    List<List<String>> leftyCSV = readCSVFile(is);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-29 20:15:37

和另一个充满了奇怪的js的网页。让我从一些一般性的提示开始:

  • 如果不需要,请不要更改默认配置(或者如果您不知道这会产生什么效果)
  • 因为您的页面(或至少部分)是由javscript呈现的,所以您必须在某个地方等待。

最后:您需要更新版本的HtmlUnit才能完成任务,因为javascript促使错过了一个特征获得此页面使用的javascript代码。

要获得新的(快照)版本,您可以使用以下选项:

  • 等待下一个版本
  • 等待从maven获得的下一个快照生成(如果可用,将通过https://twitter.com/HtmlUnit通知)
  • 等待构建服务器(http://83.169.43.181/jenkins/job/HtmlUnit%20-%20Fast%20Build/)再次变成绿色,然后下载最新的构件。
  • 或者在Github (https://github.com/HtmlUnit/htmlunit)上分叉项目并自己构建它

使用最新的代码库,这将为您完成以下工作:

代码语言:javascript
复制
String url = "https://www.fangraphs.com/leaders/splits-leaderboards?splitArr=5&strgroup=season&statgroup=1&startDate=2018-03-01&endDate=2018-11-01&filter=IP%7Cgt%7C0&position=P&statType=player&autoPt=true&players=&pg=0&pageItems=30&sort=22,1&splitArrPitch=&splitTeams=false";

try (final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_60)) {                                                                                                                                                                                                       
    webClient.getOptions().setThrowExceptionOnScriptError(false);                                                                                                                                                                                                                  

    HtmlPage page = webClient.getPage(url);                                                                                                                                                                                                                                        
    webClient.waitForBackgroundJavaScript(50000);                                                                                                                                                                                                                                  
    System.out.println("----------------");                                                                                                                                                                                                                                        
    System.out.println(page.asText());                                                                                                                                                                                                                                             

    HtmlDivision div = (HtmlDivision) page.getElementById("react-drop-test");                                                                                                                                                                                                      
    List<HtmlElement> anchors = div.getElementsByTagName("a");                                                                                                                                                                                                                     
    for (DomElement anchor:anchors) {                                                                                                                                                                                                                                              
        if ((anchor.getAttribute("class").contains("data-export"))) {                                                                                                                                                                                                              

            HtmlAnchor leftyAnchor = (HtmlAnchor) anchor;                                                                                                                                                                                                                          

            Page p = leftyAnchor.click();                                                                                                                                                                                                                                          
            System.out.println();                                                                                                                                                                                                                                                  
            System.out.println("----------------");                                                                                                                                                                                                                                
            System.out.println(p.getWebResponse().getContentAsString());                                                                                                                                                                                                           

            break;                                                                                                                                                                                                                                                                 
        }                                                                                                                                                                                                                                                                          
    }                                                                                                                                                                                                                                                                              
}                                                                                                                                                                                                                                                                                  
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53037782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档