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办公自动化专栏
求个 🤞 关注 🤞 +❤️ 喜欢 ❤️ +👍 收藏 👍
希望能得到大家的【❤️一个免费关注❤️】感谢!
希望对初学者有帮助;致力于办公自动化的小小程序员一枚
Could not load content