Python Web 自动化神器:Selenium 超详细入门教程 (Zero to Hero)

Python Web 自动化神器:Selenium 超详细入门教程 (Zero to Hero)

目录

专栏导读

❤️ 欢迎各位佬关注! ❤️
文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏
📕 此外还有python基础专栏:请点击——>Python基础学习专栏 求订阅
🕷 此外还有爬虫专栏:请点击——>Python爬虫基础专栏 求订阅
👍 该系列文章专栏:请点击——>Python办公自动化专栏 求订阅
🏳️‍🌈 ZEEKLOG博客主页:请点击——> ZEEKLOG的博客主页 求关注
🏳️‍🌈 知乎主页:请点击——> 知乎主页 求关注
🏳️‍🌈 Github主页:请点击——> Github主页 求Star⭐
🏳️‍🌈 个人博客主页:请点击——> 个人的博客主页 求收藏
🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手

Python Web 自动化神器:Selenium 超详细入门教程 (Zero to Hero)

在当今的数据驱动时代,Web 自动化技术变得越来越重要。无论是为了自动化测试、数据采集(爬虫),还是为了处理繁琐的重复性网页操作,Selenium 无疑是 Python 生态中最强大、最流行的工具之一。

本教程旨在为完全零基础的初学者提供一份系统、详尽的 Selenium 指南。我们将从环境搭建开始,一步步深入到核心操作,最终助你编写出稳定的自动化脚本。

点击 投票 获取Python办公自动化高清书籍
(Excel Python:飞速搞定数据分析与处理 (【瑞士】费利克斯·朱姆斯坦) )**


1. 什么是 Selenium?

Selenium 最初是为 Web 应用程序的自动化测试而设计的开源工具。它可以通过代码模拟真实用户在浏览器中的操作,例如点击按钮、输入文本、滚动页面等。

为什么选择 Selenium?

  • 跨浏览器/平台: 支持 Chrome、Firefox、Edge、Safari 等主流浏览器,且支持 Windows, Mac, Linux。
  • 多语言支持: 虽然本教程使用 Python,但 Selenium 也支持 Java, C#, Ruby 等。
  • 所见即所得: 你能亲眼看到浏览器自动打开并执行操作,非常直观,便于调试。

2. 环境搭建 (Prerequisites)

在开始写代码之前,我们需要准备好“武器库”。

2.1 安装 Python

确保你的电脑上已经安装了 Python (建议 3.7+ 版本)。
在终端(Terminal 或 CMD)输入以下命令检查:

python --version 

2.2 安装 Selenium 库

使用 pip 安装 Selenium 的 Python 绑定库:

pip install selenium 

2.3 浏览器驱动 (Browser Drivers)

Selenium 需要一个“中间人”来和浏览器通信,这就是WebDriver

  • Chrome 用户: 需要 chromedriver
  • Firefox 用户: 需要 geckodriver
  • Edge 用户: 需要 msedgedriver
注意 (Selenium 4.x 更新):
如果你安装的是最新版的 Selenium (4.6+),它内置了 Selenium Manager,通常可以自动下载和管理驱动,你可能不需要手动配置驱动路径。但如果遇到报错,请前往 Chrome for Testing 下载与你浏览器版本一致的驱动,并将其路径添加到系统的环境变量中。

3. 快速上手:你的第一个自动化脚本

让我们来写一个简单的脚本:打开 Chrome 浏览器,访问百度。

from selenium import webdriver import time # 1. 实例化浏览器驱动 (这里使用 Chrome)# 如果驱动配置正确,这里会自动启动一个空白的 Chrome 窗口 driver = webdriver.Chrome()# 2. 访问网页 driver.get("https://www.baidu.com")# 3. 打印当前网页标题print(f"当前网页标题: {driver.title}")# 4. 强制等待 3 秒 (仅为了演示,让你看清效果) time.sleep(3)# 5. 关闭浏览器并释放资源 driver.quit()

4. 核心技能:元素定位 (Locating Elements)

要想操作页面上的元素(比如搜索框、登录按钮),首先必须找到它。Selenium 提供了多种定位策略。

前置导入:
在 Selenium 4 中,推荐使用 By 类来指定定位方式。

from selenium.webdriver.common.by import By 

常用定位方式一览

定位方式代码示例描述推荐指数
IDdriver.find_element(By.ID, "kw")元素的 id 属性,通常是唯一的。⭐⭐⭐⭐⭐ (最快)
Namedriver.find_element(By.NAME, "wd")元素的 name 属性,常用于表单。⭐⭐⭐⭐
Class Namedriver.find_element(By.CLASS_NAME, "s_ipt")元素的 class 属性。⭐⭐⭐
XPathdriver.find_element(By.XPATH, "//input[@id='kw']")极其强大,可定位任何元素,但语法较复杂且速度稍慢。⭐⭐⭐⭐ (万能)
CSS Selectordriver.find_element(By.CSS_SELECTOR, "#kw")语法简洁,渲染速度比 XPath 快,前端开发常用。⭐⭐⭐⭐⭐ (推荐)
Link Textdriver.find_element(By.LINK_TEXT, "新闻")精确匹配超链接文本。⭐⭐⭐

