2016-05-04 9 views
0

Googleから検索結果ページを取得するには、HtmlUnit(v2.21)を使用します。これは、人を探しているときに「人も探している人」のリンクをクリックする必要があります(右側、例のリンクを参照)。これはJavaScriptをトリガし、現在のページの内容を変更します。しかし、これは私にJavaScript Wrapper Exceptionを与えます(下記参照)。Googleの結果ページでクリックするとJavaScript例外が発生する

クリッカブル例リンク:https://www.google.de/search?ie=UTF-8&safe=off&q=nicki+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(); 

結果:私は "ページ" オブジェクトのXMLを格納していることを確認しました

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) 

のXPath式は有効であり、結果があります。

誰もがアイデアを持っていますか?

答えて

0

JavaScript-Engine(Rhinoベース)は、他のブラウザが引き続きスクリプトを実行できるスクリプト問題では非常に簡単に終了して終了するようです。 私はGoogleからのスクリプトに誤りがある場合は知らないが、これらの2行は私のためにそれを解く:

JavaScriptEngine engine = client.getJavaScriptEngine(); 
engine.holdPosponedActions(); 

複数のスレッドで複数のhtmlunit-オブジェクトを実行するときにそれにもかかわらず、このaccrossを取得することも可能ですエラー。これはソリューションよりも回避策です。

関連する問題