Python+Selenium学习--设置等待时间
Posted 豌豆之家
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python+Selenium学习--设置等待时间相关的知识,希望对你有一定的参考价值。
场景
sleep():设置固定休眠时间。python 的time 包提供了休眠方法sleep() ,导入time 包后就可以使用sleep()进行脚本的执行过程进行休眠。
implicitly_wait():是webdirver 提供的一个超时等待。隐的等待一个元素被发现,或一个命令完成。如果超出了设置时间的则抛出异常。
WebDriverWait():同样也是webdirver 提供的方法。在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到则抛出异常。
代码
#!/usr/bin/env python # -*- codinfg:utf-8 -*- ‘‘‘ @author: Jeff LEE @file: 等待时间.py @time: 2018-09-21 15:55 @desc: ‘‘‘ from selenium import webdriver #导入WebDriverWait from selenium.webdriver.support.ui import WebDriverWait import time driver = webdriver.Firefox() driver.get(‘https://www.baidu.com/‘) #WebDriverWait方法 element=WebDriverWait(driver,10).until(lambda driver:driver.find_element_by_id("kw")) element.send_keys("uniquefu") #添加智能等待 driver.implicitly_wait(10) driver.find_element_by_id("su").click() #添加固定等待时间 time.sleep(10) driver.quit()
优缺点
sleep():强制等待,不管你浏览器是否加载完了,程序都得等待3秒,3秒一到,继续执行下面的代码,作为调试很有用,有时候也可以在代码里这样等待,不过不建议总用这种等待方式,太死板,严重影响程序执行速度
implicitly_wait():隐形等待,比sleep()更加智能,隐形等待是设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间截止,然后执行下一步。注意这里有一个弊端,那就是程序会一直等待整个页面加载完成,也就是一般情况下你看到浏览器标签栏那个小圈不再转,才会执行下一步,但有时候页面想要的元素早就在加载完成了,但是因为个别js之类的东西特别慢,我仍得等到页面全部完成才能执行下一步
WebDriverWait():显示等待,配合该类的until()和until_not()方法,就能够根据判断条件而进行灵活地等待了。它主要的意思就是:程序每隔xx秒看一眼,如果条件成立了,则执行下一步,否则继续等待,直到超过设置的最长时间,然后抛出TimeoutException
备注:
WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
driver - WebDriver 的驱动程序(Ie, Firefox, Chrome 或远程)
timeout - 最长超时时间,默认以秒为单位
poll_frequency - 休眠时间的间隔(步长)时间,默认为0.5 秒
ignored_exceptions - 超时后的异常信息,默认情况下抛NoSuchElementException 异常
以上是关于Python+Selenium学习--设置等待时间的主要内容,如果未能解决你的问题,请参考以下文章
Python+Selenium自动化篇-8-设置等待三种等待方法