2

我目前正在玩 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 语句,但我希望这能理解我想要实现的目标。

4

2 回答 2

1

find_element如果方法找不到与传递的定位器匹配的元素,Selenium 将抛出异常。
它不会返回布尔值TrueFalse.
你可以在这里做的是使用find_elements_by_xpath而不是find_element_by_xpath因为find_elements_by_xpath将返回你找到的匹配列表。因此,如果有匹配项,您将得到一个由 Python 解释为 Boolean 的非空列表,True而在未找到匹配项的情况下,它将返回一个由 Python 解释为 Boolean 的空列表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')
于 2022-01-21T10:16:22.450 回答
0

您可以使用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')
于 2022-01-21T10:10:59.340 回答