web-dev-qa-db-ja.com

Selenium Python WebDriverのデフォルトのタイムアウトを設定するには?

Selenium Python WebDriver。理想的には、次のようなもの:

_my_driver = get_my_driver()
my_driver.set_timeout(30) # seconds
my_driver.get('http://www.example.com') # stops / throws exception when time is over 30     seconds
_

動作します。 .implicitly_wait(30)を見つけましたが、それが望ましい動作をもたらすかどうかはわかりません。

便利な場合、WebDriver for Firefoxを具体的に使用しています。

[〜#〜] edit [〜#〜]

@ameyの答えによると、これは役に立つかもしれません:

_ff = webdriver.Firefox()
ff.implicitly_wait(10) # seconds
ff.get("http://somedomain/url_that_delays_loading")
myDynamicElement = ff.find_element_by_id("myDynamicElement")
_

ただし、暗黙の待機がget(必要な機能)と_find_element_by_id_の両方に適用されるかどうかは明確ではありません。

どうもありがとう!

37

Pythonでは、ロードするページのタイムアウトを作成する方法は次のとおりです。

driver.set_page_load_timeout(30)

chromedriverの場合

driver.implicitly_wait(30)

これにより、ページの読み込みに30秒以上かかるたびにTimeoutExceptionがスローされます。

81

明示的待機と暗黙的待機に関する情報は こちら にあります。

[〜#〜] update [〜#〜]

Java this に基づいてこれを見る:

WebDriver.Timeouts pageLoadTimeout(long time,
                                 Java.util.concurrent.TimeUnit unit)

Sets the amount of time to wait for a page load to complete before throwing an error. If the timeout is negative, page loads can be indefinite.

Parameters:
    time - The timeout value.
    unit - The unit of time.

python同等。

5
Amey

最適な方法は、設定を行うことです。

fp = webdriver.FirefoxProfile()
fp.set_preference("http.response.timeout", 5)
fp.set_preference("dom.max_script_run_time", 5)
driver = webdriver.Firefox(firefox_profile=fp)

driver.get("http://www.google.com/")
5
Nima Soroush

私の解決策は、ブラウザーのロードイベントと一緒に非同期スレッドを実行し、ブラウザーを閉じて、タイムアウトが発生した場合にロード関数を再呼び出しすることでした。

#Thread
def f():
    loadStatus = true
    print "f started"
    time.sleep(90)
    print "f finished"
    if loadStatus is true:
        print "timeout"
        browser.close()
        call()

#Function to load
def call():
    try:
        threading.Thread(target=f).start()
        browser.get("http://website.com")
        browser.delete_all_cookies()
        loadStatus = false
    except:
        print "Connection Error"
        browser.close()
        call()

Call()はただ

2
Roni davelman