所以我试图模拟点击这个按钮:
<input class="btn" value="Say thanks!" onclick="say_thanks(546810)" id="thanks_button" type="button">
我正在尝试在程序处于后台时执行此操作。否则,我可以使用selenium,但我不希望前台程序使用我的鼠标并关注它正在使用的浏览器。我已经尝试找到任何解决方法,但到目前为止没有运气。 尝试使用HtmlUnit进行模拟:
DomElement button = page.getFirstByXPath("//input[@value='Say thanks!']");
HtmlPage newPage = button.click();
但是我不断得到这个错误,无论我使用的选择器的类型(尝试使用anchors,byId,byClass等):
SEVERE: runtimeError: message=[An invalid or illegal selector was specified (selector: '*,:x' error: Invalid selector: *:x).] sourceName=[https://code.jquery.com/jquery-2.2.4.min.js] line=[2] lineSource=[null] lineOffset=[0]
我对任何建议持开放态度,无论所需的工具如何(如果我已经没有使用过的话)。
大编辑: 因此,在用JSoup解析页面后,我仔细检查了页面在纯文本中的外观,并且无法找到实际的按钮。我猜,有一些JQuery脚本会在最终的HTML文档中触发按钮出现(只有在我之前没有按过它时才会出现)。现在我需要评估该脚本以获得最终的HTML,正如我在互联网上看到的那样,HtmlUnit应该这样做,但不是。
我尝试过JSoup,HtmlUnit,HttpClient和Jaunt,但到目前为止还没有运气。
答案 0 :(得分:0)
你身边有一个误解:
如果
DomElement button = page.getFirstByXPath("//input[@value='Say thanks!']");
失败了,你会得到一个普通的java异常,而不是一个日志条目(顺便说一句。你的是使用xpath选择器,但是日志条目是关于css选择器的。)
为了让您更舒服,可以添加一行
System.out.println(button.asXml())
选择之后,您将看到HtmlUnit找到了您的输入元素。
日志条目是您单击按钮后开始执行某些javascript的结果(并且因为您单击了按钮)。
当使用HtmlUnit和使用jQuery或其他框架构建页面时,这种消息非常常见。这些框架使用无效的css选择器来检查浏览器的功能。 HtmlUnit将报告此内容,但javascript将继续有效。通常这是HtmlUnit上下文中的警告消息,其中包含严重错误消息作为原因/详细信息。
在此调用之外,click()方法是模拟单击按钮的正确方法。