当我们打开一个页面的时候,页面先进行加载,再进行渲染。
页面先加载,再渲染 渲染就是让页面按照规范好的格式显示出来。 加载资源:图片资源、数据资源、字体....加载的东西:资源(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 后查看