Как мне получить доступ к вложенным html элементам, используя селен? - PullRequest
0 голосов
/ 28 апреля 2020

Я пользуюсь веб-сайтом расписания школьных занятий и хочу получить доступ к элементу div, который содержит информацию о том, сколько мест в классе и кто его преподает, чтобы его очистить. Сначала я нахожу элемент, который содержит элемент div, который я хочу, после этого я пытаюсь найти нужный элемент div, используя xpaths. проблема, с которой я сталкиваюсь, заключается в том, что когда я пытаюсь использовать либо find_element_by_xpath, либо find_elements_by_xpath, чтобы получить div, который я хочу, я получаю эту ошибку:

'list' object has no attribute 'find_element_by_xpath'

происходит ли эта ошибка, потому что вложенный элемент div, который я хочу найти? Есть ли способ получить вложенные элементы, используя тег div?

вот код, который у меня есть в настоящее время:


driver = webdriver.Chrome(ChromeDriverManager().install())
url = "https://app.testudo.umd.edu/soc/202008/INST"
driver.get(url)
section_container = driver.find_elements_by_id('INST366')

sixteen_grid = section_container.find_element_by_xpath(".//div[@class = 'sections sixteen colgrid']").text 



информация, которую я хочу это:


<div class = "sections sixteen colgrid"</div>

в настоящее время внутри этого тега id:

<div id="INST366" class="course"</div>

очень признателен, если кто-нибудь может помочь мне с этим

1 Ответ

0 голосов
/ 29 апреля 2020

Из документации из find_elements_by_id:

Возвращает: список WebElement - список с элементами, если таковые были найдены. Пустой список, если не

Что означает, что section_container является списком. Вы не можете вызвать find_element_by_xpath для списка, но вы можете сделать это для каждого элемента в списке, потому что они являются WebElement.

Что говорит документация о find_element_by_id?

Возвращает: WebElement - элемент, если он был найден

В этом случае вы можете напрямую использовать find_element_by_xpath. Какой из них вы должны использовать? Зависит от вашей потребности, если вам нужно найти первое совпадение, чтобы продолжить поиск информации, или вам нужно использовать все совпадения.

После исправления этой проблемы вы столкнетесь со второй проблемой: ваша информация отображается после выполнения javascript код при нажатии на «Показать разделы», так что вам нужно сделать это, прежде чем найти то, что вы хотите. Для этого go получите a href и щелкните по нему.

Новый код будет выглядеть так:

from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
url = "https://app.testudo.umd.edu/soc/202008/INST"
driver.get(url)
section_container = driver.find_element_by_id('INST366')
section_container.find_element_by_xpath(".//a[@class='toggle-sections-link']").click()
sleep(1)
section_info = section_container.find_element_by_xpath(".//div[@class='sections sixteen colgrid']").text
driver.quit()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...