【问题标题】:How to iterate through webelements to extract text from HTML tags in Selenium Web Automation (Python)?如何遍历 webelements 以从 Selenium Web Automation (Python) 中的 HTML 标签中提取文本?
【发布时间】:2020-09-27 02:58:57
【问题描述】:

我正在制作一个 reddit 机器人,它将在 cmets 中查找某些属性,使用 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>

那么,我如何从所有&lt;span class="name"&gt; 标签中获取文本,当我将其存储为变量并回复时,它会将所有文本放在一起而没有空格,还是会在它们之间用空格格式化它每个文本,假设我写:

tags = driver.find_element_by...
comment.reply("Tags: {}".format(tags))

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

【问题讨论】:

    标签: python selenium xpath css-selectors webdriverwait


    【解决方案1】:

    提取文本,例如LoremIpsumDolorSitAmet&lt;span&gt; 使用Selenium 你必须为visibility_of_all_elements_located() 诱导WebDriverWait,你可以使用以下Locator Strategies 之一:

    • 使用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")))])
      
    • 使用XPATHtext属性:

      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
      

    结尾

    链接到有用的文档:

    【讨论】:

      猜你喜欢
      • 2021-01-12
      • 2014-06-18
      • 1970-01-01
      • 2020-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-21
      相关资源
      最近更新 更多