页面自动化常见函数重点说明

窗口

python 复制代码
import time

from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager

driver =webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
#2.输⼊百度⽹址:https://www.baidu.com
driver.get("https://www.baidu.com")
driver.find_element(By.CSS_SELECTOR,"#s-top-left > a:nth-child(3)").click()
print(driver.title)
driver.quit()

在这个实现里面,我们在百度一下的首页打开了百度地图这个标签,之后我们打印当前页面的title,发现还是"百度一下",并非是百度地图,说明点击后的页面并没有发生转换

就需要我们的今天的操作

1)获取当前⻚⾯句柄:

driver.current_window_handle

3)获取所有⻚⾯句柄:

driver.window_handles

3)切换当前句柄为最新⻚⾯:

cpp 复制代码
curWindow = driver.current_window_handle
allWindows = driver.window_handles
for window in allWindows:
    if window != curWindow:
driver.switch_to.window(window) 
python 复制代码
import time

from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager

driver =webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
#2.输⼊百度⽹址:https://www.baidu.com
driver.get("https://www.baidu.com")
driver.find_element(By.CSS_SELECTOR,"#s-top-left > a:nth-child(3)").click()
curWindow = driver.current_window_handle
allWindows = driver.window_handles
for window in allWindows:
    if window != curWindow:
        driver.switch_to.window(window)
print(driver.title)
driver.quit()

运行结果:

但是这是两个页面,来了三个怎么办,用if语句无法实现,别担心,在实践当中,我们一般都是两个页面

如果有两个窗口,driver.close()后,请问当前处于哪个窗口:句柄处于关闭的这个窗口,要使用另一个窗口,需要切换

弹窗

弹窗是在⻚⾯是找不到任何元素的,这种情况怎么处理?使⽤selenium提供的Alert接⼝

cpp 复制代码
alert = driver.switchTo.alert
//确认
alert.accept()
//取消
alert.dismiss()

提⽰弹窗

需要输入文本信息的弹窗输入信息的时候是看不见信息的

cpp 复制代码
alert = driver.switchTo.alert
alert.send_keys("hello")
alert.accept()
alert.dismiss()

注意:弹窗出现,页面其他的元素是定位不到的,因此需要切换到弹窗,处理弹窗

等待

通常代码执⾏的速度⽐⻚⾯渲染的速度要快,如果避免因为渲染过慢出现的⾃动化误报的问题呢?可以使⽤selenium中提供的三种等待⽅法:

time.sleep()

优点:使⽤简单,调试的时候⽐较有效

缺点:影响运⾏效率,浪费⼤量的时间

隐式等待

隐式等待是⼀种智能等待,他可以规定在查找元素时,在指定时间内不断查找元素。如果找到则代码

继续执⾏,直到超时没找到元素才会报错。

implicitly_wait()

#隐式等待5秒

driver.implicitly_wait(5)

隐式等待作⽤域是整个脚本的所有元素。即只要driver对象没有被释放掉( driver.quit() ),隐

式等待就⼀直⽣效。

优点:智能等待,作⽤于全局,因此代码只需要写一句即可,不需要像time.sleep()那样,每一句代码后面都需要写

显示等待

显⽰等待也是⼀种智能等待,在指定超时时间范围内只要满⾜操作的条件就会继续执⾏后续代码

WebDriverWait(driver,sec).until(functions)

functions :涉及到selenium.support.ui.ExpectedConditions包下的 ExpectedConditions

比如:

cpp 复制代码
from selenium.webdriver.support import expected_conditions as EC
wait = WebDriverWait(driver,2)
wait.until(EC.invisibility_of_element((By.XPATH,'//*
[@id="2"]/div/div/div[3]/div[1]/div[1]/div')))

上面的as是起别名的意思,因为前面的expected_conditions太长了,不好写

alert_is_presert()这个函数用来检查弹窗是否出现,可以用显示等待来实现,不能用隐式等待实现,因为弹窗不是页面的元素

注意:显示等待和隐式等待不建议一起使用,因为可能会导致不可预测的等待时间,强制等待可以任意使用

相关推荐
miaowu3573 小时前
AI智能体推动数字化转型:从流程自动化到决策辅助的完整路线图
大数据·人工智能·自动化
敖行客 Allthinker3 小时前
Parallels Ubuntu虚拟机项目如何让手机访问?完整解决方案
linux·运维·ubuntu
元Y亨H5 小时前
生产环境监控与故障应急处理(5-5-5 标准)指南
运维
观山岳五楼6 小时前
Ubuntu 24 怎么使用Ubuntu 20 的镜像源
linux·运维·ubuntu
寒晓星6 小时前
[linux]线程及多线程
linux·运维
慧一居士7 小时前
Linux如何设置固定的静态ip
运维
QYR-分析7 小时前
智能化自动化浪潮下,机器人末端执行器行业赛道发展全景解析
人工智能·机器人·自动化
workflower8 小时前
模型中心主义路径
大数据·人工智能·深度学习·机器学习·自动化·制造
国服第二切图仔8 小时前
13其他工具 - Skill/LSP/Sleep等
linux·运维·里氏替换原则
Urbano8 小时前
卫衣全工序自动化智造科普:替代工位、设备选型与产能升级方案
大数据·人工智能·自动化