首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >我能用JSoup、HtmlUnit或任何东西得到最终的超文本标记语言页面(在执行脚本之后)吗?

我能用JSoup、HtmlUnit或任何东西得到最终的超文本标记语言页面(在执行脚本之后)吗?
EN

Stack Overflow用户
提问于 2018-05-31 23:54:08
回答 1查看 67关注 0票数 0

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

代码语言:javascript
复制
<input class="btn" value="Say thanks!" onclick="say_thanks(546810)" id="thanks_button" type="button">

当程序在后台运行时,我正在尝试这样做。否则,我可以只使用selenium,但我不希望前台程序使用我的鼠标并将焦点放在它正在使用的浏览器上。我试过找到任何解决办法,但到目前为止还没有找到。尝试使用HtmlUnit进行如下模拟:

代码语言:javascript
复制
DomElement button = page.getFirstByXPath("//input[@value='Say thanks!']");
HtmlPage newPage = button.click();

但是我一直收到这个错误,不管我使用的选择器的类型(尝试使用anchors,byId,byClass等):

代码语言:javascript
复制
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,但到目前为止还没有成功。

EN

回答 1

Stack Overflow用户

发布于 2018-06-01 01:21:54

你方有一个误会:

如果

代码语言:javascript
复制
DomElement button = page.getFirstByXPath("//input[@value='Say thanks!']");

如果失败,您将得到一个普通的java异常,而不是日志条目(btw。您正在使用xpath选择器,但日志条目是关于css选择器的)。

为了让你更舒服,你可以添加下面这行

代码语言:javascript
复制
System.out.println(button.asXml())

选择之后,您将看到HtmlUnit已找到您的输入元素。

日志条目是在您单击按钮(并且因为您已经单击了按钮)之后启动的一些javascript执行的结果。

在使用jQuery或其他框架构建的页面中使用HtmlUnit时,这种消息非常常见。这些框架使用无效的css选择器来检查浏览器的功能。HtmlUnit将报告这一情况,但javascript将继续工作。通常,这是HtmlUnit上下文中的警告消息,其中包含作为原因/详细信息的严重错误消息。

除此之外,调用click()方法是模拟单击按钮的正确方式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50628311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档