18

多くのプロキシを使用してサイトをテストしていますが、問題はそれらのプロキシの一部が非常に遅いことです。したがって、私のコードは時々ページのロードでスタックします。

from selenium import webdriver

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

explicit waitsorのようなものをたくさん試しましたが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")

ご覧のとおり、このページが 30 秒以上読み込まれるとタイムアウト例外がスローされますが、問題は、新しいページが完全に読み込まれるまでブロックされませんが、ページの読み込みにbrowser.set_page_load_timeout(30)影響を与えないことです。ページ全体がロードされるのを待ってから、その要素を探し始めるためです。いくつかの極端なケースでは、これにはHOURSもかかります。私はそれについて何ができますか?browser.get("http://example.com/example-page.php")element.click()another_element = browser.find_element_by_id("another_element")explicit waitsimplicit waits

4

2 に答える 2

12

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

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

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

于 2012-05-25T11:34:24.567 に答える