有没有一种方法可以构造一个 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 你一个布尔值 True
或 False
.
你在这里可以做的是使用 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')
我目前正在尝试边做边学 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 你一个布尔值 True
或 False
.
你在这里可以做的是使用 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')