У меня возник вопрос относительно того, как неявное ожидание работает в селене. Насколько я понимаю, подразумеваемые ожидания ждут, пока элемент не окажется/видимым/присутствующим, с заданным максимумом. Например:Вопрос: о неявных ожиданиях в python + selenium
wait = WebDriverWait(driver,
10).until(EC.presence_of_element_located((By.CLASSNAME,'classname')))
Это заявление делает селен ждать, пока присутствие элемента с именем класса «Classname» не найдено, или пока не более десяти секунд времени ожидания выполняются, не так ли?
Теперь, я написал скрипт, который получает данные с веб-сайта и использует неявные ожидания, как это:
def move_to_next_page():
(this function loads the next page)
def get_page_data():
wait = WebDriverWait(driver,
10).until(EC.presence_of_element_located((By.CLASS_NAME, 'class')))
items = driver.find_elements_by_class_name('class')
for item in items:
itemList.append(item.text)
return itemList
move_to_next_page()
get_page_data()
Вчера, я побежал этот сценарий успешно несколько раз; неявные ожидания приостановили мою программу на срок до пяти секунд, чтобы все прошло правильно. Тем не менее, я пытаюсь запустить скрипт прямо сейчас, и около 70% от времени я получаю сообщение об ошибке, говорящее:
selenium.common.exceptions.StaleElementReferenceException: Message:
stale element reference: element is not attached to the page document
Подразумевая, что браузер по-прежнему загружается? Странно то, что я получаю это сообщение до того, как будет достигнут предел в 10 секунд. Я даже пробовал 20 и 30 секунд, но селен все еще вылетает много раз. Почему селен не будет ждать по крайней мере 10/20/30 секунд?
Я уверен, что неявные ждет вызвать сбой, поскольку, когда я использую явные ожидания, как:
time.sleep(4)
Программа запускается каждый раз.
У меня есть данные, которые я ищу, поэтому мне больше не нужен этот скрипт. Это просто разочарование, когда вы не можете написать что-то, что будет работать независимо от времени загрузки браузера.
Заранее благодарен!
Вы имеете в виду явное ожидание ('WebDriverWait' +' ExpectedConditions') или неявное ('webdriver.implicitly_wait()')? – Andersson
WebDriverWait + ExpectedConditions! – titusAdam