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 三方库 jwt_io 的鸿蒙化适配指南 - 在鸿蒙系统上构建极致、严谨、全能的 JSON Web Token (JWT) 加解密与身份安全验证引擎

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 jwt_io 的鸿蒙化适配指南 - 在鸿蒙系统上构建极致、严谨、全能的 JSON Web Token (JWT) 加解密与身份安全验证引擎 在鸿蒙(OpenHarmony)系统的端云一体化登录、政企应用的安全审计或复杂的跨端权限校验场景中,如何确保来自云端授信中心的 JWT Token 既能被正确解析(Decode),又能被严密地校验其合法性与过期时间?jwt_io 为开发者提供了一套工业级的、基于 RFC 7519 标准的 JSON Web Token 深度处理方案。本文将深入实战其在鸿蒙应用安全底座中的应用。 前言 什么是 JWT IO?它不仅是一个简单的 Base64 解码器,而是一个具备深厚 RFC

By Ne0inhk

Ubuntu 22.04 中禁用 `unattended-upgrades` 完全指南

Ubuntu 22.04 中禁用 unattended-upgrades 完全指南 📌 什么是 unattended-upgrades? unattended-upgrades 是 Ubuntu 系统默认预装的自动更新工具,主要用于自动下载并安装安全更新(如系统漏洞修复、关键组件补丁),无需用户手动干预。其设计目的是提升系统安全性,但在部分场景下(如服务器稳定运行、测试环境控制、带宽受限等),用户可能需要禁用该功能。 ⚠️ 禁用前的重要提醒 * 禁用自动更新后,系统将不再自动获取安全补丁,需手动定期执行更新(推荐 sudo apt update && sudo apt upgrade -y),否则可能面临安全风险。 * 以下方法适用于 Ubuntu 22.04(基于 Debian 11 架构),其他版本可能略有差异。 * 操作前建议备份关键配置文件(如 /etc/apt/

By Ne0inhk
【Linux 网络】理解并应用应用层协议:HTTP(附简单HTTP服务器C++代码)

【Linux 网络】理解并应用应用层协议:HTTP(附简单HTTP服务器C++代码)

前言:         上文我们学习到了什么是守护进程以及其原理【Linux网络】深入理解守护进程(Daemon)及其实现原理-ZEEKLOG博客         本文我们来认识应用层的协议:HTTP! HTTP协议         虽然应用层协议通常可由程序员自定义,但在实际开发中,我们通常直接使用业界专家已经定义好且非常成熟的现成协议。HTTP(超文本传输协议)就是其中最重要、最好用的应用层协议之一。         HTTP是互联网世界的基石,它定义了客户端(如浏览器)与服务器之间进行通信的标准方式,主要用于交换或传输超文本数据(例如 HTML 文档)。         HTTP协议遵循标准的请求-响应(Request-Response)模型:         请求:客户端通过HTTP协议主动向服务器发送请求。         响应:服务器收到客户端发来的请求后进行处理,并将结果作为响应返回给客户端。         HTTP协议具有两个显著特点:         无连接:每一次请求都想要建立一个新的连接,处理完既断开         无状态:服务器不会保存客

By Ne0inhk
Flutter 三方库 http_core_client 的鸿蒙化适配指南 - 打造极简、健壮的 OpenHarmony 网络请求核心组件

Flutter 三方库 http_core_client 的鸿蒙化适配指南 - 打造极简、健壮的 OpenHarmony 网络请求核心组件

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 http_core_client 的鸿蒙化适配指南 - 打造极简、健壮的 OpenHarmony 网络请求核心组件 在 Flutter 应用开发中,网络请求层(Networking Layer)是应用的生命线。虽然 dio 功能强大,但对于追求轻量化、高性能的鸿蒙应用来说,一个精简且核心功能完备的客户端库往往更具优势。http_core_client 为开发者提供了一套基于 BaseClient 封装的极简模型。在 OpenHarmony(鸿蒙)环境下,如何结合其底层网络栈、处理系统的代理配置以及优化连接复用,是构建高标准鸿蒙应用的必修课。本文将带大家深入探讨其适配要点。 前言 随着鸿蒙系统(HarmonyOS)进入原生应用开发的新阶段,网络栈的稳定性与安全性(如 TLS

By Ne0inhk