@Adoafw

Как сделать чтобы отработал корректно While если объект не виден на странице (Python Selenium)?

Всем привет написал код для Splinter Python:

Будет выполнять browser.find_by_css('.u-decoration-none.next.pagination-links_anchor').click() - листать страницу пока элемент по XPATH будет не найдет, когда найдет то browser.find_by_xpath(XPATH).first.click() - кликнет на него.
with Browser('chrome', options=None, user_agent=None) as browser:
    while (browser.is_element_present_by_xpath(XPATH) == False):
        browser.find_by_css('.u-decoration-none.next.pagination-links_anchor').click()
        sleep(4)
    else:
        browser.find_by_xpath(XPATH).first.click()
        sleep(5)
    browser.quit()

Все прекрасно работает если использую Splinter.
Благодаря методу is_element_present_by_xpath я могу проверить присутствие тут False или True. Как можно такое провернуть на Selenium?Пробывал такое, но не работает:

XPATH = '//a[@href="/biz/college-pro"]'
account = driver.find_element_by_xpath(XPATH)
while (account.is_displayed() == False):
        driver.find_element_by_css_selector('.u-decoration-none.next.pagination-links_anchor').click()
        sleep(4)
    else:
        account.click()
        sleep(5)


selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//a[@href="/biz/college-pro"]"}


P/S Да я хочу переписать все на Selenium ибо есть у него метод .location который отдает {'y': 5380.0, 'x': 617.0} в таком виде координаты которые мне очень нужны и этот метод в Splinter нету(((

Ребят плиз подскажите как решить проблему
  • Вопрос задан
  • 283 просмотра
Решения вопроса 1
@Adoafw Автор вопроса
driver.implicitly_wait(5)  # говорим, чтобы драйвер не унывал, если не найдёт элемент сразу, и пробовал подождать, в течение 5 секунд
    while True:
        try:
            element = driver.find_element_by_xpath(XPATH)  
        except NoSuchElementException:
            driver.find_element_by_css_selector('.u-decoration-none.next.pagination-links_anchor').click()
        else:
            element.click()
            break


Работает
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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