我尝试创建脚本以自动化订单输入。我在与客户搜索结果斗争中挣扎。我写了以下if语句:
# checks if there are any search results
if browser.find_element_by_css_selector("a[class='nclk']"):
# creates variable with all search results
searchCount = browser.find_elements_by_xpath("//a[@class='nclk']")
# counts search results
searchCountCheck = len(searchCount)
...
它会查找"a[class='nclk']"
,因为如果有任何搜索结果,则此对象存在。问题是,当没有时,它会停止脚本并显示错误消息...unable to locate element...
- 它没有转到else语句,我不知道如何对它进行排序。
我知道它可以由try:
完成,但问题是这两个语句中嵌套了很多语句,所以它最终会变得非常混乱。
我认为处理这个问题的最好方法是创建一个try语句来检查这个对象是否存在并且它创建变量(哪个值取决于对象的存在) - 但我不知道如何编写它以及如何将变量传递给以下if-else语句。
答案 0 :(得分:1)
您可以使用:
# if result is 0, then there is no element matching.
driver.find_elements_by_css_selector('#element')
在这种情况下,您不必添加try
,因为如果没有元素,则列表的长度为0,不会抛出任何错误。在你的情况下,它将是这样的:
if (browser.find_elements_by_css_selector("a[class='nclk']")):
searchCount = browser.find_elements_by_xpath("//a[@class='nclk']")
searchCountCheck = len(searchCount)
答案 1 :(得分:1)
我忘了find_elements_by_xpath()
返回一个空列表或非空列表,但这个解决方案对各种find_element_by_*
函数都有好处。
您可以使用try-except-else语句。例如,
try:
searchCount = browser.find_element_by_xpath("//a[class='nclk']")
searchCountCheck = len(searchCount)
except NoSuchElementException:
print("No element found. Breaking...")
except:
print("Generic error message.")
else:
# Do stuff with searchCount / searchCountCheck / etc.
仅在else
部分未引发任何错误时才输入try
部分。
答案 2 :(得分:0)
你可以在异常后将searchCountCheck设置为0.
try:
browser.find_element_by_css_selector("a[class='nclk']")
searchCount = browser.find_elements_by_xpath("//a[@class='nclk']")
searchCountCheck = len(searchCount)
flag = 1
except NoSuchElementException:
searchCountCheck = 0
flag = 0
find_element_by_css_selector(css_selector)通过css查找元素 选择器。
Args:css_selector - CSS选择器字符串,例如:'a.nav #home'返回:
WebElement - 如果找到的元素引发:
NoSuchElementException - 如果找不到元素用法:element = driver.find_element_by_css_selector(“#富”)