HtmlUnit:anchor.click不会改变页面

时间:2017-03-25 10:49:27

标签: javascript parsing htmlunit

我试图解析此页面。

http://www.oddsportal.com/hockey/czech-republic/extraliga/plzen-liberec-QaikxB6H/#over-under;2

我想通过点击其中一条线上/下或比较赔率来获得表中的信息。我的目标是获得超过/低于+5.5的表格。

我成功获取了HtmlAnchor和OnClickAttribute,但是后来没有加载新页面,当然页面链接与原始链接相同。

以下是我使用的代码的一部分。

establish_connection

有人可以帮助我找到解决方案或找出不同的方法吗?

编辑:

感谢回复。我尝试了你的代码,但是我遇到条件错误(类型不匹配:无法从元素类型捕获#1-of?转换为HtmlElement)。

无论如何,我试图使用您在里面发布的代码:

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


....

List<HtmlElement> links = div.getElementsByAttribute("a", "class", "more");

for (int k = 0; k<links.size(); k++) {
    if (links.get(k).getOnClickAttribute().toString().contains("P-5.50")) {
        links.get(k).click();
        webClient.waitForBackgroundJavaScript(10000);
        webClient.waitForBackgroundJavaScriptStartingBefore(10000);
        System.out.println(page1X2.getUrl().toString());

        file = new File("./test3.csv");
        fw = new FileWriter(file.getAbsoluteFile());
        bw = new BufferedWriter(fw);
        bw.write(page1X2.asText());
        bw.close();
        System.out.println("Done");

        break;
    }
}   

但是当打印table.asText()时,url仍然是相同的url和一个null指针异常。

我的目标是从网站获得赔率。我想在所有比赛中循环。我的期望是获得1x2和U / O 5,5的赔率。我得到的错误是这部分代码

        List<HtmlElement> links = div.getElementsByAttribute("a", "class", "more");

        for (HtmlElement anchor : links) {
            if (anchor.getOnClickAttribute().contains("P-5.50")) {
                anchor.click();
                HtmlElement parent = (HtmlElement) anchor.getParentNode().getParentNode().getParentNode();
                HtmlTable table = parent.getFirstByXPath(".//table");
                System.out.println(page1X2.getUrl().toString());
                System.out.println(table.asText());

            }
        } 

返回0,所以我无法获得表格。

        System.out.println(page1X2.<HtmlElement>getByXPath("//a[@class='more']").size());

}

1 个答案:

答案 0 :(得分:1)

当您点击真实浏览器时,页面是相同的,但URL会更改。

使用HtmlUnit完成同样的事情:

try (WebClient webclient = new WebClient()) {
    HtmlPage page = webclient.getPage("http://www.oddsportal.com/hockey/czech-republic/extraliga/plzen-liberec-QaikxB6H/#over-under;2");
    for (HtmlElement anchor : page.<HtmlElement>getByXPath("//a[@class='more']")) {
        if (anchor.getOnClickAttribute().contains("P-5.50")) {
            anchor.click();
            HtmlElement parent = (HtmlElement) anchor.getParentNode().getParentNode().getParentNode();
            HtmlTable table = parent.getFirstByXPath(".//table");
            System.out.println(table.asText());
            System.out.println(table.asXml());
        }
    }
}

在XPath中,.表示来自此节点,/表示直接子节点,//表示递归子节点或孙子节点,@class='more'表示查找属性class }值more