Selenium анализирует весь документ вместо веб-элемента - PullRequest
0 голосов
/ 11 июля 2020

эта проблема действительно сводит меня с ума! Вот мой код:

list_divs = driver.find_elements_by_xpath("//div[@class='myclass']")
print(f'Number of divs found: {len(list_divs)}')  #Correct number displayed
for art in list_divs:
    mybtn = art.find_elements_by_xpath('//button')  #There are 2 buttons in each div
    print(f'Number of buttons found = {len(mybtn)}')  #Incorrect number (129 instead of 2)
    mybtn[2].click()  #Wrong button clicked! 

Нажатая кнопка НЕ в art Html, а в самом начале веб-страницы !!! Похоже, что Selenium анализирует весь документ, а не webelement art ... Я напечатал внешний HTML переменной art , и это правильно: только код div, который содержит 2 кнопки !!!! Так почему же функция find_elements_by_xpath(), примененная к веб-элементу art , анализирует не div, а всю страницу html ?? !!! Совершенно непонятно для меня!

Ответы [ 2 ]

1 голос
/ 12 июля 2020

Потому что вы используете mybtn = art.find_elements_by_xpath('//button'), где //button игнорирует ваш контекст поиска, поскольку он начинается с //. Измените его на:

mybtn = art.find_elements_by_xpath('.//button')
0 голосов
/ 12 июля 2020

Я не могу опубликовать код html (страница около 1000 строк). Пока что единственный способ, которым я видел go через это, - это избежать синтаксического анализа веб-элементов и выполнить синтаксический анализ всей веб-страницы для каждого элемента, который мне нужен:

list_divs = driver.find_elements(By.XPATH, "//div[@class='myclass']")
buttons = driver.find_elements(By.XPATH,"//div[@class='myclass']//button")

, а затем перебрать списки для доступа к кнопке Мне нужно для каждого div. Прекрасно работает вот так. Я до сих пор не понимаю, как xpath, примененный к данному коду html, может возвращать что-то, чего нет внутри этого кода html ... Я проведу другие тесты с другими веб-страницами, чтобы увидеть, исходит ли проблема из Selenium. Спасибо за помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...