初识 Selenium4 及使用
简介
Selenium 是一个广泛使用的自动化测试工具,主要用于 Web 应用程序的自动化测试。它支持多种编程语言(如 Java、Python、C#、Ruby、JavaScript 等),允许用户通过代码控制浏览器执行自动化任务,例如点击按钮、填写表单、验证页面内容等。
Selenium 可以在多种浏览器(如 Chrome、Firefox、Edge、Safari 等)和操作系统(Windows、macOS、Linux)上运行。
备注:本文档主要介绍在 Python 环境下使用 Selenium 4 的相关知识。
官方文档:Selenium 官方文档
特点
- 跨浏览器支持:支持 Chrome、Firefox、Safari、Edge 等多种主流浏览器,可在不同浏览器上执行相同的测试脚本。
- 多语言支持:支持 Python、Java、C#、Ruby、JavaScript 等编程语言,开发者可以用自己熟悉的语言编写脚本。
- 灵活性:可与 TestNG、JUnit、PyTest 等测试框架结合,提供丰富的测试功能。
- 与 CI/CD 集成:能与 Jenkins 等持续集成工具集成,实现自动化测试和持续交付。
- 自动化 Web 交互:可模拟真实用户操作,如点击、滚动、键盘输入等,实现 Web 自动化(即使在浏览器窗口无焦点状态下也能执行)。
组成部分
Selenium 由多个组件构成,各组件用途如下:
- Selenium WebDriver:核心组件,直接与浏览器交互。提供丰富的 API,允许开发者通过代码控制浏览器行为(打开网页、点击按钮、填写表单等)。
- Selenium IDE:浏览器插件,用于录制和回放用户操作。适合初学者快速创建简单测试脚本,但不支持复杂逻辑和条件判断。
- Selenium Grid:用于并行执行测试的工具。可在多个浏览器和操作系统上同时运行测试,加快测试速度,提高测试覆盖率。
应用场景
- 自动化测试:Web 应用程序的功能测试、回归测试、兼容性测试等;模拟用户操作,验证页面功能。
- 网页抓取:从网页中提取数据(如商品信息、新闻内容等),尤其适合处理动态加载的内容(如通过 JavaScript 加载的数据)。
- 自动化任务:执行重复性网页操作,如自动填写表单、自动登录等。
- 跨浏览器测试:验证 Web 应用程序在不同浏览器和操作系统上的兼容性。
局限性
- 无法处理非浏览器操作:Selenium 只能控制浏览器,无法直接操作桌面应用程序或移动应用程序。
- 动态内容处理复杂:对于高度动态的网页(如单页应用),可能需要额外的等待机制或执行 JavaScript 来确保元素加载完成。
- 性能开销:启动浏览器实例会消耗较多资源,执行速度相对较慢。
Selenium 4 新特性
executable_path已弃用
使用Service对象来代替旧的executable_path参数。- 自动资源回收
Selenium 4 可以自动关闭浏览器并回收资源,不再需要手动调用driver.quit()(但为了确保资源释放,建议仍显式调用)。 - 新的定位方法
引入By类,替代之前的find_element_by_*系列方法,统一使用find_element(By.ID, "id")形式。 - 放弃 PhantomJS
不再支持 PhantomJS 无头浏览器,推荐使用 Chrome 或 Firefox 的无头模式。
注意:Selenium 4 要求 Python 版本为 3.7 或更高。
环境准备
安装 Selenium
-
使用pip安装
# 通过pip安装 pip install selenium # 如果系统中同时安装了 Python 2 和 Python 3,可能需要使用 pip3 pip3 install selenium -
验证安装
pip show selenium
下载浏览器驱动
Selenium 需要通过浏览器驱动来控制浏览器,不同浏览器需要不同的驱动。请根据你使用的浏览器下载对应的驱动,并确保驱动版本与浏览器版本匹配。
-
Chrome 驱动:ChromeDriver 下载页
-
Firefox 驱动:GeckoDriver 下载页
-
Edge 驱动:EdgeDriver 下载页
-
IE 模式驱动(用于 Edge 的 IE 模式):IEDriverServer 下载页
驱动放置方式
-
方式一:将驱动可执行文件(如
chromedriver.exe)放在 Python 解释器所在目录(如python.exe同级目录),或在系统 PATH 环境变量中包含驱动所在路径。
-
方式二:在代码中通过
Service对象指定驱动路径(推荐,避免污染系统环境)。
快速启动示例
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome() # 假设驱动已在 PATH 中
try:
# 打开百度
driver.get("https://www.baidu.com")
# 输入关键词并搜索
search_box = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "chat-textarea"))
)
search_box.send_keys("克峰同学")
# 等待提交按钮可点击并点击
submit_btn = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.ID, "chat-submit-button"))
)
submit_btn.click()
# 等待搜索结果加载
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR, "div.result"))
)
print("页面标题:", driver.title)
# 保持浏览器打开,只关闭驱动连接
input("\n按Enter键关闭驱动连接(浏览器保持打开):")
finally:
driver.quit()
注意事项
- 驱动版本必须与浏览器版本匹配,否则会报错。可查看浏览器版本(如 Chrome 的“关于 Chrome”),然后到驱动下载页选择对应版本。
- 若不想将驱动放入系统 PATH,始终使用
Service指定路径,这样更灵活。 - 建议显式调用
driver.quit(),尽管 Selenium 4 有一定自动回收能力,但显式关闭可确保资源及时释放。 - 处理动态内容:推荐使用显式等待(
WebDriverWait)而非time.sleep(),以提高脚本稳定性和执行效率。

浙公网安备 33010602011771号