【问题标题】:How to locate the element and extract the innerText using Selenium and Python如何使用 Selenium 和 Python 定位元素并提取 innerText
【发布时间】:2020-02-29 04:55:05
【问题描述】:
<span class="chr-UserDropdownItem-imageAndText">
    <img class="chr-UserDropdownItem-image" src="/slm/profile/image/264023573852/24.sp?version=1" alt="User Profile Avatar">
    <span class="smb-DropdownItem-text">
        <span>   test user   </span>
    </span>
</span>

通过查看上面的屏幕截图,请帮助我从 span 标签中唯一地提取innerText 测试用户

【问题讨论】:

  • 请勿贴代码截图。
  • 您是否已经在这里尝试过一些方法?在什么情况下它不起作用?
  • 其实是test用户动态生成的名字,请问如何处理?

标签: python selenium xpath css-selectors webdriverwait


【解决方案1】:

要提取文本test user,您必须为visibility_of_element_located() 诱导WebDriverWait,您可以使用以下任一Locator Strategies

  • 使用CSS_SELECTORget_attribute()

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "span.smb-DropdownItem-text>span"))).get_attribute("innerHTML"))
    
  • 使用XPATHtext属性:

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "span[@class='smb-DropdownItem-text']>span"))).text)
    
  • 注意:您必须添加以下导入:

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

【讨论】:

  • 其实名字是test用户动态生成的,请问怎么处理?
  • @DeepakBhavale 这个答案基于其他元素属性,我已经演示了如何从给定的 HTML 中提取文本 test user
  • 非常感谢。我尝试过使用 CSS_SELECTOR 和 get_attribute() 方法。
  • 你能告诉我我应该如何为同一个元素选择第二个值吗?因为有 4 的层次结构。
  • @DeepakBhavale 你能针对你的新要求提出一个新问题吗?
【解决方案2】:

您可以使用 xpath 找到该元素:

driver.find_element_by_xpath("//span[@class='smb-DropdownItem-text']//span[contains(text(),'test user')]");

【讨论】:

  • 其实是test用户动态生成的名字,请问如何处理?
【解决方案3】:

你可以试试下面的xpath。

//img[contains(@src, '/profile/image/')]]/following-sibling::span

【讨论】:

  • 其实名字是test用户动态生成的,请问怎么处理?
  • 您应该提到这一点。全名将被更改或部分?
  • 您现在可以尝试使用更新的 xpath。它独立于文本
【解决方案4】:

您可以像这样使用 XPath 来删除空格:

driver.find_element_by_xpath('//span/text()[normalize-space()="test user"]')

如果 span 标签中没有空格,请以这种方式使用 XPath:

driver.find_element_by_xpath('//span[contains(text(), "test user")]')

对于动态:

driver.find_element_by_xpath('//span[contains(text(), "' . $HereIsSetYourDynamicallyVaribleName . '")]')

【讨论】:

  • 其实名字是test用户动态生成的,请问怎么处理?
猜你喜欢
  • 2019-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-03
  • 2017-06-19
  • 1970-01-01
  • 2017-08-24
  • 1970-01-01
相关资源
最近更新 更多