Как найти элементы внутри элементов, используя Selenium с Python? - PullRequest
1 голос
/ 15 октября 2019

Я не могу понять синтаксис для возврата определенных элементов в этом примере HTML.

<div class="calibre" id="calibre_link-0">
    <div class="book" title="Chapter 11. Web Scraping">
        <div class="titlepage">
            <div class="book">
                <div class="book">
                    <h1 class="title1"><a id="calibre_link-2915" class="firstname"></a>Web Scraping</h1>
                </div>
            </div>
        </div>

Я попытался использовать driver.find_elements_by_tag_name('div.calibre.div'), а также использовать ('div.calibre .div') | ('div.calibre + div') и другие варианты. Мне удалось вернуть все элементы div на странице, но я просто хочу вернуть все элементы, вложенные в класс calibre (т.е. книга, титульный лист, книга и книга). Есть ли способ сделать это?

РЕДАКТИРОВАТЬ: Франциско Соллима дал мне правильный ответ, и я собираюсь поделиться им сейчас. В своем исходном вопросе я не заметил, что

с классом закрывается в нижней части HTML-документа, поэтому используемый синтаксис возвращал больше объектов, чем ожидалось. Это пересмотренный HTML на случай, если кому-то понадобится эта информация.
<div class='titlepage'>
    <div class='book'>
        <div class='book'>
        </div>
    </div>
</div>

Чтобы найти все элементы в верхнем элементе

, то есть
, синтаксис будет driver. find_elements_by_class_name ('titlepage'). find_elements_by_tag_name ('div') , альтернативно синтаксис может быть driver.find_element_by_tag_name ('div.titlepage'). find_elements.by_tag_name ('div' 1019) 1019 *1019* Это вернет вложенные элементы в .

1 Ответ

0 голосов
/ 15 октября 2019

Если есть только один элемент с классом «калибр», и это тот, который вам нужен, вы можете сделать:

driver.find_element_by_class_name('calibre').find_elements_by_tag_name('div')

Когда вы выполняете driver.find_element_by_class_name('calibre') (или любую другую функцию driver.find... для этогоимеет значение), этот вызов возвращает объект, который имеет те же методы, что и драйвер. Другими словами, вы получаете часть веб-страницы, по которой вы можете перемещаться так же, как и по всей веб-странице.

В этом случае driver.find_element_by_class_name('calibre') вернет часть веб-страницы с элементом de, класс которого равен 'calibreи все это дети. Чтобы получить доступ к его элементам div, вы должны перемещаться по нему с помощью find_elements_by_tag_name.

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