处理NoSuchElementException以进行其他操作

时间:2020-10-21 07:34:19

标签: python selenium web-scraping

我正在尝试决定使用ifelse还是tryexception来处理NoSuchElementException。

我尝试在下面使用,但不起作用。出现NoSuchElementException错误,并且程序在那里停止,并且不会继续执行else语句。

if len(driver.find_element(By.XPATH, "//*[@id='order.list_order_list_order_list[1].ref_doc_no']/span"))>0:
    driver.find_element(By.XPATH, "//*[@id='order.list_order_list_order_list[1].ref_doc_no']/span").click()
    driver.implicitly_wait(10)
    driver.find_element(By.XPATH, "//td[7]/a/span").click()
    
else:
    driver.find_element(By.XPATH, "//*[@id='breadcrumb_susBreadCrumb']/a[2]/span").click()
    enter_po_search("3020331278")

我在下面使用过,并且可以使用。

try:
    driver.find_element(By.XPATH, "//*[@id='order.list_order_list_order_list[1].ref_doc_no']/span").click()
    driver.implicitly_wait(10)
    driver.find_element(By.XPATH, "//td[7]/a/span").click()
    enter_po_search("3020331278")

except NoSuchElementException:
    driver.find_element(By.XPATH, "//*[@id='breadcrumb_susBreadCrumb']/a[2]/span").click()
    enter_po_search("3020331278")

我这样做正确吗?有没有更好的方法对此进行编码?

1 个答案:

答案 0 :(得分:2)

第一个代码段中仍然出现错误的原因是您正在使用find_element的{​​{1}}读入

因此替换

find_elements

进入

if len(driver.find_element(By.XPATH, "//*[@id='order.list_order_list_order_list[1].ref_doc_no']/span"))>0:

将起作用。

对于Python的编码风格,在逻辑流程中使用if len(driver.find_elements(By.XPATH, "//*[@id='order.list_order_list_order_list[1].ref_doc_no']/span"))>0: 非常普遍并且可以接受,更多关于here的内容。因此,使用try-except或使用if-else都是可以的。