2017-04-05 11 views
0

私が実行しているスクリプトは、実行時に一貫性のあるデータを返しません。私はページを反復すると、すべてのページがJavascriptとAJAXを完全にロードするのを待っているとは思わない。この問題を解決しようとする試みで、私は以下の明示的な待機を追加しましたが、それは次のエラーが返されます。Python selenium webdriver明示的な待機接続エラー

ConnectionRefusedError: [WinError 10061] No connection could be made because the target machine actively refused it

from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 

browser = webdriver.Chrome() 
url = 'http://www.website.com' 
browser.get(url) 
try: 
    element = WebDriverWait(browser, 10).until(EC.presence_of_all_elements_located((By.ID, "results-main"))) 
finally: 
    browser.quit() 

print (browser.page_source) 

暗黙の待ち時間がエラーなしで実行されますが、それはまた、一貫性のあるソースコードを返しません。

+0

'browser.quit()'のためにページソースコードを取得できません。 。 'finally'演算子の後のコードブロックは**常に**を実行することに注意してください。 'browser.quit()の前に' browser.page_source'を実行する必要があるかもしれません。 – Andersson

答えて

0

イム)あなたがやっているので、これはbrowser.quit が(終了しているあなたはbrowser.page_source でこの例外を得ていると仮定 - あなたは

これは、ウェブ・ドライバ・インスタンスをシャットダウンしたり、破壊するために使用されているWebドライバ

tryブロックの最後にprintステートメントを追加するか、印刷後に終了を移動して終了する前にページソースを取得する必要があります:)

+0

これは正しいです。私の理解は、待機時間が超過した場合にのみQuit()が呼び出されていたことですが、そうではありません。 – Farmer

+1

いいえ、finallyブロックは、その中のコードが常に実行されることを保証する方法です。どのように動作するかを確認してください。 –

+0

@Farmer 'finally'を' catch'に置き換えると、意図した動作が得られるでしょう。おそらく、 'try-catch-finally'のドキュメントを読んで、どのように動作するのかを理解するのに時間がかかるでしょう。 – JeffC

関連する問題