二、元素等待

1.sleep强制等待

优点:简单
缺点:如果设置seep等待时间过短,元素还没加载出来,程序报错,sleep设置等待时间过长,元素早就加载出来了,程序还在等待,浪费是时间,影响代码整体的运行效率

2.driver.implicitly_wait(10)隐式等待

在一段时间内网页是否加裁完成,如果完成了,就进行下一步;在设置的时间内没有加载完成,则会报超时加载。
隐式等待只需要声明一次,一般在打开浏览器后进行声明。

在设置的时间内没有加载到整个页面,则会报NosuhElementEror(如果有异常可以用try的方式抛出),如果元素在第10s被加 出来,自动执行下面的脚本,不会一直等待

注意:隐性等待的设置为全局性的,在代码前面设置后,整个的程序运行过程 dirver的生命周期)中都会有效,都会等待页面加载完成,再执行后续;不需要每次设置一遍;
问题:非要加载到整个页面才执行代码,这样影响代码的执行效率

import time
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException

driver = webdriver.Chrome()
driver.get('http://www.baidu.com/')
driver.implicitly_wait(0)

try:
    driver.find_element(By.ID,"kw").send_keys("古天乐")
    driver.find_element(By.ID,"su").click()
    driver.find_element(By.PARTIAL_LINK_TEXT,'古天乐的微博').click()

except NoSuchElementException as msg:
    print(msg)
finally:
    print("执行完成")
sleep(5)
driver.quit()

3.显示等待

导入模块

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

expected_conditions模块:收集一系列的场景判断方法

expected_conditions as EC:判断一个元素是否存在

presence_of_element_located:判断元素是否加载到dom树中

显示等待必须在每个需要等待的元素前面进行声明。
是明确的要等到某个元素的出现或者是某个元素的可点击等,等到就可以返回元素对象;在超时时间到达之后仍未等到,那么就抛出TimeoutException.

from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("https://www.sohu.com/")
element = WebDriverWait(driver,10,0.5).until(EC.presence_of_element_located((By.LINK_TEXT,'新能源')),"未找到元素")
element.click()
sleep(3)
driver.quit()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值