如何获取这些属性?
在浏览器中右键点击你想操作的元素,选择**“检查” (Inspect)**,在开发者工具中查看 HTML 代码。


5. 元素交互 (Interacting with Elements)

找到元素后,我们需要对其进行操作。

5.1 常用操作方法

# 假设我们定位到了百度的搜索框 search_box = driver.find_element(By.ID,"kw")# 1. 输入文本 search_box.send_keys("Python Selenium 教程")# 2. 清空文本 (如果输入框里已有内容) search_box.clear() search_box.send_keys("Selenium 自动化")# 3. 点击操作 (假设定位到了“百度一下”按钮) search_btn = driver.find_element(By.ID,"su") search_btn.click()# 4. 获取元素文本 result_text = driver.find_element(By.CLASS_NAME,"result-title").text print(result_text)# 5. 获取元素属性 (例如获取链接地址 href) link = driver.find_element(By.TAG_NAME,"a").get_attribute("href")

6. 等待策略:让脚本更稳定 (Waiting Strategies)

这是新手最容易踩坑的地方!
网页加载需要时间,如果代码执行速度快于网页加载速度,就会报 NoSuchElementException 错误。我们需要让 Python “等一等” 浏览器。

6.1 强制等待 (不推荐)

import time time.sleep(5)# 死等 5 秒,不管网页是否加载完

缺点:浪费时间,效率低。

6.2 隐式等待 (Implicit Wait)

设置一个全局的最长等待时间。如果在规定时间内元素出现了,就立即执行;如果超时,则报错。

# 在 driver 初始化后设置一次即可 driver.implicitly_wait(10)# 最多等 10 秒

缺点:只能判断元素是否存在,无法判断元素是否可见或可点击。

6.3 显式等待 (Explicit Wait) - 强烈推荐

针对特定元素设置特定的等待条件。这是最灵活、最稳定的方式。

from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 设置最长等待 10 秒 wait = WebDriverWait(driver,10)# 等待 ID 为 "su" 的元素变为【可点击】状态,然后再执行点击 submit_btn = wait.until(EC.element_to_be_clickable((By.ID,"su"))) submit_btn.click()

7. 实战演练:自动化搜索并截图

我们将把以上知识点串联起来,完成一个完整的任务:

  1. 打开百度。
  2. 输入关键词。
  3. 点击搜索。
  4. 滚动到底部。
  5. 截图保存。
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import time defdemo_baidu_search():# 1. 初始化配置 options = webdriver.ChromeOptions()# options.add_argument("--headless") # 如果不想看到浏览器界面,可开启无头模式 driver = webdriver.Chrome(options=options) driver.maximize_window()# 最大化窗口try:# 2. 访问网站 driver.get("https://www.baidu.com")# 3. 显式等待搜索框出现 wait = WebDriverWait(driver,10) search_input = wait.until(EC.presence_of_element_located((By.ID,"kw")))# 4. 输入内容并回车 (模拟键盘回车,替代点击按钮) search_input.send_keys("Selenium Python") search_input.send_keys(Keys.RETURN)# 5. 等待搜索结果加载 (通过定位底部的分页条来确认加载完成) wait.until(EC.presence_of_element_located((By.ID,"page")))# 6. 执行 JavaScript 滚动到底部 driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") time.sleep(2)# 稍微等待滚动动画# 7. 截图 driver.save_screenshot("baidu_result.png")print("截图已保存!")except Exception as e:print(f"发生错误: {e}")finally:# 8. 无论成功失败,务必关闭驱动 driver.quit()if __name__ =="__main__": demo_baidu_search()

8. 常见避坑指南 (Common Pitfalls)

  1. Driver 版本不匹配:
    • 现象: 报错 SessionNotCreatedException
    • 解决: 更新 Chrome 浏览器,并重新下载对应版本的 ChromeDriver,或者更新 Selenium 库以使用 Selenium Manager。
  2. 元素不可见/不可交互:
    • 现象: 报错 ElementNotInteractableException
    • 原因: 元素被遮挡、元素还在加载中、或者元素在 <iframe> 内部。
    • 解决: 使用显式等待;如果是 iframe,需先使用 driver.switch_to.frame() 切换进去。
  3. 被网站识别为爬虫:
    • 现象: 出现滑块验证码或直接被拦截。
    • 解决: Selenium 即使模拟浏览器,也会带有自动化特征(如 window.navigator.webdriver 属性为 true)。可以通过修改 ChromeOptions 隐藏特征,但高级反爬需要更复杂的技术对抗。
  4. 忘记 quit():
    • 现象: 脚本运行多次后,电脑内存爆满,后台有大量 chromedriver 进程。
    • 解决: 务必使用 try...finally... 结构确保 driver.quit() 被执行。

9. 总结与进阶资源

恭喜你!你已经掌握了 Selenium 的核心基础。你现在可以打开浏览器,定位元素,并编写脚本让它自动工作了。

