Как перезагрузить страницу selenium, если тайм-аут WebDriverWait? питон - PullRequest
0 голосов
/ 25 января 2019

Как вы можете использовать driver.refresh(), если во время ожидания WebDriverWait(driver, 30) не может найти элемент, он обновляет страницу и затем повторяет попытку, чтобы найти элемент?

Это элемент, который я ищу

quote = wait.until(EC.element_to_be_clickable((By.XPATH, '//h4[@class="quote-number ng-binding"]'))).text.split("#")[1]

Спасибо

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Если условие не выполнено, WebdriverWait выдает исключение- TimeoutException; вы можете поймать его и повторить попытку.
В то же время вы хотите ограничить количество повторных попыток - элемент может никогда не появиться, вы не хотите, чтобы этот блок работал вечно.

retries = 1
while retries <= 5:
    try:
        quote = wait.until(EC.element_to_be_clickable((By.XPATH, '//h4[@class="quote-number ng-binding"]'))).text.split("#")[1]
    except TimeoutException:
        driver.refresh()
        retries += 1
0 голосов
/ 25 января 2019

Насколько я понимаю, вы хотите найти элемент на какой-то странице, и если вы не можете его найти, вам нужно обновить страницу, чтобы повторить поиск. Если это ваше требование, то вы можете сделать так:

wait = WebDriverWait(driver, 30);
try:
    quote = wait.until(EC.element_to_be_clickable((By.XPATH, '//h4[@class="quote-number ng-binding"]'))).text.split("#")[1]
except TimeoutException:
    driver.refresh()

В приведенном выше коде блок try выдаст исключение TimeoutException, если элемент не найден в течение заданного времени ожидания. Блок исключений перехватит это исключение, и оно будет соответствовать, а затем обновит страницу.

Приведенный выше код выполнит эту операцию только один раз. Если вы хотите продолжить этот процесс, пока не найдете элемент, используйте следующий код:

notFound = True
while notFound:
    wait = WebDriverWait(driver, 30);
    try:
        quote = wait.until(EC.element_to_be_clickable((By.XPATH, '//h4[@class="quote-number ng-binding"]'))).text.split("#")[1]
        notFound = False
    except TimeoutException:
        driver.refresh()

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

wait = WebDriverWait(driver, 60, poll_frequency=5, ignored_exceptions=[NoSuchElementException, StaleElementReferenceException]);
quote = wait.until(EC.element_to_be_clickable((By.XPATH, '//h4[@class="quote-number ng-binding"]'))).text.split("#")[1]

, который будет искать элемент каждые 5 секунд, игнорируя исключения NoSuchElementException, StaleElementReferenceException вплоть до 1 минуты времени. Надеюсь, это поможет ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...