Selenium 从环境搭建到 Web 自动化实战

news/2026/1/18 22:05:16/文章来源:https://www.cnblogs.com/bukfz/p/19499257

Selenium 是目前最流行的 Web 自动化测试工具,支持 Chrome、Firefox 等主流浏览器,能模拟人工操作(点击、输入、跳转)实现网页自动化,广泛应用于接口测试、数据爬取、自动化部署等场景。本文从零基础入门,手把手教你掌握 Selenium 核心用法,所有代码可直接复制运行,附实战案例和避坑指南。

一、Selenium 核心优势与适用场景

1.1 核心优势

  • 跨浏览器兼容:支持 Chrome、Firefox、Edge、Safari,无需修改代码即可适配多浏览器;

  • 多语言支持:Python、Java、C# 等均可调用,Python 语法简洁,入门门槛最低;

  • 功能全面:支持元素定位、表单操作、窗口切换、文件上传、Cookie 处理等所有 Web 交互场景;

  • 开源免费:无版权限制,社区活跃,问题解决方案丰富。

1.2 典型适用场景

应用场景 实际需求 举例说明
自动化测试 重复执行测试用例,减少人工成本 电商网站登录、下单流程自动化测试
数据爬取 批量获取网页动态加载数据 爬取招聘网站岗位信息、股票行情
自动化办公 模拟人工操作网页完成重复任务 自动填写报表、批量提交表单
接口自动化 配合 Requests 库,实现前后端联动测试 模拟用户操作触发接口请求,验证响应

二、前置准备:环境搭建(Python 版)

Selenium 运行依赖 “Python 环境 + 浏览器驱动 + Selenium 库”,以下是 Windows/macOS 通用搭建步骤:

2.1 安装 Python 环境

  • 下载 Python 3.8~3.11 版本(兼容性最佳):https://www.python.org/downloads/

  • 安装时勾选 “Add Python to PATH”,避免手动配置环境变量;

  • 验证:打开 CMD(Windows)/ 终端(macOS),输入python --version,显示版本号即安装成功。

2.2 安装 Selenium 库

打开 CMD / 终端,执行 pip 命令安装:

pip install selenium==4.21.0  # 4.21.0为稳定版,避免使用最新版可能存在的bug

验证:Python 交互环境中输入import selenium,无报错即安装成功。

2.3 配置浏览器驱动(关键步骤)

Selenium 需通过驱动程序控制浏览器,必须保证 “驱动版本与浏览器版本匹配”:

2.3.1 以 Chrome 浏览器为例(最常用)

  1. 查看 Chrome 版本:打开 Chrome → 右上角三个点 → 帮助 → 关于 Google Chrome(如版本 125.0.6422.141);

  2. 下载对应 ChromeDriver:

  • 官方地址:https://googlechromelabs.github.io/chromedriver/downloads

  • 选择与浏览器版本一致的驱动(如浏览器 125.x,下载 125.x 版本驱动);

  • Windows 下载 win32 版本(64 位系统通用),macOS 下载 mac64 版本;

  1. 配置驱动:
  • Windows:将下载的 chromedriver.exe 文件放到 Python 安装目录(如 C:\Python39),或添加到系统 PATH;

  • macOS:将 chromedriver 放到 /usr/local/bin 目录,终端执行sudo chmod +x /usr/local/bin/chromedriver赋予执行权限。

2.3.2 验证驱动配置

CMD / 终端输入chromedriver --version,显示驱动版本号即配置成功。

三、核心用法:Selenium 基础操作(Python 代码)

以下以 “自动化访问百度,搜索 Selenium 教程” 为例,演示核心操作流程:

3.1 第一个 Selenium 程序

