有没有一种方法可以构造一个 if 语句,以便它可以识别 python selenium 中是否存在 XPATH?

Is there a way to structure an if statement so that it can identify if an XPATH exists in python selenium?

我目前正在尝试边做边学 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 语句,但我希望这能让我了解我正在努力实现的目标。

您可以使用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')

如果 find_element 方法找不到与传递的定位器匹配的元素,Selenium 将抛出异常。
它不会 return 你一个布尔值 TrueFalse.
你在这里可以做的是使用 find_elements_by_xpath 而不是 find_element_by_xpath 因为 find_elements_by_xpath 会 return 你找到的匹配列表。因此,如果有匹配项,您将得到一个 non-empty 列表,该列表被 Python 解释为布尔值 True,而如果找不到匹配项,它将 return 一个空列表由 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')