用硒提取第一个孩子

2024-04-24 21:13:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用文本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")>

编辑:

我通过点击showmore按钮解决了这个问题。由于某些原因,我不能提取的内容,如果不可见,即使在页面中存在。你知道吗


Tags: text文本childbyextractelementfindthis
2条回答

根据你的CSS选择,似乎你的目标如下

<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

要从第一个<span>中提取文本,即提取此文本您需要为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
    

相关问题 更多 >