点击谷歌结果页面时,HtmlUnit中出现JavaScript异常
JavaScript Exception in HtmlUnit when clicking at google result page
我想使用HtmlUnit(v2.21)从谷歌获取一些搜索结果页面。这需要我在搜索一个人时点击"人们也在寻找"链接(右侧,见示例链接),这会触发一些JavaScript并更改当前页面的内容。但这给了我一个JavaScriptWrapper异常(见下文)。
可点击的示例链接:https://www.google.de/search?ie=UTF-8&安全=关闭&q=镍+minaj
带有错误的简单测试用例:
String url = "https://www.google.de/search?ie=UTF-8&safe=off&q=nicki+minaj";
WebClient client = new WebClient(BrowserVersion.BEST_SUPPORTED);
HtmlPage page = client.getPage(url);
HtmlElement link = page.getFirstByXPath("//a[@class='_Zjg']");
HtmlPage newPage = link.click(); //throws exception
this.storeResultFile(newPage.asXml(), "test");
client.close();
结果:
net.sourceforge.htmlunit.corejs.javascript.WrappedException: Wrapped java.lang.NullPointerException
at net.sourceforge.htmlunit.corejs.javascript.Context.throwAsScriptRuntimeEx(Context.java:2053)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.doProcessPostponedActions(JavaScriptEngine.java:947)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.processPostponedActions(JavaScriptEngine.java:1012)
at com.gargoylesoftware.htmlunit.html.DomElement.click(DomElement.java:799)
at com.gargoylesoftware.htmlunit.html.DomElement.click(DomElement.java:742)
at com.gargoylesoftware.htmlunit.html.DomElement.click(DomElement.java:689)
我存储了"page"对象的xml,并确保XPath表达式有效且有结果。
有人有什么想法吗?
看起来JavaScript引擎(基于Rhino)很容易在一些脚本问题上出错并退出,而其他浏览器仍然可以运行脚本。我不知道谷歌的脚本中是否有错误,但这两行为我解决了问题:
JavaScriptEngine engine = client.getJavaScriptEngine();
engine.holdPosponedActions();
然而,当在多个线程中运行多个htmlunit对象时,仍然有可能遇到此错误。这与其说是一个解决方案,不如说是一种变通方法。
相关文章:
- 在javaservlet doPost方法中启动线程时,无法返回异常消息
- document.applet.method在Mounatin Lion上抛出safari 6+JDK7异常
- 为什么浏览器没有为语法错误抛出异常
- java,javascript签名的小程序(文件选择,ftp上传)安全性/套接字异常
- node.js和express中的异常处理
- 派生进程的stdout在管道传输时工作异常
- NodeJS和pg promise,捕获PostgreSQL异常
- 当显式定义控制器参数时,默认模型绑定器会发生异常
- 显示引导弹出操作异常的逻辑
- 调用谷歌地图路线服务时未捕获的异常
- web配置http到https重定向异常
- 转换异常时间&Datestring到JavaScript日期
- 为什么在python中使用异常比javascript更容易接受
- PHP REST服务抛出异常——希望避免控制台错误
- JS异常:animate不是一个函数
- 在蓝鸟中处理异常
- 点击谷歌结果页面时,HtmlUnit中出现JavaScript异常
- HtmlUnit:HtmlPage序列化异常
- 在使用WebDriver(HtmlUnit、Ruby绑定)时,是否可以忽略JavaScript异常
- 模拟页面点击在HtmlUnit(2.33)给出无效或非法的选择器异常