#coding:utf-8 #__author__='wang' #比如一个网页在通过selenium的浏览器打开的时候,由于网络慢等原因导致页面一直处在加载 的过程当中,页面中的一些标签可能没有渲染出来,由于代码的执行速度比较快,当通过代码进行 查找元素时,页面的元素可能不存在。这个时候程序会出现ElementNotExists异常 import time from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait browser = webdriver.Firefox() browser.get('https://www.baidu.com') #time.sleep()让线程休眠一段时间,等休眠时间到了之后,不管元素是否找到,仍然强制往后 执行 #一般这种方式在调试的时候经常用,代码中尽量少用它会影响程序的执行效率 # print "开始休眠" # time.sleep(30) # print '休眠结束' #WebDriverWait该类是用于设置显性等待,经常配合until()和until_not()函数使用, 在页面加载期间,每隔一段时间去查看元素是否已经加载出来,如果没有加载出来,则继续等待, 直到超出最大的等待时间,最后还没有发现该元素,则抛出异常,如果在最大的时间内找到了该 元素则继续往后执行代码 print '开始查找' # a_search = webdriver(browser,30).until(lambda browser:browser. find_element_by_xpath('//input[@id="kw"]')) #在页面中可能标签已将存在了,在浏览器上还没有渲染出来,这种情况下, 通过find_element_by_xxx是可以找到该标签的,但是不能点击 button = browser.find_element_by_id('su') #is_displayed()用于判断一个标签是否在浏览器上显示出来 is_visiable = WebDriverWait(browser,10).until (lambda browser:button.is_displayed()) print is_visiable #让button元素在10秒这个时间内进行循环检测直到返回True,说明浏览器显示该按钮了 button.click() #ElementNotVisiableExction:元素不可见异常 print '查找结束' # print a_search #以Anaconde官网为例 # a_element = browser.find_element_by_xpath ('//a[@data-accordion="#top-search"]') # print a_element # a_element.click() #设置隐性等待时间 #隐性等待和time.sleep()类似,设置一个最长等待时间,如果网页在规定时间内加载完成, 则执行下一步,否者会一直处于等待状态,直到超时,一般一个程序内只调用一次方法即可 browser.implicitly_wait(30) browser.find_element_by_id('kw').send_keys('123') #隐性等待implicitly_wait和显性等待WebDriverWait的区别 #1.implicitly_wait是针对一个页面,一个会话窗口而言,是在等待该页面上所有的元素被 加载完成,而不是针对某一标签元素。等待页面上的各个元素渲染完成之后再进行查找 #2.WebDriverWait是针对某一个元素标签而言,不是在等待整个页面渲染完成,而是在等待 这一个元素是否渲染完成,然后去定位该元素,所以,每一个元素都可以使用它判断是否出现
selenium添加等到时间
最新推荐文章于 2023-11-04 19:44:44 发布