为什么要设置元素等待?

当你的网络慢的时候,打开网页慢,网页都没完全打开,代码已经在执行了,但是没找到你定位的元素,此时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’)

收藏关注+点赞~~养成好习惯

python selenium 等待页面加载完毕_python3 selenium 设置元素等待的三种方法相关推荐

  1. loading页面加载(等待页面加载完毕再隐藏loading页面)

    1.设计一个装载Loading页面的div 此处设置的height为100vh,vh单位表示浏览器的可视高度百分比,100vh表示浏览器高度的100%,如果是全屏Loading,则该div需要排在bo ...

  2. python selenium 点击加载更多_如何等待页面加载,然后按selenium中的“加载更多”按钮?...

    你可能会在页面底部看到谷歌广告.在from selenium import webdriver from selenium.webdriver.common.by import By from sel ...

  3. uni 页面加载完毕_uniapp小程序如何等待数据回来才加载页面?

    在app.vue中onLaunch请求, 但是要等待数据回来才加载页面, 这个如何控制, 比如: vue 可以在上级路由加v-if 请求完成判断, 但是uni-app 这种如何控制呢? vue 代码如 ...

  4. python selenium 等待页面加载完毕_Selenium_等待页面加载完毕

    隐式等待 WebDriver driver = newFirefoxDriver(); driver.get("www.baidu.com"); driver.manage().t ...

  5. Selenium_等待页面加载完毕

    隐式等待 WebDriver driver = new FirefoxDriver();driver.get("www.baidu.com"); driver.manage().t ...

  6. jQuery的页面加载完毕事件?

    很多时候我们需要获取元素,但是必须等到该元素被加载完成后才能获取.我们可以把js代码放到该元素的后面,但是这样就会造成js在我们的body中存在不好管理.所有页面加载完毕后所有的元素当然已经加载完毕. ...

  7. python selenium 等待页面加载_python selenium 三种等待方式详解(实战常用)

    引言: 当你觉得你的定位没有问题,但是却直接报了元素不可见,那你就可以考虑是不是因为程序运行太快或者页面加载太慢造成了元素不可见,那就必须要加等待了,等待元素可见再继续运行程序: 注:当使用该放发的时 ...

  8. python如何校验页面元素是否加载完毕_爬虫(八十七)等待页面加载完成(Waits)...

    现在的大多数的Web应用程序是使用Ajax技术.当一个页面被加载到浏览器时, 该页面内的元素可以在不同的时间点被加载.这使得定位元素变得困难, 如果元素不再页面之中,会抛出 ElementNotVis ...

  9. python3读取网页_python3+selenium获取页面加载的所有静态资源文件链接操作

    软件版本: python 3.7.2 selenium 3.141.0 pycharm 2018.3.5 具体实现流程如下,废话不多说,直接上代码: from selenium import webd ...

  10. java selenium (十三) 智能等待页面加载完成

    我们经常会碰到用selenium操作页面上某个元素的时候, 需要等待页面加载完成后, 才能操作.  否则页面上的元素不存在,会抛出异常. 或者碰到AJAX异步加载,我们需要等待元素加载完成后, 才能操 ...

最新文章

  1. 世界杯十六强合影壁纸
  2. 一定要牢牢掌握的技术!Spark+Flink+推荐系统+数据挖掘等
  3. LoadRunner本机录制http协议程序遇到的问题以及解决方法
  4. 企业中书写css,web前端开发企业级CSS常用命名,书写规范总结(示例代码)
  5. ubuntu中mysql怎么退出命令_ubuntu的Linux下安装MySQL
  6. linux 定时传送文件,Windows与Linux之间定时文件传输
  7. mysql数据库 set类型_MYSQL数据库数据类型
  8. linux pv信息写在哪里,linux命令PV介绍
  9. StringUtils.hasText()说明
  10. 大数据集群资源监控Zabbix
  11. 关键词查找器,关键词搜索查询挖掘
  12. UVA-12555 - Baby Me(控制精度)
  13. 【Excel】使用宏处理重复操作示例 -- 录制分列操作
  14. iOS登录注册登录界面(UITextField)
  15. 2020-01-04
  16. hexo(sakura)给博客增添侧边栏(回到顶部,跳转评论,深色模式,播放音乐)Valine-1.4.4新版本尝鲜+个性制定(表情包、qq头像、UI样式)
  17. iOS网络编程-MBProgressHUD等待指示器
  18. libco源码解析(2) 创建协程,co_create
  19. 华为Java编码规范
  20. Deep Reinforcement Learning with Knowledge Transfer for Online Rides Order Dispatching

热门文章

  1. PHP的压力测试工具ab.exe 和mpm介绍提高并发数
  2. protobuf生成java类
  3. 自己试着在阿里云布了个服务器
  4. Python全栈之路系列之列表数据类型
  5. Android之AppWidget
  6. 基础才是重中之重~对象的生与死
  7. django mysql 读写分离
  8. Nginx的Upstream负载均衡模块
  9. .net开源CMS系统使用教程之:如何用We7 CMS建设全新网站
  10. Java跨语言调用实现方案