web-dev-qa-db-ja.com

Selenium WebDriverでページをロードするための実際のタイムアウトを設定しますか?

私はたくさんのプロキシがあるサイトをテストしていますが、問題はそれらのプロキシのいくつかがひどく遅いことです。したがって、私のコードは時々ページの読み込みで立ち往生しています。

from Selenium import webdriver

browser = webdriver.Firefox()
browser.get("http://example.com/example-page.php")
element = browser.find_element_by_id("someElement")

私はexplicit waitsimplicit 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")はお尻の新しい痛みです。その要素の検索を開始する前にロードします。極端な場合、これには[〜#〜]時間[〜#〜]もかかります。私はそれについて何ができますか?

18
Shane

ライブラリで導入されたページ読み込みタイムアウトを使用してみることができます。それの実装は普遍的ではありませんが、.NETとJavaバインディングによって確実に公開されており、FirefoxドライバーとIEドライバー。Javaでは、ページの読み込みタイムアウトを15秒に設定するには、それを設定するコードは次のようになります。

driver.manage().timeouts().pageLoadTimeout(15, TimeUnit.SECONDS);

Python言語バインディングで公開されていない場合、メンテナはそれを実装したパッチを熱心に受け入れると確信しています。

12
JimEvans

予想される要素の存在を(可視性を待たずに)5〜8秒間待ってから、ページ全体が読み込まれるのを待たずにwindow.stop()JSスクリプト(それ以上の要素の読み込みを停止する)を送信することで、スクリプトの実行を高速化できます。または、5〜8秒後にページ読み込みのタイムアウト例外をキャッチしてからwindow.stop()を呼び出す

ページが遅延読み込み手法(表示されている要素のみを読み込み、スクロール後にのみ残りの要素を読み込む)を採用していない場合、window.ready状態を返す前に各要素を読み込むため、いずれかの要素のレンダリングに時間がかかると遅くなります。

0
Jlearner