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

  • Selenium с использованием Python - исполняемый файл Geckodriver должен находиться в PATH
  • python для расширений Firefox?
  • Selenium WebDriver не может загружать профиль
  • Selenium: исключение FirefoxProfile Не удается загрузить профиль
  • Selenium - система ошибок пути webdriver Python не может найти указанный путь
  • Работает только одна программа python (например, Firefox)?
  • В случае, если это полезно, мы специально используем 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 .

    Огромное спасибо!

  • Как хранить фреймворк с помощью Pandas
  • Изменение каталога подпроцесса
  • Как сделать строку unicode с python3
  • MaltParser не работает в Python NLTK
  • Как извлечь n-ые элементы из списка кортежей в python?
  • Должен ли я использовать объявление кодирования в Python3?
  • 4 Solutions collect form web for “Как установить тайм-аут по умолчанию для Selenium Python WebDriver?”

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

     driver.set_page_load_timeout(30) 

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

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

    ОБНОВИТЬ

    В java я вижу это, основываясь на этом :

     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.

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

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

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

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

    Python - лучший язык программирования в мире.