2012-05-25 10 views
18

私はたくさんのプロキシを持つサイトをテストしていますが、問題のいくつかはプロキシが非常に遅いです。したがって、私のコードは毎回、そして毎回ページを読み込むことに悩まされています。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 waitsまたはimplicit waitsようなものをたくさん試したし、かなり長い間の周り探して、それでもまだ解決策や回避策を見つけていません。ページロードラインbrowser.get("http://example.com/example-page.php")に実際に影響するものは何もないようです。そのため、常にそこに停滞しています。

誰でも解決方法がありますか?

アップデート1:

JimEvans'答えは、私の前の問題を解決し、そしてhereあなたは、この新しい機能のための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)を見ることができるようにのみ、このページのロードが30秒以上、それはタイムアウト例外をスローするかどうかを意味しbrowser.get("http://example.com/example-page.php")に影響を与えますが、問題は、それが何を持っているということではありませんexplicit waitsまたはimplicit waitsのいずれかが、検索を開始する前にページ全体が読み込まれるのを待つため、新しいページが完全に読み込まれるまでブロックされませんが、element.click()などのページの読み込みをパワーアップします。another_element = browser.find_element_by_id("another_element")その要素。極端な場合には、HOURSとなります。それについて私は何ができますか?

答えて

12

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

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

、私はメンテナが熱心に受け入れるだろうと確信していますそれを実装したパッチ。

+0

クール!確かに素晴らしい機能があります。 –

+0

@JimEvans:ありがとうございます。このhttp://code.google.com/p/selenium/issues/detail?can=2&start=0&num=100&q=&colspec=ID%20Stars%20Type%のPythonパッチが見つかりました。 20Status%20Priority%20Milestone%20Owner%20Summary&groupby =&sort =&id = 687、それは素晴らしい作品です。 – Shane

+0

@JimEvans:ねえ、私の更新を確認してください。私に迷惑をかける新しい問題があります。 – Shane

0

期待される要素が存在するのを待ってから(例えば5〜8秒間)待ってからwindow.stop()JS Script(他の要素の読み込みを停止する)を送信することで、ページ全体を読み込んだり、5〜8秒後にページロードのタイムアウト例外をキャッチした後、window.stop()を呼び出す

ページがレイジーローディング技術を採用していないと)、window.ready状態を返す前に各要素をロードするので、要素のどれかがレンダリングに時間がかかる場合は遅くなります。

関連する問題