selenium-三种等待方式

发布于:2022-12-09 ⋅ 阅读:(696) ⋅ 点赞:(0)

当我们打开一个页面的时候,页面先进行加载,再进行渲染。

页面先加载,再渲染
渲染就是让页面按照规范好的格式显示出来。
加载资源:图片资源、数据资源、字体....加载的东西:资源(css、png、class、html)
加载这个动作是将服务器的资源下载到浏览器中,然后提供给浏览器进行渲染。
加载时间影响因素:网速、硬件设备、性能、资源的大小。

渲染:将下载好的资源很好的显示出来。

页面未加载出来就执行元素定位语句的话,会失败,所以要加等待。
1.强制等待:进程休眠.通过进程休眠,从而限制整个脚本等待下一个语句的执行,整个等待过程中,不关注浏览器的加载状态。
实现方式:time.sleep(3)  #强制等待,要求获整个进程要3秒的等待
2.隐性(隐式)等待:等待页面不处于加载状态,不会保障整个页面所有的资源一定要加载成功
实现方式:driver.implicitly_wait(3)
隐性等待,只要使用一次,后面也存在这个属性。单位为秒,是一个数字类
为什么叫隐性等待?
#本质上上是对浏览器本身得操作,设定了浏览器在实例化对象得某个参数;加载资源等待的时间
#当浏览器不在加载状态的时候,直接执行下一个步骤。
3.显示(显性)等待:页面渲染的时候,可能要定位的元素还没有渲染成功。

 

from selenium import webdriver

from selenium.webdriver.support.wait import WebDriverWait  #导包
from selenium.webdriver.support import expected_conditions #导包

#from selenium.webdriver.support import expected_conditions as EC #别称

driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
"""
WebDriverWait的各个函数的解释:
driver:浏览器的实例对象
timeout:寻找的超时时间
poll_frequency:频率,每过多少秒找一次
ignored_exceptions:异常捕捉,捕捉的异常类型
expected_conditions:是一个文件,里面包含了很多对于能够对预测情况的判断
"""

#一个元素存在,在html中但是未显示出来  公约:页面元素如果不显示在页面中,就无法进行操作  send_keys,click
#一个元素存在,并且在html中显示出来

#显性等待:等待元素达成某种要求
#为什么叫显性等待 基本上我们等待元素,都是等待元素显示在页面中
#隐性等待,在创建driver时,设置一次,后面就隐形的都具备这个属性
#但是显性等待使用的时候,每次都要创建一次。

"""
隐形等待控制的是加载的时间
显性等待和加载没有关系,和渲染有关系,
"""

#构建使用语句
ele = WebDriverWait(driver,3).until(expected_conditions.presence_of_element_located(locator=(id)))
#显性等待3秒,知道被期待的id元素显示在定位器中
#WebDriverWait driver是浏览器实例对象 ,3是等待的时间,
# locator是元素定位的方式和值的元祖形式/包形式/列表形式

ele.send_keys("手机")
ele_by_name = driver.find_element("name","wd")

实例2:

zhuce = (By.LINK_TEXT,"注册")

#显性等待,直到zhuce元素出来再进行下一步的操作
zhuce_1 = WebDriverWait(driver,3).until(EC.visibility_of_element_located(zhuce))

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到