python - 如何遍历 webelements 以从 Selenium Web Automation (Python) 中的 HTML 标签中提取文本?
问题描述
我正在制作一个 reddit 机器人,它将在评论中查找某些属性,使用 selenium 访问信息网站,并用于driver.find_elements_by...
获取这些标签内的值。
现在,driver.find_elements_by...
它是不可迭代的,并且<span class="name">Lorem Ipsum</span>
我想要获得多个带有文本的标签。我将其存储为变量并通过 PRAW 回复评论。
假设 HTML 是这样的:
<span class="name">Lorem</span>
<span class="name">Ipsum</span>
<span class="name">Dolor</span>
<span class="name">Sit</span>
<span class="name">Amet</span>
那么,我如何从所有<span class="name">
标签中获取文本,当我将其存储为变量并回复时,它会将所有文本放在一起而没有空格还是会在每个文本之间使用空格来格式化它,假设我写:
tags = driver.find_element_by...
comment.reply("Tags: {}".format(tags))
如果它只是将所有文本放在一起,我该如何格式化它以便有空格?
解决方案
要从所有使用Selenium和python中提取文本,例如Lorem、Ipsum、Dolor、Sit、Amet等,您必须诱导WebDriverWait并且您可以使用以下任一Locator Strategies:<span>
visibility_of_all_elements_located()
使用
CSS_SELECTOR
和get_attribute("innerHTML")
:print([my_elem.get_attribute("innerHTML") for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "span.name")))])
使用
XPATH
和文本属性:print([my_elem.text for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//span[@class='name']")))])
控制台输出:
['Lorem', 'Ipsum', 'Dolor', 'Sit', 'Amet']
注意:这是字符串类型的列表,您可以根据需要进行操作。
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
奥特罗
链接到有用的文档:
get_attribute()
方法Gets the given attribute or property of the element.
text
属性返回The text of the element.
- 使用 Selenium 的 text 和 innerHTML 之间的区别
推荐阅读
- azure-functions - 我可以通过我的 webhook 将事件直接发送到 Azure 事件中心吗?
- javascript - 我单击一个按钮,但它没有执行应有的功能。我该如何解决?(镀铬扩展)
- r - Shiny R + Leaflet SearchInput 默认显示所有点
- angular - 过滤器不起作用:错误无法读取 null 的属性“toLowerCase”
- elasticsearch - 计算 ElasticSearch 索引中文档所在的页面
- python - Geopy Google v3 - 从 location.raw 中提取地址组件
- javascript - Angular 10 自定义 orderBy 管道,传递特定的值层次结构,不升序或降序
- css - 为什么不能在网格中心留一个空白?
- date - Tableau 度量计数项目(如果在日期之间)
- javascript - 在 for 循环中进行过多的 API 调用(超出限制)Javascript