欢迎光临
我们一直在努力

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

目录

    • Python Web 自动化神器:Selenium 超详细入门教程 (Zero to Hero)
    • 1. 什么是 Selenium?
    • 2. 环境搭建 (Prerequisites)
      • 2.1 安装 Python
      • 2.2 安装 Selenium 库
      • 2.3 浏览器驱动 (Browser Drivers)
    • 3. 快速上手:你的第一个自动化脚本
    • 4. 核心技能:元素定位 (Locating Elements)
      • 常用定位方式一览
    • 5. 元素交互 (Interacting with Elements)
      • 5.1 常用操作方法
    • 6. 等待策略:让脚本更稳定 (Waiting Strategies)
      • 6.1 强制等待 (不推荐)
      • 6.2 隐式等待 (Implicit Wait)
      • 6.3 显式等待 (Explicit Wait) – **强烈推荐**
    • 7. 实战演练:自动化搜索并截图
    • 8. 常见避坑指南 (Common Pitfalls)
    • 9. 总结与进阶资源

专栏导读

  • 🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手
  • 🏳️‍🌈 个人博客主页:请点击——> 个人的博客主页 求收藏
  • 🏳️‍🌈 Github主页:请点击——> Github主页 求Star⭐
  • 🏳️‍🌈 知乎主页:请点击——> 知乎主页 求关注
  • 🏳️‍🌈 CSDN博客主页:请点击——> CSDN的博客主页 求关注
  • 👍 该系列文章专栏:请点击——>Python办公自动化专栏 求订阅
  • 🕷 此外还有爬虫专栏:请点击——>Python爬虫基础专栏 求订阅
  • 📕 此外还有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

常用定位方式一览

定位方式代码示例描述推荐指数
ID driver.find_element(By.ID, "kw") 元素的 id 属性,通常是唯一的。 ⭐⭐⭐⭐⭐ (最快)
Name driver.find_element(By.NAME, "wd") 元素的 name 属性,常用于表单。 ⭐⭐⭐⭐
Class Name driver.find_element(By.CLASS_NAME, "s_ipt") 元素的 class 属性。 ⭐⭐⭐
XPath driver.find_element(By.XPATH, "//input[@id='kw']") 极其强大,可定位任何元素,但语法较复杂且速度稍慢。 ⭐⭐⭐⭐ (万能)
CSS Selector driver.find_element(By.CSS_SELECTOR, "#kw") 语法简洁,渲染速度比 XPath 快,前端开发常用。 ⭐⭐⭐⭐⭐ (推荐)
Link Text driver.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. 实战演练:自动化搜索并截图

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

  • 打开百度。
  • 输入关键词。
  • 点击搜索。
  • 滚动到底部。
  • 截图保存。
  • 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

    def demo_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)

  • Driver 版本不匹配:
    • 现象: 报错 SessionNotCreatedException。
    • 解决: 更新 Chrome 浏览器,并重新下载对应版本的 ChromeDriver,或者更新 Selenium 库以使用 Selenium Manager。
  • 元素不可见/不可交互:
    • 现象: 报错 ElementNotInteractableException。
    • 原因: 元素被遮挡、元素还在加载中、或者元素在 <iframe> 内部。
    • 解决: 使用显式等待;如果是 iframe,需先使用 driver.switch_to.frame() 切换进去。
  • 被网站识别为爬虫:
    • 现象: 出现滑块验证码或直接被拦截。
    • 解决: Selenium 即使模拟浏览器,也会带有自动化特征(如 window.navigator.webdriver 属性为 true)。可以通过修改 ChromeOptions 隐藏特征,但高级反爬需要更复杂的技术对抗。
  • 忘记 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基础学习专栏

    赞(0)
    未经允许不得转载:171主机测评 » Python Web 自动化神器:Selenium 超详细入门教程 (Zero to Hero)
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址