首页 > 解决方案 > 如何遍历 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))

如果它只是将所有文本放在一起,我该如何格式化它以便有空格?

标签: pythonseleniumxpathcss-selectorswebdriverwait

解决方案


要从所有使用Selenium中提取文本,例如LoremIpsumDolorSitAmet等,您必须诱导WebDriverWait并且您可以使用以下任一Locator Strategies<span>visibility_of_all_elements_located()

  • 使用CSS_SELECTORget_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
    

奥特罗

链接到有用的文档:


推荐阅读