【问题标题】:Extract first span child with Selenium用 Selenium 提取第一个跨度子项
【发布时间】:2020-02-21 17:26:45
【问题描述】:

我想提取带有文本Extract this text 的第一个span。已经试过了:

element.find_element_by_css_selector(".moreContent span:nth-child(1)").text.strip('"')

这不起作用,我不知道为什么。输出只是空的。

<p class="mainText">
  Lorem Ipsum is simply dummy text of the printing and typesetting industry.
  <span class="moreEllipses">…&nbsp;</span>
  <span class="moreContent">
    <span> Extract this text </span>
    <span class="link moreLink">Show More</span>
  </span>
</p>

但是我得到了这个,所以 Selenium 找到了元素但是为什么输出是空的:

<selenium.webdriver.remote.webelement.WebElement (session="e7012b303842651848aa0b0e40f5d5c1", element="df5644e9-fc98-4300-ad86-9ff433154d82")>

编辑:

我通过单击显示更多按钮设法解决了这个问题。出于某种原因,即使页面中显示不可见,我也无法提取内容。

【问题讨论】:

  • 您在寻找哪个元素? …&nbsp 或提取此文本?
  • @ShubhamJain "提取此文本"
  • 我在下面回答的 Xpath 是否有效?
  • @ShubhamJain,很遗憾没有。无法定位元素
  • 这个元素是否在任何框架标签内?

标签: python selenium xpath css-selectors webdriverwait


【解决方案1】:

根据您的 cssSelector,您的目标似乎在​​下方

<span> Extract this text </span>

你可以使用下面的Xpath:

(//p[@class='mainText']//span[@class='moreContent']/span)[1]

(//span[@class='moreContent']/span)[1]

示例代码:

element = driver.find_element_by_xpath("(//p[@class='mainText']//span[@class='moreContent']/span)[1]").text

【讨论】:

    【解决方案2】:

    要从第一个&lt;span&gt; 中提取文本,即提取此文本,您需要为visibility_of_element_located() 诱导WebDriverWait,您可以使用以下任一方法Locator Strategies:

    • 使用CSS_SELECTORtext 属性:

      print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "p.mainText span.moreContent>span"))).text)
      
    • 使用XPATHget_attribute() 方法:

      print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//p[@class='mainText']//span[@class='moreContent']/span"))).get_attribute("innerHTML"))
      
    • 注意:您必须添加以下导入:

      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.webdriver.common.by import By
      from selenium.webdriver.support import expected_conditions as EC
      

    【讨论】:

      猜你喜欢
      • 2014-09-22
      • 2017-06-22
      • 2018-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多