Начните с начала, используя l oop для тайм-аута соединения с использованием Selenium и Python - PullRequest
1 голос
/ 19 января 2020
from selenium import webdriver
import time

browser = webdriver.Chrome('C:/Users/acer/Desktop/chromedriver')
browser.get('website')

def user():
    while True:
        time.sleep(1)
        try:
            browser.find_element_by_id('q').send_keys('name') #Type in name
            browser.find_element_by_tag_name('button').click()  #Click "verify"

        finally:
            browser.find_element_by_tag_name('button').click()  #When connection times out, click "try again"
user()      #When connection times out again run "while loop" from the begining

Я хочу начать с самого начала, когда время соединения снова истекает, и сделать бесконечным l oop, пока соединение не будет успешным.

Ответы [ 2 ]

1 голос
/ 20 января 2020

Кажется, ты был почти идеален. Чтобы продемонстрировать "запуск с самого начала, когда соединение снова прерывается, и создание бесконечного l oop до тех пор, пока соединение не установится" , вот небольшая программа, которая выполняет следующие действия:

  • Открывает URL https://www.google.com/
  • Находит элемент By.NAME, "q"
  • Очищает поле
  • Отправляет последовательность символов name
  • Пытается щелкнуть элемент find_element_by_tag_name('button')
  • Сбой и повторное использование continue.
  • Кодовый блок:

    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.common.exceptions import TimeoutException, WebDriverException
    
    options = webdriver.ChromeOptions() 
    options.add_argument("start-maximized")
    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    options.add_experimental_option('useAutomationExtension', False)
    browser = webdriver.Chrome(options=options, executable_path=r'C:\WebDrivers\chromedriver.exe')
    browser.get('https://www.google.com/')
    def user():
        while True:
            print("Starting while loop")
            try:
                element = WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.NAME, "q")))
                element.clear() #clear the previous text
                element.send_keys('name') #Type in name
                browser.find_element_by_tag_name('button').click()
            except (WebDriverException, TimeoutException):
                print("Go to while loop from the begining")
                continue
    user()
    
  • Консольный вывод:

    Starting while loop
    Go to while loop from the begining
    Starting while loop
    Go to while loop from the begining
    Starting while loop
    Go to while loop from the begining
    .
    .
    .
    

Этот сценарий использования

Вы можете следовать аналогичным логикам c и Ваш эффективный блок кода будет:

from selenium import webdriver
import time

browser = webdriver.Chrome('C:/Users/acer/Desktop/chromedriver')
browser.get('website')

def user():
    while True:
    time.sleep(1)
    try:
        browser.find_element_by_id('q').send_keys('name') #Type in name
        browser.find_element_by_tag_name('button').click()  #Click "verify"

    except WebDriverException:
        continue #When connection times out again run "while loop" from the begining
user()
1 голос
/ 19 января 2020

Итак, вы почти у цели. Вам нужно использовать попробовать / исключить, а не попробовать / окончательно.

Selenium вызовет исключение тайм-аута. except и finally оба используются при работе с исключениями:

  • except, когда python вызывает исключение, программа выйдет, если вы не перехватите исключение с помощью ветви исключения
  • finally если возникает исключение, любой код в ветви finally выполняется до выхода из программы.

Если вы используете ветвь исключений, программа просто будет l oop снова вокруг. Убедитесь, что вы перехватили указанное исключение c timeout в ветви исключений, иначе ваша программа замедлит все ошибки!

...