webdriver--设置元素等待
- sleep():脚本执行到某一位置时“睡一会”,再继续执行;参数的单位是s;sleep方法由python的time模块提供,有两种引入和使用方式
import time time.sleep(5) from time import sleep sleep(5)
在未了解隐式等待这些方式时,sleep方法是我一直用的,有时想看看页面执行到某个位置时的数据显示,或页面跳转后定位新页面的元素等情况,页面执行太快看不到或者定位不到元素,都是通过“睡一会”的方式再继续进行
- implicitly_wait():隐式等待,通过一定的时长等待页面上某元素加载完成,若超出时长还未加载出来则抛出NoSuchElementException异常
- 设置的时间并不是一个固定的等待时间,不影响脚本执行速度;
- 当脚本执行到某个元素定位时,如果可以定位继续执行;
- 定位不到时以轮询方式不断判断元素是否定位到,只要时间内定位到就继续执行,不必再等待剩余时长
- 在超时后,抛出异常
1 driver.get("http://www.zgckxt.com/THome/PC_SelfLearn/Index?id=1056&type=1") 2 driver.find_element_by_xpath(".//*[@id='form1']/div/div/div[3]/div/div[1]/div[2]/div[1]/div[2]/a[1]/i").click() 3 print(driver.current_url) 4 5 #time.sleep(3) 6 driver.implicitly_wait(3) 7 try: 8 print(driver.find_element_by_css_selector("div.m-battit").text) 9 except NoSuchElementException as e: 10 print(e) 11 12 print(driver.current_url)
- 显式等待,有些复杂用起来,暂不做研究
目前用起来sleep比较顺手,简单方便;隐式等待看起来处理机制更完美,更健全,也更灵活。在以后的尝试过程中两者灵活使用吧