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

窗口

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

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

相关推荐
Doro再努力2 小时前
【Linux操作系统16】Linux进程管理深度解析:从fork到内核链表设计
linux·运维·链表
iambooo2 小时前
基于日志的故障定位与自动化分析体系
运维·自动化
杨云龙UP2 小时前
Oracle ASM归档日志自动清理:RMAN+crontab一键闭环(生产可用)
linux·运维·服务器·数据库·oracle·centos·ux
love530love2 小时前
解决微软登录错误 0xCAA82EE2 & 身份验证故障排查指南
运维·人工智能·microsoft·onedrive·microsoft 365·teams·microsoftonline
AC赳赳老秦2 小时前
2026云原生AI规模化趋势预测:DeepSeek在K8s集群中的部署与运维实战
运维·人工智能·云原生·架构·kubernetes·prometheus·deepseek
_OP_CHEN4 小时前
【Linux系统编程】(三十九)吃透线程概念:从底层原理到实战应用
linux·运维·操作系统·线程·进程·多线程·c/c++
Codefengfeng4 小时前
linux系统安装软件教程
linux·运维·服务器
袁袁袁袁满10 小时前
Linux云服务器如何判断系统是否发生过异常断电?
linux·运维·服务器
一只鹿鹿鹿10 小时前
智慧水利一体化建设方案
大数据·运维·开发语言·数据库·物联网