from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.common.keys import Keysimport time\# 1. 启动Chrome浏览器(无头模式可加options参数,见下文)driver = webdriver.Chrome()\# 2. 访问百度首页driver.get("https://www.baidu.com")driver.maximize\_window()  # 最大化窗口time.sleep(2)  # 等待2秒,让页面加载完成(避免元素未渲染导致定位失败)\# 3. 定位搜索框并输入内容\# 方式1:通过ID定位(最稳定,优先使用)search\_box = driver.find\_element(By.ID, "kw")search\_box.send\_keys("Selenium教程")  # 输入内容time.sleep(1)\# 4. 模拟回车搜索(或点击搜索按钮)search\_box.send\_keys(Keys.ENTER)\# 点击搜索按钮写法:driver.find\_element(By.ID, "su").click()\# 5. 等待搜索结果加载,获取页面标题time.sleep(3)print("当前页面标题:", driver.title)\# 6. 关闭浏览器(quit()关闭整个浏览器,close()仅关闭当前标签页)driver.quit()

3.2 核心操作详解

3.2.1 元素定位(自动化的核心)

Selenium 提供 8 种元素定位方式,优先选择 “稳定不易变” 的定位器:

定位方式 By 类写法 适用场景 示例(百度搜索框)
ID 定位 By.ID 元素有唯一 ID(最优先) driver.find_element(By.ID, "kw")
名称定位 By.NAME 元素有唯一 name 属性 driver.find_element(By.NAME, "wd")
类名定位 By.CLASS_NAME 元素类名唯一 driver.find_element(By.CLASS_NAME, "s_ipt")
XPath 定位 By.XPATH 无 ID/name 时使用(万能定位) driver.find_element(By.XPATH, "//input[@id='kw']")
CSS 选择器定位 By.CSS_SELECTOR 定位速度快,语法简洁 driver.find_element(By.CSS_SELECTOR, "#kw")
链接文本定位 By.LINK_TEXT 超链接文本唯一 driver.find_element (By.LINK_TEXT, "新闻")
部分链接文本定位 By.PARTIAL_LINK_TEXT 超链接文本过长时使用 driver.find_element (By.PARTIAL_LINK_TEXT, "新")
标签名定位 By.TAG_NAME 页面中该标签唯一时使用 极少用(如 driver.find_element (By.TAG_NAME, "input"))

实战技巧:Chrome 浏览器中可通过 “开发者工具” 快速获取元素定位器:

  1. F12 打开开发者工具 → 选中元素 → 右键 → Copy → Copy XPath/Copy selector。

3.2.2 常用交互操作

操作类型 代码示例 说明
输入文本 element.send_keys ("内容") 向输入框输入文本
清空文本 element.clear() 清空输入框内容
点击元素 element.click() 点击按钮、链接等
模拟键盘操作 element.send_keys(Keys.ENTER) 回车、Ctrl+C 等(需导入 Keys 类)
获取元素文本 element.text 获取标签内的文本(如按钮文字)
获取元素属性 element.get_attribute("src") 获取图片 src、输入框 value 等属性
页面跳转 driver.get("URL") 访问指定 URL
刷新页面 driver.refresh() 刷新当前页面
后退 / 前进 driver.back() / driver.forward() 浏览器历史记录操作

3.2.3 等待机制(避免元素未加载导致报错)

直接用 time.sleep () 是固定等待,不灵活,推荐使用显式等待(更高效):

from selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected\_conditions as EC\# 显式等待:最多等待10秒,直到ID为kw的元素可点击wait = WebDriverWait(driver, 10)search\_box = wait.until(EC.element\_to\_be\_clickable((By.ID, "kw")))search\_box.send\_keys("Selenium教程")

常用等待条件(expected_conditions):

  • element_to_be_clickable:元素可点击;

  • presence_of_element_located:元素存在于 DOM 树;

  • visibility_of_element_located:元素可见;

  • text_to_be_present_in_element:元素包含指定文本。

四、实战案例:自动化登录 GitHub(完整流程)

