如何使用 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 中的 <li>
-children。
有人知道如何使用 Selenium(在 Python 中)遍历无序列表的 <li>
-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
,这可能会导致非常奇怪的问题。
马克,谢谢!这似乎工作得很好。最后一个问题;标签内实际上有一个链接:<li><a href="#">some link</a></li>
,我希望print item.text
打印该链接,但它不打印任何内容。您是否知道我将如何获取链接的 html,或者选择链接并打印出链接的文本?提前致谢!
@alecxe 我完全同意,但没有人应该只是复制粘贴。 :) 但我已经编辑了变量以防万一。以上是关于如何使用 Python 使用 Selenium 获取 <ul> 中的 <li> 元素列表?的主要内容,如果未能解决你的问题,请参考以下文章
Selenium 无法使用 python 抓取 Shopee 电子商务网站
Python爬虫实例使用selenium抓取斗鱼直播平台数据