我可以使用JSoup,HtmlUnit或其他任何东西获得最终的HTML页面(在执行脚本之后)吗?

时间:2018-05-31 15:54:08

标签: jsoup htmlunit

所以我试图模拟点击这个按钮:

<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,但到目前为止还没有运气。

1 个答案:

答案 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()方法是模拟单击按钮的正确方法。