使用htmlunit点击javascript锚点似乎不起作用。

5
我将使用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帖子在htmlunit中单击链接困难呈现了一个非常类似的问题,然而他的解决方案(将浏览器版本设置为webclient)在我的情况下似乎不起作用。
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;
    }
});

你能否以问题中的代码为例展示一下?final HtmlAnchor a = page2.getAnchorByText("7"); HtmlPage page3 = a.click(); System.out.println(page2.getWebResponse().getContentAsString()) System.out.println(page3.getWebResponse().getContentAsString()); - firstpostcommenter

0

final 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());


1
请问您能否解释一下为什么这个有效吗?另外,请注意您可以使用三个反引号进入“代码模式”,这将启用语法高亮。 - Geza Kerecsenyi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接