【问题标题】:Finding text in element with selenium python使用 selenium python 在元素中查找文本
【发布时间】:2021-07-13 09:23:11
【问题描述】:

我想说明此文字“等待审核”是否属实。我如何找到这个元素?所有的父元素我都在努力获得它。如果有人能详细说明它是如何工作的,那就太棒了。

【问题讨论】:

  • 你能分享一个网页链接吗? I am wanting to state whether this text 'Awaiting Review' is true or not 是什么意思?您是否要查找页面上是否存在带有文本“等待审核”的元素,或者其内部的特定元素是否是具有此文本的父元素?

标签: python selenium webdriver


【解决方案1】:

由于您在 DevTools 中,您可以右键单击并选择“复制 XPath”。这将为您提供一个特定且唯一的元素选择器,因此您无需担心从根开始计算父 div!学习 XPaths 是一个很棒的工具,请看这里:https://www.w3schools.com/xml/xpath_syntax.asp

然后在你的 Selenium 代码中你可以写:

awaiting_review = driver.find_element_by_xpath('# paste xpath here').text

if awaiting_review == 'Awaiting Review':
   # whatever you want to happen

【讨论】:

  • 如果xpath没有找到该元素,会抛出NoSuchElement异常
【解决方案2】:

要简单地验证页面上是否存在包含该文本的元素,您可以这样做:

if driver.find_elements(By.XPATH, "//span[contains(text(), 'Awaiting Review')]"):
    print("Element is presented")
else:
    print("Eelement not found")

driver.find_elements 返回与传递的定位符匹配的元素列表。
因此,如果页面上有一个包含Awaiting Review 文本的span 元素,它将返回它。否则它将返回一个空列表。
Python 将非空列表视为True,而空列表为False

【讨论】:

  • [if self.driver.find_elements_by_xpath] 和 [if driver.find_elements(By.XPATH] 有区别吗?
  • @AndrewReiblein 你问的是self 之前的(By.XPATH) 还是driver.find_elements 之后的(By.XPATH)
  • 不,只有 (by_xpath) 和 (By.XPATH)。谢谢
  • 克鲁斯潘迪说不。我通常使用driver.find_elements_by_xpath :)
【解决方案3】:

请试试这个。

elems = driver.find_elements_by_css_selector("#vacancy-pipeline-header>header>div>span")
if elems:
   if elems[0].text == "Awaiting Review":
     print('valid!')
   else 
     print('invalid!')
else
  print('Element is not exist!')

如果你熟悉 CSS 选择器,那对你有好处。

【讨论】:

    【解决方案4】:

    解释 :- 使用//span[contains(text(), 'Awaiting Review')] 可以定位元素并可以使用find_elements 检查size if > 0 是否存在,如果是,则可以断言,(我只是使用打印) 如果不是,代码将转到 else 部分。

    你可以试试下面的代码

    try:
       if len(driver.find_elements(By.XPATH, "//span[contains(text(), 'Awaiting Review')]")) > 0 :
           print("Awaiting Review is present")
       else:
            print("Awaiting Review is not present")
    except:
        print("something went wrong. ")
        pass
    

    更新 1:

    try:
       if len(driver.find_elements(By.CSS_SELECTOR, "div#air-pipeline-board heade.air-pipeline-lane span")) > 0 :
           print("Awaiting Review is present")
       else:
            print("Awaiting Review is not present")
    except:
        print("something went wrong. ")
        pass
    

    【讨论】:

    • 我试过这个,但它说'等待审查不存在',所以它没有找到正确的元素。 @cruisepandey
    • 表示在 UI 上找不到它,你确定它存在于 UI 中吗?
    • 是的,它确实存在。
    • 好的,页面 URL 是公开的吗?可以分享一下吗?
    • 我什至用不同的定位器给出了解决方案,你能试试更新的 1 代码吗?
    猜你喜欢
    • 2012-08-14
    • 2022-01-27
    • 2012-08-14
    • 2019-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多