首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Selenium找到循环遍历div列表的元素?

如何使用Selenium找到循环遍历div列表的元素?
EN

Stack Overflow用户
提问于 2020-05-08 18:01:57
回答 3查看 1.6K关注 0票数 1

在如下结构的HTML文件中:

代码语言:javascript
运行
复制
<div class="card">
    <div class="id">
        ID: 123456
    </div>
    <div class="title">
        Title 1
    </div>
    <div class="description">
        Description 1
    </div>
</div>

<div class="card">
    <div class="id">
        ID: 89123
    </div>
    <div class="title">
        Title 2
    </div>
</div>

假设我有一个可变数量的div与类“卡”,使用Selenium我想循环这些div,如果有div的类描述,我想打印他的文本。我试图在下面执行类似于代码的操作,但使用find_element_by_xpath。我将始终得到具有类"description“的第一个元素。如何通过循环遍历div来修复这个问题和正确获取元素?非常感谢。

代码语言:javascript
运行
复制
cards = webdriver.find_elements_by_xpath("//div[@class='main-div']")

for card in cards:
    try:
        description = card.find_element_by_xpath("//div[@class='description']")
        print(description.text)
    except:
        print("No description")
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-05-08 18:17:45

您需要获得所有带有类“卡”的div,并在其中搜索div“描述”:

代码语言:javascript
运行
复制
cards = webdriver.find_elements_by_css_selector(".card")

for card in cards:

    try:

        description = card.find_element_by_css_selector(".description")
        print(description.text)

    except:

        print("No description.")

PS:或者把你的第一个XPath改为//div[@class='card'],把第二个XPath改为.//div[@class='description'],就像其他人建议的那样。

我希望它能帮到你!

票数 2
EN

Stack Overflow用户

发布于 2020-05-08 18:52:02

只需将.用于intermediate子tag.So,应该是这样的

代码语言:javascript
运行
复制
card.find_element_by_xpath(".//div[@class='description']")

代码在这里:

代码语言:javascript
运行
复制
cards = webdriver.find_elements_by_xpath("//div[@class='card']")

for card in cards:
    try:
        description = card.find_element_by_xpath(".//div[@class='description']")
        print(description.text)
    except:
        print("No description")
票数 1
EN

Stack Overflow用户

发布于 2020-05-08 21:17:26

您可以使用一个定位器和一个循环来完成这个任务。

代码语言:javascript
运行
复制
for description in driver.find_elements_by_css_selector("div.card > div.description"):
    print(description.text)

注意:如果您想要对当前代码进行修复,那么您只是在第二个XPath中缺少了self XPath轴。将"//div[@class='description']"更改为".//div[@class='description']",以指示要开始搜索当前的card元素。

有关self轴的更多信息,请参见mdn,它具有大量XPath和CSS选择器相关信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61685222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档