selenium使用教程从入门到精通:页面等待机制+弹窗处理+无头模式实战技巧

admin 综合编程开发技术 3


跑 Selenium 脚本的时候,是不是常遇到这种情况?明明元素定位是对的,脚本却报错 “找不到元素”;好不容易点了个按钮,突然弹出个窗口,脚本直接卡住不动;想多跑几次测试,浏览器一个个打开,电脑卡得不行?这些问题其实都有对应的解决办法!今天兔子哥就带大家深入学习 Selenium 的三个核心技巧:页面等待机制、弹窗处理和无头模式,全是实战干货,学会了能让你的脚本稳定性翻倍,效率也提上去。

一、页面等待机制:解决 “元素找不到” 的关键


写脚本最烦的就是 “元素未找到” 报错,明明在浏览器里能看到元素,脚本就是找不到 —— 这大概率是没做好页面等待。

为什么需要页面等待?


网页加载是需要时间的,特别是带图片、动态数据的页面,元素不是一下子就出来的。如果脚本跑得比页面加载快,元素还没出现就去定位,自然会报错。就像你去朋友家串门,人还没到你就敲门,当然没人应啦。

三种等待方式对比(新手必看)


等待方式用法难度适用场景优点缺点
强制等待★☆☆☆☆调试脚本简单,直接写 time.sleep (秒数)时间固定,多了浪费,少了还报错
隐式等待★★☆☆☆简单页面一次设置全局生效,不用重复写等整个页面加载完,不管目标元素
显式等待★★★☆☆复杂动态页面只等目标元素,灵活高效代码稍多,需要指定等待条件

显式等待怎么用?(重点推荐)


显式等待是最实用的,它会盯着目标元素,等元素出现或满足条件再继续,超时才报错。步骤很简单:
  1. 导入显式等待需要的包:

python
from selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as EC

  1. 设置等待条件和超时时间(比如等登录按钮可点击,最多等 10 秒):

python
# 等待“登录按钮”可点击login_btn = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "loginBtn")))# 找到后再点击login_btn.click()

👉 兔子哥建议:新手写脚本优先用显式等待,虽然代码多一点,但能少掉很多坑。强制等待尽量少用,除非调试时看步骤。


二、弹窗处理:遇到弹窗不慌,三步搞定


网页弹窗简直是脚本 “杀手”,突然弹出来不处理,后面的操作全白费。常见的弹窗有三种,处理方法各不同。

1. 最简单的 alert 弹窗(只有确定按钮)


这种弹窗最常见,一般是提示信息,比如 “登录成功”“请输入用户名”。处理步骤:
  • 切换到弹窗:alert = driver.switch_to.alert
  • 点击确定:alert.accept()
  • 如果想看弹窗内容:print(alert.text)

2. confirm 弹窗(有确定和取消按钮)


比如删除数据时会弹 “确定要删除吗?”,处理时多一步选择:
  • 确定:alert.accept()
  • 取消:alert.dismiss()

3. 自定义弹窗(最麻烦但有办法)


有些网站会用 div 做自定义弹窗,长得像弹窗但不是系统弹窗,这时候用上面的方法没用。怎么办?
  • 先检查弹窗是不是在 iframe 里(F12 看元素结构),是的话先切换 iframe:driver.switch_to.frame("弹窗iframe的ID")
  • 直接定位弹窗里的 “关闭” 按钮点击,和定位普通元素一样:driver.find_element(By.CLASS_NAME, "close-btn").click()
  • 关掉后记得切回主页面:driver.switch_to.default_content()

👉 自问自答:遇到没见过的弹窗该怎么办?先按 F12 看元素类型,系统弹窗在 Elements 里看不到,自定义弹窗能看到具体标签,分清楚类型再下手就不会慌。


三、无头模式:让脚本 “隐形” 运行,速度飞起来


如果你觉得每次跑脚本都要打开浏览器,又占内存又慢,那一定要试试无头模式!

什么是无头模式?


简单说就是 “看不见的浏览器”,脚本在后台运行,不显示界面,速度能快 30% 以上,还能节省电脑资源。特别适合服务器上跑脚本,或者批量执行测试用例的时候。

怎么开启无头模式?(以 Chrome 为例)


只需要在启动浏览器时加几行配置,代码示例:
python
from selenium import webdriverfrom selenium.webdriver.chrome.options import Options# 创建配置对象chrome_options = Options()# 开启无头模式chrome_options.add_argument("--headless=new")# 可选:设置窗口大小(有些网站会根据窗口大小变布局)chrome_options.add_argument("--window-size=1920,1080")# 用带配置的方式启动浏览器driver = webdriver.Chrome(options=chrome_options)# 后面正常操作,脚本会在后台跑driver.get("https://www.baidu.com")print(driver.title)  # 能正常输出标题,但看不到浏览器窗口

无头模式适合什么时候用?


  • 已经调试好的稳定脚本,不需要看运行过程
  • 服务器上跑自动化测试(服务器一般没桌面环境)
  • 批量爬数据或执行多个测试用例,追求速度和效率

👉 兔子哥提醒:刚写的脚本别一开始就用无头模式,因为看不到运行过程,报错了不好排查。等脚本跑通了再切无头模式,效率更高。


四、实战小贴士:让脚本更稳的 3 个小技巧


  1. 等待别混用:显式等待和隐式等待别同时用,可能会导致等待时间变长(比如隐式等 10 秒,显式等 10 秒,实际可能等 20 秒)。
  2. 弹窗处理加等待:点击按钮后弹窗可能不会立刻出来,最好加个显式等待,等弹窗出现再处理,比如:

python
# 等alert弹窗出现WebDriverWait(driver, 5).until(EC.alert_is_present())

  1. 无头模式也能截图:虽然看不到界面,但可以截图排查问题:driver.save_screenshot("错误截图.png"),出问题时一看截图就知道哪错了。

其实 Selenium 的这些技巧,核心都是让脚本 “更懂网页”—— 知道等页面加载,会处理突发弹窗,还能悄悄高效运行。新手刚开始可能觉得复杂,多练几个场景就熟了。兔子哥建议大家拿实际网站练手,比如电商网站的登录弹窗、新闻网站的动态加载列表,遇到问题先自己排查,解决不了就搜搜别人的经验。记住,自动化脚本的稳定性不是一蹴而就的,多调多改,你写的脚本会越来越顺!希望这篇教程能帮到你,动手试试这些技巧吧!

标签: selenium

发布评论 0条评论)

  • Refresh code

还木有评论哦,快来抢沙发吧~