Язык программирования Python

Как создать динамическое явное ожидание с помощью selenium в Python?

Я создал программу на Python для веб-скрапинга данных на сайте, но при ее выполнении иногда возникала проблема:

WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH,'/This_is_it_XPATH')))
Code language: JavaScript (javascript)

Я задал вышеуказанное явное ожидание, чтобы получить определенный фрагмент данных с веб-сайта.

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

Однако в некоторых случаях возникала следующая ошибка:

TimeoutException

Это привело к тому, что выполнение моей программы остановилось, и мне пришлось повторить весь процесс, который я уже проделал.

Параметр ожидания в 10 секунд не всегда эффективен.

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

Например, я мог бы просто заставить процесс повторяться “принудительно”, пока видимость элемента не будет окончательно загружена, чтобы я мог получить данные, например, с помощью блоков try и exception.

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

Решение.

Чтобы сделать это так, как вы говорите (используя try, except), вы можете установить переменную, которая будет выполнять функцию счетчика, она будет увеличиваться до того момента, который вы укажете (максимальное значение счетчика).

Эту же переменную, вы всегда должны будете определять, прежде чем начать искать первый элемент из всех, например:

x = 0 # Счетчик driver.get(url) while x < 100: # попытка найти элемент за 10 секунд, если нет, продолжить работу try: elemento = driver.find_element_by_name('name') elemento.click() # Или событие, которое вы хотите запустить. x = 0 # Элемент уже найден, поэтому счетчик возвращается в 0. break except: # если не найден time.sleep(0.1) # Ожидание 100 миллисекунд (десятая часть секунды), не забудьте импортировать модуль времени: import time x += 1 # Увеличение счетчика
Code language: PHP (php)

Как вы видите, в sleep есть (0.1), это сделано для того, чтобы быстрее найти его и выполнить действие, но вы также могли бы заменить его на (1), а также убрать 0 в начале while (это замедлит поиск).

Если в будущем вам придется искать другой элемент, все будет точно так же, но вам не нужно будет объявлять счетчик, так как он уже был установлен в 0 ранее.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *