Как нажимать на элемент стрелки в разбивке на страницы, который вызывает Элемент, невидимый через WebDriverWait

Я пытаюсь щелкнуть ссылку на следующую страницу на этой веб-странице: https://www.kumon.co.uk/find-a-tutor/. Эта страница будет пустой, пока вы не наберете такое место, как Лондон, Манчестер или где бы то ни было :)

Исходный код выглядит следующим образом:

<nav class="visible-xs-block">
             <ul class="pager">

                                        <li>
                        <a data-page="2" href="https://www.kumon.co.uk/find-a-tutor/?centre_search=london&page=2"><small><i class="fa fa-chevron-right"></i></small></a>
                    </li>

            </ul>
        </nav>

Я пытаюсь сделать следующий щелчок на следующей странице двумя способами:

  • Первое испытание:

    browser.find_elements_by_xpath("//*[@class='fa fa-chevron-right']/../..")[2].click()
  • Ошибка:

    selenium.common.exceptions.ElementNotVisibleException: Message: element not visible
  • Второе испытание:

    WebDriverWait(browser, 30).until(EC.presence_of_element_located((By.XPATH, "//*[@class='fa fa-chevron-right']/../.."[2]))).click()
  • Ошибка:

    selenium.common.exceptions.WebDriverException: Message: unknown error: Failed to execute 'getComputedStyle' on 'Window': parameter 1 is not of type 'Element'.

Важно то, что я не могу найти документацию относительно второго сообщения об ошибке, и именно поэтому я отправляю свое первое сообщение о stackoverflow :)

FYI , когда я убираю то время как браузер . find_element_by_xpath ( "// ul [@ class = 'pagination'] // li [last ()] / a / small" ): action = ActionChains ( браузер ) search_button = WebDriverWait ( браузер , 20 ). до ( EC . element_to_be_clickable (( By . XPATH , "// ul [@ class = 'pagination'] // li [last ()] / a / small" ))) действие . move_to_element ( search_button ) sleep ( 1 ) search_button . click () элемент хорошо локализован, так что это щелчок (), который выглядит как бы: /

Я нашел это решение, касающееся Javascript, который может быть классным для меня, но я действительно не знаю, как реализовать this = $ x ( "// ul [@ class = 'pagination'] // li [last ()] / a / small " ) Элемент Selenium Element не видно исключение

Что вы думаете об этом ?

У вас есть идея помочь мне, пожалуйста? Я застрял в этом вопросе за 2 дня, к сожалению :(

РЕДАКТИРОВАТЬ:

Этот фрагмент:

click()

вызывает ошибку selenium.common.exceptions.StaleElementReferenceException: Message: ссылка на устаревший элемент: элемент не привязан к документу страницы

И я не уверен, что использование try ... except - лучшее решение для его решения, не так ли?

Спасибо заранее, Николас.

python,selenium,selenium-webdriver,xpath,webdriverwait,

0

Ответов: 2


0 принят

Looks xpath, который используется, неверен. Его хорошо перекрестно проверить xpath в консоли браузера. xpath, указанный в приведенном выше ответе @DebanjanB, хорош. попробуйте один раз: в хром-> F12-> Консоль: вставьте ниже единицы и введите.

>

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


1

Для вызова click()на >значке , чтобы перейти к следующей странице вам нужно вызвать WebDriverWait для желаемого элемента , чтобы быть интерактивным , и вы можете использовать следующее решение:

WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//ul[@class='pagination']//li[last()]/a/small"))).click()

Примечание . Необходимо добавить следующие импорты:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
Python, селен, селен-WebDriver, XPath, webdriverwait,
Похожие вопросы
Яндекс.Метрика