如何使用Selenium和Python在元素内部找到元素?

时间:2019-10-15 18:14:57

标签: python html css selenium-webdriver

在这个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 类中的所有元素(即book,titlepage,book和book)。有办法吗?

编辑:弗朗西斯科·索里玛(Francisco sollima)给了我正确的答案,我现在将分享一下。在我最初的问题中,我没有注意到在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')

这将返回

下的嵌套元素。

1 个答案:

答案 0 :(得分:0)

如果“ calibre”类只有一个元素,而这正是您需要的元素,则可以执行以下操作:

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

当您执行driver.find_element_by_class_name('calibre')(或与此相关的任何其他driver.find...函数)时,该调用将返回一个对象,该对象具有与driver相同的方法。换句话说,您将获得一部分网页,就像浏览整个网页一样。

在这种情况下,driver.find_element_by_class_name('calibre')将返回网页的一部分,其中de元素的类别为“ calibre”,并且其所有元素均为子元素。要访问它的div,您应该使用find_elements_by_tag_name浏览它。