Time.sleep () на ChromeDriver - PullRequest
       18

Time.sleep () на ChromeDriver

1 голос
/ 24 марта 2020

Я использую ChromeDriver для некоторых операций с использованием Python. Мой код использует browser.find_element_by_xpath, но я должен включить time.sleep(3) между щелчками / вводом, потому что мне нужно дождаться загрузки веб-страницы, прежде чем я смогу выполнить следующую строку кода.

Интересно, знает ли кто-нибудь лучший способ сделать это? Может быть, функция, которая может автоматически выполнять следующую строку, когда браузер загружается, вместо того, чтобы ждать произвольное количество секунд?

Спасибо!

Ответы [ 2 ]

4 голосов
/ 24 марта 2020

Попробуйте с explicit wait, используя expected_conditions, как показано ниже.

Необходимость импорта:

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

Затем вы можете подождать, пока элемент появится перед взаимодействием.

# waiting for max of 30 seconds, if element present before that it will go on to the next line.
ele = WebDriverWait(driver,30).until(EC.presence_of_element_located((By.XPATH,"xpath_goes_here")))
ele.click() # or what ever the operation like .send_keys()

Таким образом, приложение будет динамически ожидать появления элемента. Обновите время с 30 секунд, если требуется, в зависимости от вашего приложения.

Также вы можете использовать различные стратегии определения местоположения при проверке наличия элемента, например: By.CSS_SELECTOR/By.ID/By.CLASS_NAME

0 голосов
/ 24 марта 2020

Я работал с функцией для этих случаев, которая добавляет устойчивость к сценарию. Например, для поиска элемента по xpath:

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


def findXpath(xpath,driver):
    actionDone = False
    count = 0
    while not actionDone:
        if count == 3:
            raise Exception("Cannot found element %s after retrying 3 times.\n"%xpath)
            break
        try:
            element = WebDriverWait(driver, waitTime).until(
                    EC.presence_of_element_located((By.XPATH, xpath)))
            actionDone = True
        except:
            count += 1
    sleep(random.randint(1,5)*0.1)
    return element 

Дайте мне знать, что это работает для вас!

...