我正在尝试使用HtmlUnit自动浏览网站。我需要在这个过程中按下一些按钮。 首先,我用这个xml:
构建一个按钮的HtmlAnchor对象<a href="dog.php">
<img src="http://images.hand.co.uk/Pic/site_images/hand/Myper/MyOrder/images/DogRed.gif" width="75" height="31" border="0" alt="1 adds"/>
</a>
使用click()方法单击它时工作正常。 然后我移动到另一个页面,在该页面中我有链接,我需要单击该链接以显示所需的内容。 点击后我没有被移动到另一个页面,它只是一个Java脚本函数触发。
这是第二个链接的锚点:
<a style="color: black; font-weight: bold;" href="javascript:show_me('DogDetails.php?DogID=2445485', 2445485, 800);">
details
</a>
对于这两个元素,我使用HtmlAnchor对象及其click()方法。但是这种方法对第二个元素一无所知。
我也尝试过使用HtmlUnit中内置的JavaScript引擎,但没有成功。 如何使用HtmlUnit平台单击此持久链接?
答案 0 :(得分:3)
最可能的问题是HtmlUnit没有等待JavaScript完成运行。 HtmlUnit常见问题解答提出了3种解决方法:http://htmlunit.sourceforge.net/faq.html#AJAXDoesNotWork。
其中,最好的解决方案是让你的WebClient
等待AJAX请求完成:
webClient.setAjaxController(new NicelyResynchronizingAjaxController());
我发现有些网站在后台线程上运行AJAX的巧妙技巧 - 这意味着NicelyResynchronizingAjaxController
不会等待它完成,因为它只监视主UI线程。有一个很好的答案here解释了如何等待所有线程而不仅仅是主线程。
答案 1 :(得分:1)
我有一些类似的问题,试过几种方法等待javascript在后台运行,但没有成功。
我有一半的心思转向Selenium,但它已经解决了自己的问题&#34;在WebClient上禁用CSS之后:
WebClient.getOptions().setCssEnabled(false);
每当我们重新启用CSS时,.click()就会停止工作。
我的主播是:
<div class="my-anchor's-parent-class"/>
<a href="javascript:void(0) class="text" id="buttonSearch" style="display: block;">Search</a>
</div>
它有一些JQuery将.click()处理程序附加到它,它根据&#39;类进行操作。我的主人的父母的财产:
$('.my-anchor's-parent-class').each(function () {
$(this).children('a').click(function () {
// if parent has another given class appended, call .myFunction(this)
// else, call other function
});
});