@zlodiak

Как избавиться от таймаутов?

При помощи selenium я имитирую клик по элементу так:

import time
from selenium import webdriver

driver = webdriver.Chrome('/home/qwe/chromedriver')
driver.get('https://www.avito.ru/saransk/kvartiry/1-k_kvartira_47_m_25_et._1610295577');  # действие 1
time.sleep(1)

hide_phone_el = driver.find_element_by_css_selector('a.item-phone-button_hide-phone')  # действие 2
hide_phone_el.click()
time.sleep(1)

print('the end')


Я не совсем понимаю нужно ли здесь вместо таймаутов использовать асинхронные штуки типа asyncio или здесь действие 2 будет выполняться только после успешного/неуспешного завершения действия 1
  • Вопрос задан
  • 108 просмотров
Решения вопроса 1
qlkvg
@qlkvg
python backend developer
Только после. Но не всегда, потому что selenium полон магии. Используйте явные ожидания, это лучший путь.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@abbrakadabbra
Следующая строчка может быть выполнена, но если в ней не будет элемента, то будет эксепшен.

Асинхронные подгрузки на странице, непредсказуемые изменения в DOM?
Думаю, для этого вам нужно использовать методы типа wait until element is visible, делать проверки is present, is displayed etc.
На практике было такое, с очень сложным и неконсистентным поведением. Использовать вплоть до try/except, вылавливая эксепшены и подстраивая поведение.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы