0

Webdriver とヘッドレス ブラウザの使用を開始しようとしていますが、いくつかの問題が発生しています。残念ながら、すべてのコードを共有することはできませんが、設定方法を示すことはできます。その前に、私が実装しようとした基本的なユースケースは、悪い xpath のような平凡なものではなく、スクリプトが完全に機能することを確認するために chrome ドライバーで実装したと言っておきましょう。以下は、htmlunit を初期化する方法です。その下には、発生する多くのエラーの一部があります。

HtmlUnitDriver driver = new HtmlUnitDriver(BrowserVersion.CHROME)   
driver.setJavascriptEnabled(true)

アプリのメインページに到達すると、htmlunitドライバーを使用したログインページがチャンピオンのように機能しますが、物事は崩壊します。

SEVERE: Job run failed with unexpected RuntimeException: TypeError: Cannot call method     "add" of undefined (http://s.ytimg.com/yts/jsbin/www-embed-player-vfl2yUXMY.js#12)
======= EXCEPTION START ========
EcmaError: lineNumber=[12] column=[0] lineSource=[null] name=[TypeError] sourceName=    [http://s.ytimg.com/yts/jsbin/www-embed-player-vfl2yUXMY.js] message=[TypeError: Cannot     call method "add" of undefined (http://s.ytimg.com/yts/jsbin/www-embed-player-vfl2yUXMY.js#12)]
com.gargoylesoftware.htmlunit.ScriptException: TypeError: Cannot call method "add" of     undefined (http://s.ytimg.com/yts/jsbin/www-embed-player-vfl2yUXMY.js#12)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:684)
at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:602)
at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:507)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:616)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:591)
at com.gargoylesoftware.htmlunit.html.HtmlPage.executeJavaScriptFunctionIfPossible(HtmlPage.java:985)
at com.gargoylesoftware.htmlunit.javascript.background.JavaScriptFunctionJob.runJavaScript(JavaScriptFunctionJob.java:53)
at com.gargoylesoftware.htmlunit.javascript.background.JavaScriptExecutionJob.run(JavaScriptExecutionJob.java:102)
at com.gargoylesoftware.htmlunit.javascript.background.JavaScriptJobManagerImpl.runSingleJob(JavaScriptJobManagerImpl.java:328)
at com.gargoylesoftware.htmlunit.javascript.background.DefaultJavaScriptExecutor.run(DefaultJavaScriptExecutor.java:162)
at java.lang.Thread.run(Unknown Source)
Caused by: net.sourceforge.htmlunit.corejs.javascript.EcmaError: TypeError: Cannot call method "add" of undefined (http://s.ytimg.com/yts/jsbin/www-embed-player-vfl2yUXMY.js#12)
at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3603)
at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3587)
at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.typeError(ScriptRuntime.java:3608)
at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.typeError2(ScriptRuntime.java:3624)
at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.undefCallError(ScriptRuntime.java:3638)
at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.getPropFunctionAndThisHelper(ScriptRuntime.java:2195)
at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.getPropFunctionAndThis(ScriptRuntime.java:2189)
at net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpretLoop(Interpreter.java:1333)
at net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpret(Interpreter.java:798)
at net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.call(InterpretedFunction.java:105)
at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.doTopCall(ContextFactory.java:405)
at com.gargoylesoftware.htmlunit.javascript.HtmlUnitContextFactory.doTopCall(HtmlUnitContextFactory.java:309)
at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3031)
at net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.call(InterpretedFunction.java:103)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$4.doRun(JavaScriptEngine.java:609)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:669)
... 10 more
Enclosed exception: 
net.sourceforge.htmlunit.corejs.javascript.EcmaError: TypeError: Cannot call method     "add" of undefined (http://s.ytimg.com/yts/jsbin/www-embed-player-vfl2yUXMY.js#12)
at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3603)
at     net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.constructError(ScriptRuntime.java:3587)
at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.typeError(ScriptRuntime.java:3608)
at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.typeError2(ScriptRuntime.java:3624)
at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.undefCallError(ScriptRuntime.java:3638)
at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.getPropFunctionAndThisHelper(ScriptRuntime.java:2195)
at    net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.getPropFunctionAndThis(ScriptRuntime.java:2189)
at     net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpretLoop(Interpreter.java:1333)
at script(http://s.ytimg.com/yts/jsbin/www-embed-player-vfl2yUXMY.js:12)
at script.Og(http://s.ytimg.com/yts/jsbin/www-embed-player-vfl2yUXMY.js:105)
at script.Pg(http://s.ytimg.com/yts/jsbin/www-embed-player-vfl2yUXMY.js:105)
at script(http://s.ytimg.com/yts/jsbin/www-embed-player-vfl2yUXMY.js:115)
at script(http://s.ytimg.com/yts/jsbin/www-embed-player-vfl2yUXMY.js:108)
at script.Tg(http://s.ytimg.com/yts/jsbin/www-embed-player-vfl2yUXMY.js:105)
at script(http://s.ytimg.com/yts/jsbin/www-embed-player-vfl2yUXMY.js:117)
at net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpret(Interpreter.java:798)
at net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.call(InterpretedFunction.java:105)
at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.doTopCall(ContextFactory.java:405)
at com.gargoylesoftware.htmlunit.javascript.HtmlUnitContextFactory.doTopCall(HtmlUnitContextFactory.java:309)
at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3031)
at net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.call(InterpretedFunction.java:103)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$4.doRun(JavaScriptEngine.java:609)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:669)
at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:602)
at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:507)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:616)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:591)
at com.gargoylesoftware.htmlunit.html.HtmlPage.executeJavaScriptFunctionIfPossible(HtmlPage.java:985)
at com.gargoylesoftware.htmlunit.javascript.background.JavaScriptFunctionJob.runJavaScript(JavaScriptFunctionJob.java:53)
at com.gargoylesoftware.htmlunit.javascript.background.JavaScriptExecutionJob.run(JavaScriptExecutionJob.java:102)
at com.gargoylesoftware.htmlunit.javascript.background.JavaScriptJobManagerImpl.runSingleJob(JavaScriptJobManagerImpl.java:328)
at com.gargoylesoftware.htmlunit.javascript.background.DefaultJavaScriptExecutor.run(DefaultJavaScriptExecutor.java:162)
at java.lang.Thread.run(Unknown Source)
== CALLING JAVASCRIPT ==

 function () {
      Tg(d, b);
  }

これに加えて、次のようなかなりの数の警告が表示されます。

2013 年 11 月 19 日 1:51:42 PM com.gargoylesoftware.htmlunit.DefaultCssErrorHandler 警告

これらすべてのエラーが原因で、JavaScript が実際にロードされていなかったと思われます。これを確認するために、Chrome でテストを実行したときにメイン ページのページ ソースを取得し、HtmlUnit で同じことを行ったところ、私の疑いが確認されました。javascipts が生成する html は存在しませんでした。私たちのサイトでは、JQuery、Knockout、およびその他のいくつかのプラグインを使用しています。すべてのライブラリはかなり一般的な場所であり、Chrome ドライバーの問題ではなく、アプリを実行したときに開発ツール コンソールで何らかのエラーが発生することはありません。どんな助けでも大歓迎です。

4

0 に答える 0