Подтвердить что ты не робот

Как установить тайм-аут по умолчанию для 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 для Firefox.

ИЗМЕНИТЬ

В соответствии с ответом @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.

Большое спасибо!

4b9b3361

Ответ 1

В python метод для создания тайм-аута для загрузки страницы:

Firefox и Chromedriver:

driver.set_page_load_timeout(30)

Другое::

driver.implicitly_wait(30)

Это выдает TimeoutException всякий раз, когда загрузка страницы занимает более 30 секунд.

Ответ 2

Здесь можно найти информацию о явных и неявных ожиданиях здесь.

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.

Ответ 3

Лучший способ - установить предпочтение:

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/")

Ответ 4

Моим решением было запустить асинхронный поток вместе с событием загрузки браузера и закрыть его браузер и повторно вызвать функцию загрузки, если был тайм-аут.

#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() - это функция, которая просто