java - Htmlunit 中的 HtmlAnchor click() 函数不起作用

标签 java javascript htmlunit

我正在尝试使用 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 脚本函数触发。

这是第二个链接的 anchor :

<a style="color: black; font-weight: bold;" href="javascript:show_me('DogDetails.php?DogID=2445485', 2445485, 800);">
  details
</a>

对于这两个元素,我使用 HtmlAnchor 对象及其 click() 方法。但是该方法对第二个元素什么都不做。

我也尝试过使用 HtmlUnit 中内置的 JavaScript 引擎,但没有成功。 我怎样才能点击这个与 HtmlUnit 平台的永久链接?

最佳答案

最可能的问题是 HtmlUnit 没有等待 JavaScript 完成运行。 HtmlUnit 常见问题解答提出了 3 种解决方法:http://htmlunit.sourceforge.net/faq.html#AJAXDoesNotWork .

其中,最简洁的解决方案是让您的 WebClient 等待 AJAX 请求完成:

webClient.setAjaxController(new NicelyResynchronizingAjaxController());

我发现一些网站巧妙地在后台线程上运行 AJAX - 这意味着 NicelyResynchronizingAjaxController 不会等待它完成,因为它只监视主 UI 线程。有一个很好的答案here这解释了如何等待所有线程而不仅仅是主线程。

关于java - Htmlunit 中的 HtmlAnchor click() 函数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12217889/

相关文章:

java - 为什么 System.in 声明为 nullInputStream() 而不是 null?

javascript - javascript 中的多个文件值

javascript - HTML 单元由于某种原因无法找到表单。我怀疑是因为 angularJS 但不确定

java - HTMLUNIT getformbyname 网站中没有指定表单名称

java - 如何检查表单是否存在并打印表单的所有属性,HTMLUNIT JAVA

java - 如何使用 Java 运行 .sh 文件并获取其输出?

java - 从 Java ArrayList 中删除项目时接收 IndexOutOfBoundsException

java - JSON 响应中的属性可以有多种类型

javascript - 为什么 Soundmanager 2 不在 firefox (23) 中触发 onload 事件?

javascript - 在 <i18n> 标签中延迟加载翻译文件