前言:selenium中三种等待方式/三大切换操作指的是什么呢?其实就是三种等待方式、三种切换窗口方式,具体如何使用呢,我们接下来一起看看吧
—— 强制等待
强制等待:强制等待多少秒(单位)
import time
time.sleep(3)
——隐形等待
隐形等待:不做用户感知的等待,等待页面元素加载完成后结束等待
#只能用来等待元素出现
#启动浏览器,只需要设置一次
driver.implicitly_wait(5) #单位秒
——显性等待
#等待的条件:直到页面的标题当中包含“学习Python”
#wait....until....title_contains("学习Python")
#时间超出了,就会报错
——显性等待—等待元素加载
from selenium.webdriver.support.wait import WebDriverWait ---导入显性等待库
from selenium.webdriver.support import expected_conditions ----导入显性条件库
locaror = ['id','kw']##要传的元素
elem = wait.until(expected_conditions.presence_of_all_elements_located(locaror))#加载元素
——显性等待—等待元素可见
from selenium.webdriver.support.wait import WebDriverWait ---导入显性等待库
from selenium.webdriver.support import expected_conditions ----导入显性条件库
locaror = ['id','kw']
elem = wait.until(expected_conditions.visibility_of_all_elements_located(locaror)) #等待元素可见
——显性等待—等待元素可被点击
from selenium.webdriver.support.wait import WebDriverWait ---导入显性等待库
from selenium.webdriver.support import expected_conditions ----导入显性条件库
locaror = ['id','kw']
elem = wait.until(expected_conditions.element_to_be_clickable(locaror)) #等待元素可以被点击
a) 句柄-窗口切换
1.切换窗口需要句柄---句柄相当于窗口的ID
2.打印所有句柄,显示是列表,列表中最后一个ID就是最新打开的窗口
print(drvice.window_handles)3.将窗口的句柄传进去
drvice.switch_to.window(drvice.window_handles[-1]) #这里-1就是取下标,倒数第一个窗口就是最新打开的窗口
——通过句柄-窗口切换示例:
例子:
from selenium import webdriver
import time
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions
drvice = webdriver.Chrome()
drvice.implicitly_wait(10)
drvice.get("http://www.baidu.com")
elem = drvice.find_element("id","kw")
elem.send_keys("浩仔")
elem.submit()
drvice.find_element_by_link_text("京东").click()
time.sleep(5)
#切换窗口
#输入窗口的句柄传进去
print(drvice.window_handles)
drvice.switch_to.window(drvice.window_handles[-1])
time.sleep(5)
print(drvice.title)
——显性等待-窗口切换:
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions
wait.until(expected_conditions.new_window_is_opened(all_handles))#打开新窗口,当获取当前所有窗口句柄
——显性等待-窗口切换示例:
例子:
all_handles = drvice.window_handles#获取当前所有窗口句柄,这个代码一定要先放到新窗口打开前
drvice.find_element_by_link_text("京东").click()
#显性的等待,等待新窗口出现
wait = WebDriverWait(drvice,2)#初始化等待器,等待2S
wait.until(expected_conditions.new_window_is_opened(all_handles))#打开新窗口,当获取当前所有窗口句柄
b) iframe内嵌网页切换
——进入(切换)iframe:
进入iframe,需要的三种标识:
提供iframe的标识:1.index 2.name 3.Webelement
driver.switch_to.frame("iframeResult")#通过name去查找
iframe在网页中标识:
——进入iframe后退出:
#退回主界面
driver.switch_to.default_content() --如果一直不退出 就一直在iframe页面里面了
#退回父级iframe——如果有多层iframe可以使用此方法
driver.switch_to.parent_frame()
——iframe切换:显性等待
WebDriverWait(drvice,5).until(expected_conditions.frame_to_be_available_and_sitch_to_it(iframe))
b) 切换至alert:弹窗
my_al = driver.switch_to.alert #切换到alert,点击确定,没有括号,也没有传参数,全局只有一个
my_al.accept()#点击确定
my_al.dismiss()#点击取消
——alert切换:显性等待
WebDriverWait(drvice,5).until(expected_conditions.alert_is_present)