如何使用Selenium和Python查找元素内部的元素?
在这个HTML示例中,我无法理解返回特定元素的语法如何使用Selenium和Python查找元素内部的元素?,python,html,css,selenium-webdriver,Python,Html,Css,Selenium Webdriver,在这个HTML示例中,我无法理解返回特定元素的语法 刮网 我尝试的是driver.find\u elements\u by\u tag\u name('div.calibre.div')并使用 ('div.calibre.div')|('div.calibre+div')和其他关于这些的变体。我已设法返回页面中的所有div元素,但我只想返回嵌套在calibre类中的所有元素(即book、titlepage、book和book)。有办法做到这一点吗 编辑:弗朗西斯科·索利马给了我正确的答案,我
刮网
我尝试的是driver.find\u elements\u by\u tag\u name('div.calibre.div')
并使用
('div.calibre.div')|('div.calibre+div')
和其他关于这些的变体。我已设法返回页面中的所有div元素,但我只想返回嵌套在calibre类中的所有元素(即book、titlepage、book和book)。有办法做到这一点吗
编辑:弗朗西斯科·索利马给了我正确的答案,我现在将与大家分享。在我最初的问题中,我没有注意到带有类在HTML文档底部关闭,因此使用的语法返回的对象比预期的多。这是修改后的HTML,以防任何人需要此信息
要查找顶部下的所有元素,即
语法将是驱动程序。按类名('titlepage')查找元素。按标签名('div')查找元素。,或者语法可以是驱动程序。按标签名('div.titlepage')查找元素。按标签名('div')查找元素。
这将返回
这将返回
下的嵌套元素。如果只有一个元素具有类“calibre”,并且它是您需要的元素,则可以执行以下操作:
在这种情况下,
driver.find_element_by_class_name('calibre').find_elements_by_tag_name('div')
当您执行driver.find\u element\u by_class\u name('calibre')
(或任何其他driver.find…
函数)时,该调用返回一个与driver具有相同方法的对象。换句话说,你得到了一个网页的一部分,你可以像浏览整个网页一样进行浏览
在这种情况下,
driver.find\u element\u by_class\u name('calibre')
将返回带有de element(其类为'calibre')的网页的一部分及其所有子项。要访问它的div,您应该使用find\u elements\u by\u tag\u name
在您的示例中,我没有将“calibre”视为类名。我确实认为这是一个id的开始,这是非常不同的。有没有其他你没有包括的外部分区?还有,你想获取什么信息?只要问一下,你就会得到一本div.book和它下面的所有东西。另一个标题是标题页和下面的所有内容。等等我认为你需要更好地定义你的目标,才能得到正确的答案。@MivaScott对不起,我不小心把那部分注释掉了,现在就修好了。谢谢你的评论。我尝试返回类calibre的div下面的每个div,但不返回它之外的任何div。当我尝试返回整个页面上的每个div元素时,它不只是那些嵌套在calibre类下面的元素。编辑:哎哟,我想这个div包含了整个页面,这就是我出错的地方。你只需要calibre div的直接子级div?你的答案是正确的,我只是没有看到原始div的结尾,它在页面底部。我刚刚在另一个部分尝试了你的方法,效果很好。非常感谢。