如何使用 Python 使用 Selenium 获取 <ul> 中的 <li> 元素列表?

Posted

技术标签:

【中文标题】如何使用 Python 使用 Selenium 获取 <ul> 中的 <li> 元素列表?【英文标题】:How to get a list of the <li> elements in an <ul> with Selenium using Python? 【发布时间】:2015-04-09 12:04:16 【问题描述】:

我正在使用 Selenium WebDriver 和 Python 进行 UI 测试,我想检查以下 html

<ul id="myId">
    <li>Something here</li>
    <li>And here</li>
    <li>Even more here</li>
</ul>

我想从这个无序列表中循环遍历元素并检查其中的文本。我通过 id 选择了 ul 元素,但我找不到任何方法来循环 Selenium 中的 &lt;li&gt;-children。

有人知道如何使用 Selenium(在 Python 中)遍历无序列表的 &lt;li&gt;-childeren 吗?

【问题讨论】:

请提供html或至少一个样本 HTML 由于缺少缩进而被掩埋。 【参考方案1】:

您可以使用列表推导:

# Get text from all elements
text_contents = [el.text for el in driver.find_elements_by_xpath("//ul[@id='myId']/li")]
# Print text
for text in text_contents:
    print(text)

【讨论】:

【参考方案2】:

奇怪的是,我不得不使用这个 get_attribute()-workaround 来查看内容:

html_list = driver.find_element_by_id("myId")
items = html_list.find_elements_by_tag_name("li")
for item in items:
    print(item.get_attribute("innerHTML"))

【讨论】:

【参考方案3】:

您需要使用.find_elements_by_ 方法。

例如,

html_list = self.driver.find_element_by_id("myId")
items = html_list.find_elements_by_tag_name("li")
for item in items:
    text = item.text
    print text

【讨论】:

通过有一个名为list 的变量,你正在隐藏一个内置的list,这可能会导致非常奇怪的问题。 马克,谢谢!这似乎工作得很好。最后一个问题;标签内实际上有一个链接:&lt;li&gt;&lt;a href="#"&gt;some link&lt;/a&gt;&lt;/li&gt;,我希望print item.text 打印该链接,但它不打印任何内容。您是否知道我将如何获取链接的 html,或者选择链接并打印出链接的文本?提前致谢! @alecxe 我完全同意,但没有人应该只是复制粘贴。 :) 但我已经编辑了变量以防万一。

以上是关于如何使用 Python 使用 Selenium 获取 <ul> 中的 <li> 元素列表?的主要内容,如果未能解决你的问题,请参考以下文章

Selenium 无法使用 python 抓取 Shopee 电子商务网站

Python爬虫实例使用selenium抓取斗鱼直播平台数据

如何在 Python 中使用 Selenium?

如何使用 selenium、python 上传文件(图片)

如何使用 python 和 Selenium 将 cookie 保存在浏览器中

使用 Selenium 和 Python,如何检查按钮是不是仍然可点击?