У меня есть скрипт Python / Selenium, работающий через страницу, и, чтобы не спамить сервер, я сплю полсекунды между взаимодействиями с элементами страницы. Я заметил проблему, когда скрипт «потерял отслеживание» элементов в моем списке, и совсем недавно обнаружил, что это происходит из-за автоматического обновления / сброса страницы во время выполнения скрипта. Идентификаторы, по-видимому, генерируются динамически, поэтому обновление обычно изменяет некоторые идентификаторы, и сценарий вылетает.
Когда я впервые столкнулся с проблемой, я просто включил в нее try-catch, пропуская элементы, которые у него былипотерял учет и записал ошибку, так как у меня не было никакой реальной информации по этой проблеме, и это было нечасто.
Задумавшись над этим и немного посмотрев сценарий в действии, я заметилнебольшое обновление и переупорядочение страницы с некоторыми элементами.
Лучшая идея, которая мне пришла в голову, ниже, где я полностью перезагружаю страницу и обновляю список MID-LOOP и начинаю заново. Это явно неправильный способ решения этой проблемы. Какой вариант лучше?
try:
browser.execute_script("arguments[0].click();", button)
except link_lost:
print('Lost track of something...')
browser.refresh() # Page glitch fix. Refresh, relocate buttons, start over.
browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(5) # could be optimized by keeping track of which question we're on and starting from there
target_buttons = browser.find_elements_by_css_selector('[aria-label=target]')