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

窗口

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()这个函数用来检查弹窗是否出现,可以用显示等待来实现,不能用隐式等待实现,因为弹窗不是页面的元素

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

相关推荐
WA内核拾荒者7 小时前
WhatsApp 消息发送失败的重试策略与幂等性保证
自动化
·薯条大王8 小时前
经济实惠玩云服务器|一台云服务器多人共用,子账号配置教程
java·linux·运维·服务器·汇编·c++·python
小小、码农11 小时前
Linux进程控制:从fork到exec,手写一个简易Shell
linux·运维·服务器
不会就选b12 小时前
Linux之进程间通信(二)---模拟进程池
linux·运维·服务器
烟雨江南78513 小时前
2026汽车制造与新能源整车柔性产线Agentic-Workflow白皮书:跨APS_MES_ERP多智能体动态排产与装配容错实战
大数据·网络·人工智能·自动化·ai客服·企业agent
沫璃染墨14 小时前
《从零入门Linux系统篇(十五):系统工具篇·六——GDB调试器详解:从程序执行控制到高级调试技巧》
linux·运维·服务器·c语言·c++
AIgorithmGEEK14 小时前
Linux 环境变量完全指南:从入门到理解底层原理
linux·运维·服务器
修罗王14 小时前
Linux Docker 服务管理与排查实战指南(新手速查版)
运维·docker
迪康Defender15 小时前
从静态存储到动态流转:终端透明加密两种模式实战解析
运维·服务器·网络·数据库·其他
明达智控技术15 小时前
国产PLC、远程IO模块在食品包装机的应用
分布式·自动化