WebDriver と Firefox でいくつかのテストを実行しています。
次のコマンドで問題が発生しています。
WebDriver.get(www.google.com);
このコマンドを使用すると、onload イベントが発生するまで WebDriver がブロックされます。これには通常数秒かかりますが、読み込みが終わらない Web サイトでは数時間かかる場合があります。
私がやりたいのは、特定のタイムアウト後にページの読み込みを停止し、何らかの形で Firefox の停止ボタンをシミュレートすることです。
ページを読み込もうとするたびに、最初に次の JS コードを実行しようとしました。
var loadTimeout=setTimeout(\"window.stop();\", 10000);
残念ながら、これはおそらく次の理由で機能しません。
スクリプトがロードされる順序のため、stop() メソッドは、それが含まれているドキュメントのロードを停止できません1
更新 1: 接続と要求のタイムアウトを追加するために SquidProxy を使用しようとしましたが、問題は解決しませんでした。
今日見つけた奇妙なことの 1 つは、私のマシン (FF3.6 - 4.0 および Mac Os 10.6.7) での読み込みが停止しない Web サイトが、他のブラウザーやコンピューターでは正常に読み込まれたことです。
更新 2: この問題は、Firefox に画像を読み込まないように指示することで解決できるようです。うまくいけば、すべてがその後うまくいくでしょう...
WebDriver を使用するには、より優れた Chrome ドライバーがあればいいのにと思います。Firefox には毎日がっかりさせられます。
更新 3: Selenium 2.9 では、ドライバーがハングしているように見えるケースを処理するための新しい機能が追加されました。FirefoxProfile
これは次のように使用できます。
FirefoxProfile firefoxProfile = new ProfilesIni().getProfile("web");
firefoxProfile.setPreference("webdriver.load.strategy", "fast");
試した後、これが機能するかどうかを投稿します。
更新 4: 最後に、上記の方法はどれも機能しませんでした。完了するのに時間がかかるスレッドを「殺す」ことになります。PhantomJS をバックエンドとして使用するリモート WebDriver であるGhostdriverを試す予定です。PhantomJS はヘッドレス WebKit スクリプト可能であるため、firefox などの実際のブラウザーの問題は発生しないと予想されます。firefox (クロール目的) を使用する義務がない人のために、結果を更新します。
更新 5: 更新の時間です。FirefoxDriver の代わりに Ghostdriver 1.1 を 5 か月間使用して、パフォーマンスと安定性に本当に満足していると言えます。適切な動作をしていないケースがいくつかありましたが、一般的にゴーストドライバーは十分に安定しているようです。したがって、私のように、クロール/Webスクレイピング用のブラウザーが必要な場合は、firefoxとxvfbの代わりにghostdriverを使用することをお勧めします。これにより、いくつかの頭痛の種になります...