python3 selenium 设置元素等待的三种方法

为什么要设置元素等待?
当你的网络慢的时候,打开网页慢,网页都没完全打开,代码已经在执行了,但是没找到你定位的元素,此时python会报错。
当你的浏览器或电脑反应慢,网页没完全打开,代码已经在执行了,但是没找到你定位的元素,此时python也会报错。
由于代码执行很快,而由于各方面的原因导致python代码报错,所以才要设置元素等待。是根据你的网速或电脑的情况而定来设置等待时间,没有一成不变的设置,这个需要注意。

1.sleep 强制等待
代码如下

from selenium import webdriver
from time import sleep
dr = webdriver.Chrome()
sleep(2)        #设置等待2秒钟
dr.get('http://www.baidu.com')

优点:代码简洁,不啰嗦。
缺点:假如你设置sleep等待时间太短,元素没加载出来,程序照样报错。倘若你设置sleep等待时间设置太长,元素可能已经加载出来了,但是由于你设置过长,程序会一直等待你设置的时间过完才执行,这样会影响代码整体的运行效率。

2.implicitly_wait() 隐性等待
代码如下:

from selenium import webdriver
from time import sleep
dr = webdriver.Chrome()
dr.implicitly_wait(20)  #设置等待20秒钟
dr.get('http://www.baidu.com')
dr.find_element_by_id('kw').send_keys('shawn')
dr.find_element_by_id('su').click()

优点:
1.代码简洁。
2.在代码前部分加implicitly_wait() ,整个的程序运行过程中都会有效,都会等待元素加载完成,不需要像sleep一样每次要设置一遍。
3.在设置的时间内没有加载到整个页面,则会报NosuchElementError。如果元素在第20s被加载出来,自动执行下面的脚本,不会一直等待20s。

缺点:非要加载到整个页面才执行代码,这样影响代码的执行效率。一般情况下,我们想要的结果是只需加载到了我要定位的元素就执行代码,不需要等待整个页面的完全加载出来再执行代码。

3.WebDriverWait() 显示等待

from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait       #WebDriverWait注意大小写
from selenium.webdriver.common.by import By
dr = webdriver.Chrome()
dr.get('http://www.baidu.com')
try:
    element = WebDriverWait(dr,10).until(EC.presence_of_element_located((By.ID,'kw')))
    element.send_keys('123')
    dr.find_element_by_id('su').click()
except Exception as message:
    print('元素定位报错%s'%message)
finally:
    pass

优点:代码执行效率快。无需等待整个页面加载完成,只需加载到你要定位的元素就可以执行代码。是最智能的设置元素等待的方式。

缺点:
1.要导入from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
必须要导入以上3个包,导包路径相当的复杂,啰嗦而且麻烦
2.写等待时间的代码也是复杂。步骤稍微有点多。
element=WebDriverWait(dr,10).until(EC.presence_of_element_located((By.ID,‘kw’)))
element.send_keys(‘123’)

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值