前言
在定位元素的时候,经常会遇到各种异常,为什么会发生这些异常,遇到异常又该如何处理呢?
本篇通过学习selenium的exceptions模块,了解异常发生的原因。
一、发生异常
1.打开百度首页,F12查看“百度一下”的属性
<input type="submit" value="百度一下" id="su" class="btn self-btn bg s_btn">
2.为了故意让它定位失败,我在元素属性后加上xx
3.执行代码,报错。程序在查找元素的这行发生了中断,不会继续执行click事件了
参考代码:
# coding:utf-8 from selenium import webdriver driver=webdriver.Chrome() driver.get("https://www.baidu.com") driver.find_element_by_id("suxx").click()
运行结果:
Traceback (most recent call last): File "E:/study/selenium_study/a825.py", line 5, in <module> driver.find_element_by_id("suxx").click() File "D:Program Filespython37libsite-packagesseleniumwebdriver emotewebdriver.py", line 360, in find_element_by_id return self.find_element(by=By.ID, value=id_) File "D:Program Filespython37libsite-packagesseleniumwebdriver emotewebdriver.py", line 978, in find_element 'value': value})['value'] File "D:Program Filespython37libsite-packagesseleniumwebdriver emotewebdriver.py", line 321, in execute self.error_handler.check_response(response) File "D:Program Filespython37libsite-packagesseleniumwebdriver emoteerrorhandler.py", line 242, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id="suxx"]"} (Session info: chrome=84.0.4147.135)
二、捕获异常
1.为了让程序继续执行,我们可以用try...except...捕获异常。捕获异常后可以打印出异常原因,以便于分析异常原因。
2.从运行结果看出,发生异常原因是:NoSuchElementException
3.从selenium.common.exceptions 导入 NoSuchElementException类
# coding:utf-8 from selenium import webdriver from selenium.common.exceptions import NoSuchElementException driver=webdriver.Chrome() driver.get("https://www.baidu.com") try: s=driver.find_element_by_id("suxx") except NoSuchElementException as msgs: print("查找元素异常:{}".format(msgs)) else: s.click()
运行结果:
查找元素异常:Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id="suxx"]"} (Session info: chrome=84.0.4147.135)
三、selenium常见异常
1.NoSuchElementException:没有找到元素
2.NoSuchFrameException:没有找到iframe
3.NoSuchWindowException:没找到窗口句柄handle
4.NoSuchAttributeException:属性错误
5.NoAlertPresentException:没找到alert弹出框
6.ElementNotVisibleException:元素不可见
7.ElementNotSelectableException:元素没有被选中
8.TimeoutException:查找元素超时
四、可以不导入异常类,直接写Exception
# coding:utf-8 from selenium import webdriver from selenium.common.exceptions import NoSuchElementException driver=webdriver.Chrome() driver.get("https://www.baidu.com") try: s=driver.find_element_by_id("suxx") except Exception as msgs: print("查找元素异常:{}".format(msgs)) else: s.click()
运行结果:
查找元素异常:Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id="suxx"]"} (Session info: chrome=85.0.4183.83)