进阶学习建议:

  • Page Object Model (POM): 学习设计模式,将页面定位逻辑与业务逻辑分离,让代码更易维护。
  • 处理复杂控件: 学习如何处理下拉框 (Select 类)、弹出框 (Alert)、多窗口切换 (switch_to.window)。
  • Pytest 结合: 将 Selenium 结合测试框架 Pytest,编写专业的自动化测试用例。

Selenium 是一个通过实践掌握的工具。现在,试着去写一个自动化登录你常用网站的脚本吧(注意不要用于非法用途)!

Happy Coding! 🚀

结尾

此外还有Python基础专栏,欢迎大家订阅:Python基础学习专栏
此外还有爬虫专栏,欢迎大家订阅:Python爬虫基础专栏
此外还有办公自动化专栏,欢迎大家订阅:Python办公自动化专栏
求个 🤞 关注 🤞 +❤️ 喜欢 ❤️ +👍 收藏 👍
希望能得到大家的【❤️一个免费关注❤️】感谢!
希望对初学者有帮助;致力于办公自动化的小小程序员一枚

Read more

Flutter 三方库 df_generate_dart_models_core 的鸿蒙化适配指南 - 实现自动化的数据模型代码生成、支持 JSON 反序列化模板定义与工程化规范一致性

Flutter 三方库 df_generate_dart_models_core 的鸿蒙化适配指南 - 实现自动化的数据模型代码生成、支持 JSON 反序列化模板定义与工程化规范一致性

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 df_generate_dart_models_core 的鸿蒙化适配指南 - 实现自动化的数据模型代码生成、支持 JSON 反序列化模板定义与工程化规范一致性 前言 在进行 Flutter for OpenHarmony 的大规模业务逻辑开发时,手动编写海量的 Data Models(POJO/Entity)以及配套的 fromJson/toJson 方法不仅枯燥乏味,还极易引入手写错误。df_generate_dart_models_core 是一个强大的代码生成核心库,它能将原始 JSON 样本或 Schema 自动转化为符合 Dart 规范的数据类代码。本文将指导大家如何将该库集成到鸿蒙项目的工程化提效链路中。 一、原理解析

By Ne0inhk

OpenCLAW Linux部署全攻略

OpenCLAW 在 Linux 系统中的完整部署指南 环境准备与前置条件 在开始安装 OpenCLAW 之前,需要确保您的 Linux 系统满足以下基本要求: 环境组件版本要求验证命令Node.js22.0.0 或更高版本node --versionnpm对应 Node.js 版本npm --versionPython3.8 或更高版本python3 --version系统内存≥ 2GBfree -h网络连接稳定互联网连接ping -c 3 google.com Node.js 环境配置 如果系统中未安装合适版本的 Node.js,推荐使用 Node Version Manager (NVM) 进行安装: # 安装 NVM curl -o- https://raw.githubusercontent.com/

By Ne0inhk
⓫⁄₆ ⟦ OSCP ⬖ 研记 ⟧ Windows权限提升 ➱ 自动化枚举

⓫⁄₆ ⟦ OSCP ⬖ 研记 ⟧ Windows权限提升 ➱ 自动化枚举

郑重声明:本文所涉安全技术仅限用于合法研究与学习目的,严禁任何形式的非法利用。因不当使用所导致的一切法律与经济责任,本人概不负责。任何形式的转载均须明确标注原文出处,且不得用于商业目的。 🔋 点赞 | 能量注入 ❤️ 关注 | 信号锁定 🔔 收藏 | 数据归档 ⭐️ 评论 | 保持连接💬 🌌 立即前往 👉晖度丨安全视界🚀 ▶ 信息收集 ➢ Windows权限提升 ➢  自动化枚举 🔥🔥🔥 ▶ 漏洞检测 ▶ 初始立足点  ▶ 权限提升  ▶ 横向移动 ▶ 报告/分析 ▶ 教训/修复 目录

By Ne0inhk
ARM Linux 驱动开发篇---Linux 设备树简介-- Ubuntu20.04

ARM Linux 驱动开发篇---Linux 设备树简介-- Ubuntu20.04

🎬 渡水无言:个人主页渡水无言 ❄专栏传送门: 《linux专栏》   《嵌入式linux驱动开发》 ⭐️流水不争先,争的是滔滔不绝  📚博主简介:第二十届中国研究生电子设计竞赛全国二等奖 |国家奖学金 | 省级三好学生 | 省级优秀毕业生获得者 | ZEEKLOG新星杯TOP18 | 半导纵横专栏博主 | 211在读研究生 在这里主要分享自己学习的linux嵌入式领域知识;有分享错误或者不足的地方欢迎大佬指导,也欢迎各位大佬互相三连 目录 前言 一、什么是设备树? 二、DTS、DTB 和 DTC 三、DTS编译规则 四、DTB 文件最终如何被内核使用? 总结 前言 在传统驱动中,GPIO址、中断号、时钟参数等硬件信息都硬编码在代码里,换一块开发板就要改一次驱动;而设备树通过.dts文件统一描述所有硬件资源,驱动只需通过标准 API获取资源,实现 “一次编写、多板适配”。如今设备树已经成为 Linux 驱动开发的核心规范,是每一位嵌入式

By Ne0inhk