案例:
百度输入框输入字符点击后隐形等待的操作
具体代码和注释如下:
1 # #!/usr/bin/python3 2 # -*- coding: utf-8 -*- 3 # @Time : 2020/7/30 15:36 4 # @Author : Gengwu 5 # @FileName: implicitly_wait.py 6 # @Software: PyCharm 7 8 from selenium import webdriver 9 from selenium.common.exceptions import NoSuchElementException #导入一个没有这个元素的类,定位到没有这个元素会抛出一个异常 10 from time import ctime #ctime导入后作为一个时间戳判断一下 11 from time import sleep 12 13 driver=webdriver.Chrome() 14 driver.get('https://www.baidu.com/') 15 driver.maximize_window() 16 17 driver.implicitly_wait(5) #implicitly_wait等待5秒,最多等待5s,超过5秒就会报错 18 19 #检测搜索是否存在 20 #操作思路:先定位到搜索框,输入字符,在点击操作 21 try: 22 print(ctime()) #打印时间 23 driver.find_element_by_css_selector('#kw').send_keys('python') #定位到搜索按钮,搜索按钮元素是KW,定位到输入python字符 24 driver.find_element_by_css_selector('#su').click() #定位到点击click 第一个元素等待5秒,等待5秒以后看第二个元素的约束 25 except NoSuchElementException as mas: #直到所有的执行完成,隐式等待就完成了 26 print(mas) #出现异常就会打印出异常 27 finally: 28 print(ctime()) #最后打印出时间 29 30 sleep(3) 31 driver.quit()
以上代码执行后结果如下:
1 C:UsersEDZDesktopselenium_demovenvScriptspython.exe C:/Users/EDZ/Desktop/selenium_demo/webdriver/implicitly_wait.py 2 Thu Jul 30 16:54:53 2020 3 Thu Jul 30 16:54:53 2020 4 5 Process finished with exit code 0
可以看到一共执行操作不到1s
我们把元素更改为一个找不到,看下报错异常提示。更改代码片段如下:
1 try: 2 print(ctime()) #打印时间 3 driver.find_element_by_css_selector('#kw123').send_keys('python') #定位到搜索按钮,搜索按钮元素是KW,定位到输入python字符 4 driver.find_element_by_css_selector('#su').click() #定位到点击click 第一个元素等待5秒,等待5秒以后看第二个元素的约束 5 except NoSuchElementException as mas: #直到所有的执行完成,隐式等待就完成了 6 print(mas) #出现异常就会打印出异常 7 finally: 8 print(ctime()) #最后打印出时间
执行后的结果如下:
C:UsersEDZDesktopselenium_demovenvScriptspython.exe C:/Users/EDZ/Desktop/selenium_demo/webdriver/implicitly_wait.py Thu Jul 30 17:00:36 2020 Message: no such element: Unable to locate element: {"method":"css selector","selector":"#kw123"} (Session info: chrome=84.0.4147.105) Stacktrace: Backtrace: Ordinal0 [0x01189563+2725219] Ordinal0 [0x01088551+1672529] Ordinal0 [0x00F70359+525145] Ordinal0 [0x00F09755+104277] Ordinal0 [0x00F253C0+218048] Ordinal0 [0x00F1AAD0+174800] Ordinal0 [0x00F23D7C+212348] Ordinal0 [0x00F1A94B+174411] Ordinal0 [0x00F02528+75048] Ordinal0 [0x00F035A0+79264] Ordinal0 [0x00F03539+79161] Ordinal0 [0x0109D607+1758727] GetHandleVerifier [0x012A6546+1050150] GetHandleVerifier [0x012A6291+1049457] GetHandleVerifier [0x012B10D7+1094071] GetHandleVerifier [0x012A6B46+1051686] Ordinal0 [0x01095B06+1727238] Ordinal0 [0x0109EB7B+1764219] Ordinal0 [0x0109ECE3+1764579] Ordinal0 [0x010B4C05+1854469] BaseThreadInitThunk [0x777C6359+25] RtlGetAppContainerNamedObjectPath [0x77B67C24+228] RtlGetAppContainerNamedObjectPath [0x77B67BF4+180] Thu Jul 30 17:00:41 2020
可以看到报错的代码从开始的
Thu Jul 30 17:00:36 2020到
Thu Jul 30 17:00:41 2020一共等待了5秒
5秒找不到就报异常
以上有问题随时讨论!
Best Regards!
Make a little progress every day!