web页面三种等待时间操作

问题:在写web自动化时,为什么需要加上等待时间呢?

答:做web自动化实际上就是定位页面上的元素,然后对它进行操作。当电脑系统卡或者网络延迟等外在因素影响时,页面还没有出现定位的元素,代码就运行下一个步骤,导致没有定位到该元素,代码就报错。加上等待时间,就可以解决这个问题。

1、强制等待:time.sleep()

这个方法简单粗暴,意思是:无论发生什么事,都会在10s后再去执行后续的代码,在编写脚本时,不建议经常性的使用,会减低代码的运行速度,影响整体效率。

import time
from selenium import webdriver

driver = webdriver.Chrome()
driver.maximize_window()
driver.get('https://www.csdn.net/')
driver.find_element_by_xpath("//a[text()='登录/注册']").click()
driver.find_element_by_xpath("//a[text()='账号登录']").click()
ele = driver.find_element_by_xpath("//input[@id='all']")
time.sleep(3)  #强制等待3s,再执行输入的代码
ele.send_keys('88888888')

2、隐形等待:implicitly_wait()

设置一个最长等待时间,如果在规定时间内网页全部元素加载完成,则执行下一步,否则一直等待时间截止才执行下一步。这个方法比sleep智能,能够自主判断。

隐性等待对整个driver的周期都起作用,所以只要设置一次即可,全局都可使用

from selenium import webdriver

driver = webdriver.Chrome()
driver.maximize_window()
driver.get('https://www.csdn.net/')
driver.find_element_by_xpath("//a[text()='登录/注册']").click()
driver.find_element_by_xpath("//a[text()='账号登录']").click()
ele = driver.find_element_by_xpath("//input[@id='all']")
driver.implicitly_wait(30)  #隐性等待,最长等待时间30s
ele.send_keys('88888888')

在这里插入图片描述
从上面源码截图看出,隐性等待注释:等待一个元素被发现(假如:1、元素被发现了,但是不能点击;2、元素被发现了,但是暂时不能用;这种场景怎么办呢?–接下来就可以用:显性等待)

3、显示等待

显性等待的作用是:程序每隔n秒看一眼,如果条件成立了,则执行下一步,否则继续等待,直到超过设置的最长时间,然后抛出TimeoutException

需要用到WebDriverWait类和expected_conditions模块,具体使用步骤如下:

①使用之前,导入相关的库

from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

②确定元素的定位表达式

login_xpath = “//input[@id=‘all’]”

③使用expected_conditions 对应的方法来生成判断条件

EC.方式名(定位方式,定位表达式)
例:EC.visibility_of_element_located((By.XPATH, login_xpath)) #判断某个元素是否可见

expected_conditions模块中还有很多其他的条件类,如需要,请自行百度!!!

④调用WebDriverWait类设置等待总时长、轮询的时间

WebDriverWait.(webdriver对象名,等待总时长,轮询周期).until(判断条件)

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.maximize_window()
driver.get('https://www.csdn.net/')
driver.find_element_by_xpath("//a[text()='登录/注册']").click()
driver.find_element_by_xpath("//a[text()='账号登录']").click()
login_xpath = "//input[@id='all']"

WebDriverWait(driver, 10, 1).until(EC.visibility_of_element_located((By.XPATH, login_xpath)))    #这里有个坑,3层元组

driver.find_element_by_xpath(login_xpath).send_keys('123456789')
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值