单击带有htmlunit的javascript锚似乎不起作用

问题描述 投票:5回答:2

我正在使用htmlunit自动访问网站。这是问题所在:

我想单击一个锚点以显示给定表的新页面。

这里是锚点:

<a href="javascript:__doPostBack('GridView1','Page$7')">7</a>

这是我的代码:

final HtmlAnchor a = page2.getAnchorByText("7");
HtmlPage page3 = a.click();
System.out.println(page2.getWebResponse().getContentAsString())
System.out.println(page3.getWebResponse().getContentAsString());

我没有任何错误消息。当我比较打印输出时,它们是相同的,但是不应该如此,因为我只是单击了锚点。第一个打印输出应显示表格的特定页面,第二个打印输出另一页。

stackoverflow帖子struggling to click on link within htmlunit提出了一个非常相似的问题,但是在我的情况下,他的解决方案(将浏览器版本设置为webclient)似乎不起作用。

java javascript anchor htmlunit
2个回答
6
投票

也许您需要先等待javascript执行并加载。我建议使用以下命令:

webClient.waitForBackgroundJavaScript(1000);

甚至:

JavaScriptJobManager manager = page.getEnclosingWindow().getJobManager();
while (manager.getJobCount() > 0) {
    Thread.sleep(100);
}

还有另一种选择:

webClient.setAjaxController(new NicelyResynchronizingAjaxController());
webClient.setAjaxController(new AjaxController(){
    @Override
    public boolean processSynchron(HtmlPage page, WebRequest request, boolean async)
    {
        return true;
    }
});

0
投票

最终HtmlAnchor a = page2.getAnchorByText(“ 7”);HtmlPage page3 = a.click();

//添加此client.waitForBackgroundJavaScriptStartingBefore(10000);这里client.waitForBackgroundJavaScriptStartingBefore(10000);

System.out.println(page2.getWebResponse()。getContentAsString())System.out.println(page3.getWebResponse()。getContentAsString());

© www.soinside.com 2019 - 2024. All rights reserved.