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

窗口

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

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

相关推荐
无人生还别怕7 小时前
如何搭建docker仓库(轻量级)registry
linux·运维·docker·云原生·容器·registry·openanolisos
分布式存储与RustFS8 小时前
Hudi 表想摆脱 HDFS 绑定?用 Spark + Hudi 直接写进 RustFS
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
zhengfei6118 小时前
CVE-2026-98432:Linux 内核 TCP 释放后重用漏洞,CVSS 9.8 但补丁覆盖极不均衡
linux·运维·tcp/ip
逐流人8 小时前
DevOps 入门实战(一):从 CI/CD 概念到 Jenkins 自动构建部署
运维·云原生·云计算·jenkins·devops
xyzzklk9 小时前
变相解决华为Mate 8锁屏后无法建立入站网络连接
linux·运维·服务器·网络·华为·go·安卓
叼烟扛炮11 小时前
Linux 学习笔记(五十九):epoll 的生死抉择——LT 与 ET 模式
linux·运维·服务器·网络·笔记·学习·php
飞飞传输18 小时前
飞驰云联文件交换建设方法论:从单点传输到持续治理
大数据·运维·安全
Ruiery19 小时前
Linux 6.6内核内存管理深度解析(十五):CMA 连续内存分配器
linux·运维·服务器
测试界的小码农19 小时前
【Linux 命令实战(01):认识 Linux 终端,从零掌握第一个命令】
linux·运维·服务器
布裘20 小时前
【银河麒麟】重启后时区丢失?排查发现 localtime 被业务程序替换成硬链接
linux·运维·网络