python三种等待方式_Python-WEB自动化-三种等待方式

当有元素定位不到时,比如下拉框,弹出框等各种定位不到时;

一般是两种问题:1 、有frame ;2、没有加等待

下面学习三种等待方式:

1.强制等待 sleep(xx)

这种方法简单粗暴,不管浏览器是否加载完,程序都要等待规定的xx时间,时间到了才继续执行下面的代码。

不建议总是用这种等待方式,会严重影响程序的执行速度。

1

2

3

4

5

6

7

8

# -*- coding:utf-8 -*-

from seleniumimport webdriver

from timeimport sleep

driver= webdriver.Chrome()

driver.get('https://www.baidu.com/')

sleep(3)#强制性等待3s再执行以下代码

print(driver.current_url)

driver.quit()#退出驱动,关闭所有窗口

2.隐性等待 implicitly_wait(xx)

这种方法是设置一个最长的等待时间,如果在规定时间内网页全部元素加载完成,则执行下一步,否则一直等待时间截止才执行下一步。比强制性等待智能些

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

1

2

3

4

5

6

7

# -*- coding:utf-8 -*-

from seleniumimport webdriver

driver= webdriver.Chrome()

driver.get('https://www.baidu.com/')

driver.implicitly_wait(30)#隐性等待,最长30s

print(driver.current_url)

driver.quit()

3.显性等待 WebDriverWait

WebDriverWait配合该类的until()和until_not()方法,根据条件灵活的等待

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

A. 使用前,先引用相关库

B. 确定元素的定位表达式

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

WebDriverWait(driver,10,1).until(EC.visibility_of_element_located((By.ID,ele_locator)))

WebDriverWait(driver,10,1).until(EC.visibility_of_element_located((By.XPATH,ele_locator)))

D. 调用WebDriverWait类设置等待总时长、轮询周期

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

# -*- coding:utf-8 -*-

#A. 使用前,先引用相关库

from seleniumimport webdriver

from selenium.webdriver.support.waitimport WebDriverWait

from selenium.webdriver.supportimport expected_conditions as EC

from selenium.webdriver.common.byimport By

driver= webdriver.Chrome()#打开Chrome浏览器

driver.get('https://www.baidu.com/')#打开百度

driver.find_element_by_xpath('//div[@id="u1"]//a[@name="tj_login"]').click()#点击【登录】;click() 方法,可模拟在按钮上的一次鼠标单击。

# B. 确定元素的定位表达式

ele_locator= "TANGRAM__PSP_10__footerULoginBtn"#通过id,确定‘用户名登录’元素

# C. 使用expected_conditions对应的方法来生成判断条件

# EC.方法名(定位方式,定位表达式)

# EC.visibility_of_element_located(By.ID,ele_locator)#元素可见

# D. 调用WebDriverWait类设置等待总时长、轮询周期

# WebDriverWait(driver, 超时时长, 调用频率(默认0.5s)).until(可执行方法, 超时时返回的信息)

# 等待10秒钟,每隔1秒去查看对应的元素是否可见;如果可见,继续下一步操作;如果不可见,则继续等待,直到10s结束,如果元素还是不可见,则抛出超时异常

WebDriverWait(driver,10,1).until(EC.visibility_of_element_located((By.ID,ele_locator)))

1

2

3

driver.find_element_by_id('TANGRAM__PSP_10__footerULoginBtn').click()#点击【用户名登录】

driver.close()#关闭当前窗口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值