【问题标题】:Is there a way to structure an if statement so that it can identify if an XPATH exists in python selenium?有没有办法构造一个 if 语句,以便它可以识别 python selenium 中是否存在 XPATH?
【发布时间】:2022-01-21 10:07:34
【问题描述】:

我目前正在玩 Selenium,试图通过实践来学习它并遇到了这个问题;网站上偶尔会出现一个带有不同 XPATH 的按钮,所以我想尝试创建一个解决方法。这就是我想要使用的:

if bool(wd.find_element_by_xpath('//*[@id="basketPageApp"]/div/div[2]/div/div/div[1]/div/div[2]/a')) == TRUE:
    button = wd.find_element_by_xpath('//*[@id="basketPageApp"]/div/div[2]/div/div/div[1]/div/div[2]/a')
else:
    button = wd.find_element_by_xpath('//*[@id="guestCheckout"]/div/div/div[2]/section/div[2]/div[1]/div')

我确定我不能以这种方式使用 if 语句,但我希望这能理解我想要实现的目标。

【问题讨论】:

    标签: python selenium-webdriver xpath findelement


    【解决方案1】:

    如果find_element 方法找不到与传递的定位器匹配的元素,Selenium 将抛出异常。
    它不会返回布尔值 TrueFalse
    您可以在这里做的是使用find_elements_by_xpath 而不是find_element_by_xpath,因为find_elements_by_xpath 将返回您找到的匹配项列表。因此,如果有匹配项,您将得到一个由 Python 解释为布尔值 True 的非空列表,而如果找不到匹配项,它将返回一个由 Python 解释为布尔值 False 的空列表。此外,这永远不会引发异常。
    所以你的代码可能是这样的:

    if wd.find_elements_by_xpath('//*[@id="basketPageApp"]/div/div[2]/div/div/div[1]/div/div[2]/a'):
        button = wd.find_element_by_xpath('//*[@id="basketPageApp"]/div/div[2]/div/div/div[1]/div/div[2]/a')
    else:
        button = wd.find_element_by_xpath('//*[@id="guestCheckout"]/div/div/div[2]/section/div[2]/div[1]/div')
    

    【讨论】:

      【解决方案2】:

      您可以使用try and except

      try:
          button = wd.find_element_by_xpath('//*[@id="basketPageApp"]/div/div[2]/div/div/div[1]/div/div[2]/a')
      except:
          button = wd.find_element_by_xpath('//*[@id="guestCheckout"]/div/div/div[2]/section/div[2]/div[1]/div')
      

      【讨论】:

        猜你喜欢
        • 2019-12-23
        • 2021-06-01
        • 2013-05-10
        • 1970-01-01
        • 1970-01-01
        • 2020-06-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多