from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected\_conditions as ECimport time\# 1. 启动浏览器driver = webdriver.Chrome()driver.get("https://github.com/login")driver.maximize\_window()\# 2. 显式等待并输入用户名密码wait = WebDriverWait(driver, 15)\# 用户名输入框username = wait.until(EC.element\_to\_be\_clickable((By.ID, "login\_field")))username.send\_keys("你的GitHub账号")\# 密码输入框password = driver.find\_element(By.ID, "password")password.send\_keys("你的GitHub密码")\# 3. 点击登录按钮login\_btn = driver.find\_element(By.NAME, "commit")login\_btn.click()\# 4. 验证登录成功(通过页面标题判断)time.sleep(3)if "GitHub" in driver.title and "Dashboard" in driver.page\_source:    print("登录成功!")else:    print("登录失败!")\# 5. 保存Cookie(可选,用于后续免登录)cookies = driver.get\_cookies()print("当前Cookie:", cookies)\# 6. 关闭浏览器driver.quit()

五、进阶技巧:解决实际场景问题

5.1 无头模式运行(无界面,提高效率)

适用于服务器环境或不需要可视化的场景:

from selenium import webdriverfrom selenium.webdriver.chrome.options import Options\# 配置无头模式chrome\_options = Options()chrome\_options.add\_argument("--headless=new")  # Selenium4+推荐写法chrome\_options.add\_argument("--window-size=1920,1080")  # 设置窗口大小\# 启动浏览器driver = webdriver.Chrome(options=chrome\_options)driver.get("https://www.baidu.com")print(driver.title)driver.quit()

5.2 处理弹窗(Alert/Confirm/Prompt)

\# 触发弹窗后,切换到弹窗alert = driver.switch\_to.alertprint("弹窗内容:", alert.text)alert.accept()  # 确认弹窗\# alert.dismiss()  # 取消弹窗\# alert.send\_keys("输入内容")  # Prompt弹窗输入文本

5.3 文件上传

\# 定位文件上传按钮(input标签type="file")upload\_btn = driver.find\_element(By.ID, "file-upload")\# 直接输入文件路径(无需点击按钮)upload\_btn.send\_keys("C:/test.txt")  # Windows路径\# upload\_btn.send\_keys("/Users/test.txt")  # macOS路径

5.4 切换 iframe(处理嵌套页面)

\# 方式1:通过ID切换driver.switch\_to.frame("iframe-id")\# 方式2:通过索引切换(第1个iframe)driver.switch\_to.frame(0)\# 方式3:通过元素定位切换iframe = driver.find\_element(By.XPATH, "//iframe\[@name='iframe-name']")driver.switch\_to.frame(iframe)\# 切回主页面driver.switch\_to.default\_content()

六、常见坑与避坑技巧

6.1 元素定位失败

  • 原因 1:元素未加载完成 → 用显式等待替代 time.sleep ();

  • 原因 2:元素在 iframe 中 → 先切换到 iframe 再定位;

  • 原因 3:定位器错误(如 ID 变化) → 改用更稳定的 XPath/CSS 选择器;

  • 原因 4:浏览器驱动版本不匹配 → 重新下载对应版本驱动。

6.2 浏览器启动失败

  • Windows:chromedriver.exe 未添加到 PATH → 放到 Python 安装目录;

  • macOS:未赋予执行权限 → 执行sudo chmod +x /usr/local/bin/chromedriver

  • 防火墙拦截 → 暂时关闭防火墙或添加驱动到信任列表。

6.3 页面加载过慢

  • 禁用图片加载,提高速度:
chrome\_options.add\_argument("--disable-images")
  • 设置页面加载超时:
driver.set\_page\_load\_timeout(10)  # 10秒超时

6.4 反爬机制拦截

  • 模拟真实浏览器请求,添加请求头:
chrome\_options.add\_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36")
  • 避免频繁操作,适当添加等待时间。

七、进阶方向:Selenium 与测试框架整合

7.1 结合 pytest 实现自动化测试

pytest 是 Python 主流测试框架,可实现用例管理、断言、报告生成:

\# test\_baidu.pyimport pytestfrom selenium import webdriverfrom selenium.webdriver.common.by import By@pytest.fixture(scope="module")def driver():    # 前置条件:启动浏览器    driver = webdriver.Chrome()    yield driver    # 后置条件:关闭浏览器    driver.quit()def test\_baidu\_search(driver):    driver.get("https://www.baidu.com")    driver.find\_element(By.ID, "kw").send\_keys("Selenium")    driver.find\_element(By.ID, "su").click()    # 断言:搜索结果包含"Selenium"    assert "Selenium" in driver.title

