私はたくさんのプロキシがあるサイトをテストしていますが、問題はそれらのプロキシのいくつかがひどく遅いことです。したがって、私のコードは時々ページの読み込みで立ち往生しています。
from Selenium import webdriver
browser = webdriver.Firefox()
browser.get("http://example.com/example-page.php")
element = browser.find_element_by_id("someElement")
私はexplicit waits
やimplicit waits
のようなものをたくさん試し、かなり長い間探し回っていましたが、まだ解決策や回避策を見つけていません。ページの読み込み行browser.get("http://example.com/example-page.php")
に実際に影響を与えるものは何もないようです。そのため、常にそこに留まっています。
誰かがこれに対する解決策を手に入れましたか?
更新1:
JimEvansの答えは私の以前の問題を解決しました、そして ここ あなたはこの新機能のためのpythonパッチを見つけることができます。
新しい問題:
browser = webdriver.Firefox()
browser.set_page_load_timeout(30)
browser.get("http://example.com/example-page.php")
element = browser.find_element_by_id("elementA")
element.click() ## assume it's a link to a new page http://example.com/another-example.php
another_element = browser.find_element_by_id("another_element")
ご覧のとおり、browser.set_page_load_timeout(30)
はbrowser.get("http://example.com/example-page.php")
にのみ影響します。つまり、このページが30秒を超えて読み込まれると、タイムアウト例外がスローされますが、問題は、ページの読み込みに対して電力がないことです。 element.click()
など、新しいページが完全に読み込まれるまでブロックされませんが、explicit waits
またはimplicit waits
のいずれかがページ全体を待機するため、another_element = browser.find_element_by_id("another_element")
はお尻の新しい痛みです。その要素の検索を開始する前にロードします。極端な場合、これには[〜#〜]時間[〜#〜]もかかります。私はそれについて何ができますか?
ライブラリで導入されたページ読み込みタイムアウトを使用してみることができます。それの実装は普遍的ではありませんが、.NETとJavaバインディングによって確実に公開されており、FirefoxドライバーとIEドライバー。Javaでは、ページの読み込みタイムアウトを15秒に設定するには、それを設定するコードは次のようになります。
driver.manage().timeouts().pageLoadTimeout(15, TimeUnit.SECONDS);
Python言語バインディングで公開されていない場合、メンテナはそれを実装したパッチを熱心に受け入れると確信しています。
予想される要素の存在を(可視性を待たずに)5〜8秒間待ってから、ページ全体が読み込まれるのを待たずにwindow.stop()JSスクリプト(それ以上の要素の読み込みを停止する)を送信することで、スクリプトの実行を高速化できます。または、5〜8秒後にページ読み込みのタイムアウト例外をキャッチしてからwindow.stop()を呼び出す
ページが遅延読み込み手法(表示されている要素のみを読み込み、スクロール後にのみ残りの要素を読み込む)を採用していない場合、window.ready状態を返す前に各要素を読み込むため、いずれかの要素のレンダリングに時間がかかると遅くなります。