所以我试着模拟点击这个按钮:
<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文档中(只有在我没有按过它的情况下才会出现)。现在我需要评估这个脚本以获得最终的超文本标记语言,正如我在互联网上看到的,HtmlUnit应该这样做,但没有这样做。
我已经尝试过JSoup,HtmlUnit,HttpClient和Jaunt,但到目前为止还没有成功。
发布于 2018-06-01 01:21:54
你方有一个误会:
如果
DomElement button = page.getFirstByXPath("//input[@value='Say thanks!']");
如果失败,您将得到一个普通的java异常,而不是日志条目(btw。您正在使用xpath选择器,但日志条目是关于css选择器的)。
为了让你更舒服,你可以添加下面这行
System.out.println(button.asXml())
选择之后,您将看到HtmlUnit已找到您的输入元素。
日志条目是在您单击按钮(并且因为您已经单击了按钮)之后启动的一些javascript执行的结果。
在使用jQuery或其他框架构建的页面中使用HtmlUnit时,这种消息非常常见。这些框架使用无效的css选择器来检查浏览器的功能。HtmlUnit将报告这一情况,但javascript将继续工作。通常,这是HtmlUnit上下文中的警告消息,其中包含作为原因/详细信息的严重错误消息。
除此之外,调用click()方法是模拟单击按钮的正确方式。
https://stackoverflow.com/questions/50628311
复制相似问题