运行测试用例:

pytest test\_baidu.py -v  # -v显示详细结果

7.2 生成测试报告

使用 allure-pytest 生成可视化测试报告:

\# 安装依赖pip install allure-pytest\# 运行用例并生成报告数据pytest test\_baidu.py --alluredir=./allure-results\# 启动报告服务allure serve ./allure-results

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1179578.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通信原理篇---PAM与PCM

解释 PAM(脉冲幅度调制) 和 PCM(脉冲编码调制) 的区别。1. 基本概念PAM:模拟调制方式,用脉冲序列的幅度来模拟连续信号的瞬时值,仍然是模拟信号。PCM:数字调制方式,先对模…

GESP认证C++编程真题解析 | 202309 四级

​欢迎大家订阅我的专栏:算法题解:C++与Python实现! 本专栏旨在帮助大家从基础到进阶 ,逐步提升编程能力,助力信息学竞赛备战! 专栏特色 1.经典算法练习:根据信息学竞赛大纲,精心挑选经典算法题目,提供清晰的…

P1339 Heat Wave G

点击查看代码 #include<bits/stdc++.h> using namespace std; typedef pair<int,int> PII; const int N=3000; const int M=7000*2; int n,m,s,t; struct Edge{int to;int w;int ne; }edge[M]; int h[N]; …

P2910 Clear And Present Danger S

点击查看代码 #include<bits/stdc++.h> using namespace std;const int N=110; const int M=10010; int n,m; int p[N]; int dist[N][N]; long long ans;int main() {ios::sync_with_stdio(0),cin.tie(0);cin>…

职场晋升需要 AI 证书,选偏理论还是偏实操的更有用?

在职场晋升场景中&#xff0c;AI证书的价值需结合实用性判断。多数情况下&#xff0c;偏实操属性的证书更能适配企业“以结果为导向”的评估逻辑&#xff0c;其承载的技能可直接转化为工作效率与业务成果&#xff1b;理论类证书仅适合特定场景作为补充&#xff0c;难以成为晋升…

TCP 协议深度解析与实践:从零基础到精通

📚 学习路径:本文适合不同层次的读者🟢 小白级:了解网络基础、TCP 基本概念 🟡 初级:掌握 TCP 连接过程、Python Socket 编程 🟠 中级:理解 TCP 可靠性机制、实战应用 🔴 精通级:深入 TCP 内核机制、性…

小程序毕设选题推荐:基于springboot+微信小程序的校园竞赛管理系统【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

> STM32-200-多功能门禁人脸识别指纹识别RFID刷卡密码(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

STM32-200-多功能门禁人脸识别指纹识别RFID刷卡密码(设计源文件万字报告讲解)&#xff08;支持资料、图片参考_相关定制&#xff09;_文章底部可以扫码产品功能描述&#xff1a; 本系统由STM32F103C8T6单片机核心板、1.44寸TFT彩屏、&#xff08;无线蓝牙/无线WIFI/无线视频监控…

数据质量与主数据管理:确保企业核心数据准确

数据质量与主数据管理&#xff1a;确保企业核心数据准确 1. 引入与连接 1.1 引人入胜的开场 想象一下&#xff0c;一家大型零售企业计划推出一系列针对特定客户群体的促销活动。营销团队精心策划了方案&#xff0c;投入了大量资源进行宣传推广。然而&#xff0c;活动结束后却发…

51-C40-温湿度检测+上下限+加热+空调降温+加湿+除湿+手动+自动+OLED屏+声光报警+按键+(无线方式选择)(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

51-C40-温湿度检测上下限加热空调降温加湿除湿手动自动OLED屏声光报警按键(无线方式选择)51-C040B蓝牙无线-APP版: 51-C040W-WIFI无线-APP版: 51-C040CAN-视频监控WIFI无线-APP版: 产品功能描述&#xff1a; 本系统由51单片机最小系统电路、OLED屏、&#xff08;无线蓝牙/无线W…

数论2:gcd、lcm与exgcd

数论2:gcd、lcm与exgcdgcd:Greatest Common Divisor,最大公约数,即对于不全为0的整数p、q,存在一最大的整数r,使得r|p、r|q且对于任意整数s,s|p且s|q,有r>=s。 记作gcd(p,q),特别的,gcd(a,0) = |a| (a!=0…

假期schedule

写在前面 假期雅思是最重要的 计划安排 5.40-5.50 起床 6.00 - 7.00 口语一节词汇课 7.30 - 9.30 第一节回放 10.00 开始第二节回放看一点可能去吃饭 尽量不要午睡 下午最好1.30 可以开始胡小溪或邹为涛 一周要保证六天&#xff0c;六个下午在做研究 晚上晚饭之后看完一个雅思回…

计算机小程序毕设实战-基于SpringBoot+Vue的高校学科竞赛管理系统微信小程序基于springboot+微信小程序的院竞赛管理系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

day144—递归—平衡二叉树(LeetCode-110)

题目描述给定一个二叉树&#xff0c;判断它是否是 平衡二叉树 示例 1&#xff1a;输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;true示例 2&#xff1a;输入&#xff1a;root [1,2,2,3,3,null,null,4,4] 输出&#xff1a;false示例 3&#xff1a;输入&…

2026年市场可靠的活性炭箱优质厂家哪家靠谱,滤筒除尘器/旋风除尘器/活性炭箱/催化燃烧,活性炭箱生产商口碑排行 - 品牌推荐师

评测背景 随着环保政策持续收紧及工业废气治理需求激增,活性炭箱作为VOCs(挥发性有机物)治理的核心设备,其性能稳定性、技术适配性及服务能力成为用户选型的关键指标。为客观评估市场主流供应商的综合实力,本评测…

STM32单片机分享:智能鱼缸系统

目录 一、项目成品图片 二、项目功能简介 1.主要器件组成 2.功能详解介绍 三、项目原理图设计 四、项目PCB硬件设计 项目PCB图 五、项目程序设计 六、项目实验效果 ​编辑 七、项目包含内容 一、项目成品图片 哔哩哔哩视频链接&#xff1a; https://www.bilibili.c…

2026年国内可靠的活性炭箱制造厂家推荐排行榜,RTO/旋风除尘器/沸石转轮一体机/除尘器,活性炭箱公司推荐榜 - 品牌推荐师

在工业废气治理领域,活性炭箱作为VOCs(挥发性有机物)吸附净化环节的核心设备,直接影响企业排放达标率与环保合规成本。其吸附效率、结构稳定性及运维便捷性,已成为衡量设备性能的关键指标。本文聚焦河北清大环保机…

交通仿真软件:VISSIM_(22).交通仿真在城市规划中的应用

交通仿真在城市规划中的应用 1. 交通仿真概述 交通仿真是一种通过计算机模型来模拟实际交通系统运行情况的技术。它可以帮助城市规划师、交通工程师和政策制定者在虚拟环境中评估和优化交通系统的性能。交通仿真软件通过创建详细的交通网络模型&#xff0c;模拟车辆、行人和公共…

day145—递归—二叉树的右视图(LeetCode-199)

题目描述给定一个二叉树的 根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。示例 1&#xff1a;输入&#xff1a;root [1,2,3,null,5,null,4]输出&#xff1a;[1,3,4]解释&#xff1a;示例 2&#xf…

STM32单片机分享:智能书桌系统

目录 一、项目成品图片 二、项目功能简介 1.主要器件组成 2.功能详解介绍 三、项目原理图设计 四、项目PCB硬件设计 项目PCB图 五、项目程序设计 六、项目实验效果 ​编辑 七、项目包含内容 一、项目成品图片 哔哩哔哩视频链接&#xff1a; https://www.bilibili.c…