Python Selenium 超详细新手教程:从零开始掌握浏览器自动化

以下是 Python + Selenium 超详细新手教程(2026 年最新版):从零开始掌握浏览器自动化。

这份教程基于 Selenium 4.40+(2026 年 1 月最新稳定版)和 Python 3.12/3.13,重点解决新手最痛的几个问题:

  • 驱动安装不再手动下载(Selenium Manager 自动搞定)
  • headless / 无头模式 / 绕过检测
  • 常见元素定位、等待、交互、异常处理
  • 真实项目场景示例(登录、爬取、表单填写、截图等)

0. 为什么 2026 年还在学 Selenium?

  • 动态 JS 页面、复杂交互、文件上传、验证码绕过等场景,Playwright / Puppeteer 虽快,但 Selenium 生态最成熟、职位最多、云测试平台支持最好。
  • Selenium Manager(4.6+ 内置)让安装难度大幅降低,新手友好度暴涨。

1. 环境准备(5 分钟搞定)

步骤 1:安装 Selenium(包含 Selenium Manager)

pip install --upgrade selenium # 推荐额外安装(方便调试、等待、日志) pip install webdriver-manager # 可选,Selenium Manager 已够用,但有时更稳定

步骤 2:验证安装

from selenium import webdriver print(webdriver.__version__)# 应该 ≥ 4.40.0

2026 年关键变化

  • Selenium 4.6+ 内置 Selenium Manager(Rust 实现),自动下载匹配你浏览器版本的 chromedriver/geckodriver/msedgedriver 等。
  • 不再需要手动去 chromedriver.chromium.org 下载驱动,也不用放 PATH。

2. 第一个程序:打开浏览器 + 访问页面

from selenium import webdriver from selenium.webdriver.chrome.options import Options # ------------------- 方式一:最简单(推荐新手) ------------------- driver = webdriver.Chrome()# 自动使用 Selenium Manager 下载驱动 driver.get("https://www.python.org")print(driver.title)# Python.org 标题 driver.quit()# 必须关闭,否则进程残留

方式二:无头模式(headless)——后台运行,不弹出窗口

options = Options() options.add_argument("--headless=new")# 现代无头模式(Chrome 109+ 推荐) options.add_argument("--disable-gpu")# 部分系统需要 options.add_argument("--no-sandbox")# Linux / Docker 常见 options.add_argument("--disable-dev-shm-usage") driver = webdriver.Chrome(options=options) driver.get("https://www.google.com")print(driver.page_source[:200])# 输出部分 HTML driver.quit()

方式三:加一些防检测参数(爬虫/防反爬常用)

options = Options() options.add_argument("--headless=new") options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36") options.add_experimental_option("excludeSwitches",["enable-automation"]) options.add_experimental_option('useAutomationExtension',False) driver = webdriver.Chrome(options=options)

3. 核心概念:元素定位(8 大主流方式)

定位方式语法示例适用场景优先级建议
idfind_element(By.ID, “kw”)最高优先,唯一性强★★★★★
namefind_element(By.NAME, “wd”)表单 input name★★★★☆
class namefind_element(By.CLASS_NAME, “s_ipt”)单个 class★★★☆☆
tag namefind_elements(By.TAG_NAME, “a”)找所有链接/按钮★★☆☆☆
link textfind_element(By.LINK_TEXT, “新闻”)精确匹配超链接文字★★★☆☆
partial link textfind_element(By.PARTIAL_LINK_TEXT, “新”)模糊匹配链接文字★★☆☆☆
css selectorfind_element(By.CSS_SELECTOR, “#kw”)
.s_ipt
input[type=‘text’]
最强大、最快、推荐掌握★★★★★
xpathfind_element(By.XPATH, “//*[@id=‘kw’]”)
//input[@name=‘wd’]
最灵活,但慢、易碎★★★★☆

推荐顺序(2026 年最佳实践):
ID > name > css > xpath(最后用) > class > link text

代码示例(百度搜索)

from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys import time driver = webdriver.Chrome() driver.get("https://www.baidu.com")# 定位搜索框(多种写法等价) search_box = driver.find_element(By.ID,"kw")# search_box = driver.find_element(By.NAME, "wd")# search_box = driver.find_element(By.CSS_SELECTOR, "#kw")# search_box = driver.find_element(By.XPATH, "//input[@id='kw']") search_box.clear()# 清空 search_box.send_keys("Python Selenium 教程") search_box.send_keys(Keys.ENTER)# 回车搜索 time.sleep(3)# 粗暴等待(后面学智能等待)print(driver.title) driver.quit()

4. 必须掌握:显式等待(WebDriverWait)——避免 sleep 地狱

from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC wait = WebDriverWait(driver, timeout=10, poll_frequency=0.5)# 每0.5秒检查一次,最多等10秒# 等待元素可见 wait.until(EC.visibility_of_element_located((By.ID,"result_logo")))# 等待元素可点击 wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,".btn.btn-primary")))# 等待标题包含某文字 wait.until(EC.title_contains("Python"))

常用 EC(expected_conditions)

  • visibility_of_element_located
  • presence_of_element_located(在 DOM 中即可,不必可见)
  • element_to_be_clickable
  • text_to_be_present_in_element
  • title_is / title_contains
  • staleness_of(元素消失)

5. 常见交互操作汇总

element = driver.find_element(By.ID,"su") element.click()# 点击 element.send_keys("输入内容")# 输入 element.clear()# 清空输入框 element.get_attribute("value")# 获取 value 属性 element.text # 获取显示文本 element.is_displayed()# 是否可见 element.is_enabled()# 是否可用 element.is_selected()# radio/checkbox 是否选中# 浏览器操作 driver.back() driver.forward() driver.refresh() driver.maximize_window() driver.set_window_size(1200,800) driver.save_screenshot("baidu.png")# 截图

6. 窗口/iframe/警报处理

# 切换窗口(多标签) handles = driver.window_handles driver.switch_to.window(handles[1])# 切换到第二个标签# 切换 iframe driver.switch_to.frame("iframe_id_or_name_or_element") driver.switch_to.default_content()# 切回主文档# 处理 alert/confirm/prompt alert = driver.switch_to.alert alert.accept()# 确认 alert.dismiss()# 取消 alert.text # 获取弹窗文字 alert.send_keys("输入")# prompt 输入

7. 真实项目小实战:自动登录某网站(伪代码)

driver = webdriver.Chrome() wait = WebDriverWait(driver,15) driver.get("https://example.com/login") wait.until(EC.presence_of_element_located((By.NAME,"username"))).send_keys("your_account") driver.find_element(By.NAME,"password").send_keys("your_pass") driver.find_element(By.CSS_SELECTOR,"button[type='submit']").click()# 等待登录成功(例如个人中心元素出现) wait.until(EC.presence_of_element_located((By.CLASS_NAME,"user-avatar")))print("登录成功!") driver.save_screenshot("login_success.png")

8. 常见报错 & 解决方案(2026 年高频)

错误原因 & 解决办法
NoSuchDriverException浏览器版本与驱动不匹配 → 升级 selenium 或用 webdriver-manager 强制更新
ElementNotInteractableException元素被遮挡/不可见 → 加等待 + scrollIntoView 或 ActionChains 移动鼠标
StaleElementReferenceException页面刷新后元素失效 → 重新定位元素,不要缓存 element
TimeoutException等待超时 → 延长 timeout 或检查 locator 是否正确
SessionNotCreatedException驱动版本错 → Selenium Manager 自动处理,若失败:options.add_argument(“–headless=new”)
undetected-chromedriver 检测网站强反爬 → 用 undetected-chromedriver 库(pip install undetected-chromedriver)

9. 进阶方向建议(学完基础后)

  • Page Object Model(POM)设计模式
  • pytest + selenium 集成(推荐测试框架)
  • 处理验证码(OCR / 人工打码平台)
  • 多线程/分布式(selenium-grid)
  • 结合 Playwright 迁移(未来趋势)
  • headless + proxy + user-agent 随机 → 爬虫防封

一句话总结
2026 年 Selenium 安装几乎零成本(Selenium Manager 功不可没),学会 显式等待 + CSS 定位 + POM,你就基本能应对 90% 的浏览器自动化需求。

有哪部分还想再细讲?
例如:

  • 如何处理滑块验证码
  • POM 完整项目模板
  • headless + 绕过 Cloudflare / Akamai
  • pytest + allure 报告

随时告诉我,我继续展开~

Read more

VibeBlog-AI 时代个人博客Agent项目开源之路[9]: 基于ui-ux-pro-max 的前端重新设计

VibeBlog-AI 时代个人博客Agent项目开源之路[9]: 基于ui-ux-pro-max 的前端重新设计

开篇先介绍自己的开源项目vibe-blog, 一个基于多 Agent 架构的 "长文专业博客"的创作助手,支持深度调研、智能配图、Mermaid 图表、代码集成等写作能力,简化写作的重复劳动, 让写作更有趣. 我基于它已经创作了一个面向大模型应用开发者的微调(Fine-tuning)技术全栈教程Hello-LLM-FineTuning, 40 万字,100+章配图. 感兴趣的同学可以了解下,如果该项目对你有用, 欢迎 star🌟 & fork🍴 Vibe-Blog开源项目地址: https://github.com/datawhalechina/vibe-blog 先看前端重构效果: 怎么样😄, 还可以吧, 程序员的终端风格, 我超级喜欢! 缘起 Vibe-Blog 已经具备了一键生成长文博客的能力, 也支持异步创作的能力,即你可以直接将你想要创作博客的想法直接扔给 Vibe-Blog, 然后就可以去忙其他的了, 等过一段时间它自己生成好了, 你可以直接阅读他的成果, 也可以发布到一些博客平台上, 比如

By Ne0inhk
前端实战:手把手教你实现浏览器通知功能

前端实战:手把手教你实现浏览器通知功能

前端入门:浏览器通知功能从0到1实现指南 作为前端学习者,你可能见过这样的场景:打开网页版聊天工具,就算把浏览器最小化,桌面也会弹出“新消息”提醒;或者某些网站的活动通知,会直接显示在电脑/手机桌面上。这种功能就是「浏览器桌面通知」,今天我们就从零开始,搞懂它、学会用它。 一、先搞懂3个基础问题 1. 什么是浏览器桌面通知? 简单说,就是网页能在浏览器窗口外面(比如电脑桌面、手机屏幕)给你发提醒。哪怕浏览器最小化、甚至页面切到后台,只要权限允许,都能收到通知,不用一直盯着网页。 2. 什么时候会用到它? 常见场景很贴近日常: * 网页版微信/QQ的新消息提醒; * 工作系统的审批提醒、任务到期通知; * 电商网站的订单状态更新(比如“你的快递已发货”); * 新闻/小说网站的订阅内容更新提醒。 3. 用起来难吗?有什么限制? 不难!核心就2步:先让用户同意开启通知(申请权限)

By Ne0inhk
【最新版】防伪溯源一体化管理系统+uniapp前端+搭建教程

【最新版】防伪溯源一体化管理系统+uniapp前端+搭建教程

一.介绍 防伪溯源一体化管理系统基于ThinkPHP和Uniapp进行开发的多平台(微信小程序、H5网页)溯源、防伪、管理一体化独立系统,拥有强大的防伪码和溯源码双码生成功能(内置多种生成规则)、批量大量导出防伪和溯源码码数据、支持代理商管理端(团队管理、采购,邀请代理商、出库等功能)、支持招商经理管理端(可管理代理商团队,邀请代理商,数据统计,采购订单统计),支持出厂员端(出库、入库)、文章资讯、自定义展示查询页显示数据、查询记录、溯源记录追踪等功能。前后端无加密源代码和数据库,独立部署。 二.搭建环境 系统环境:CentOS、 运行环境:宝 塔 Linux 网站环境:Nginx 1.2.22 + MySQL 5.6 + PHP-7.4 常见插件:fileinfo

By Ne0inhk
全Web化智慧PACS/RIS系统源码 (纯B/S架构)

全Web化智慧PACS/RIS系统源码 (纯B/S架构)

告别传统C/S架构的笨重客户端!本套源码采用纯Web前端技术实现极速调阅,支持CT、核磁(MR)、DR、超声等多模态影像。内置专业级Web Viewer,支持MPR多平面重建、MIP、VR体渲染。自带RIS全流程管理。100%无加密源码交付,是医疗软件公司打造云PACS、区域影像中心的核心利器! 一、 为什么医疗企业都在寻找真正的WebPACS? 传统的PACS系统多采用C++或C#开发,需要医生在电脑上一台台安装庞大的客户端,维护成本极高,且无法适应如今“互联网医院”和“医共体远程诊断”的需求。 * 极速跨平台: 本系统基于HTML5+WebGL技术,医生只需打开浏览器,即可实现秒级加载百兆级影像,支持Windows、Mac甚至iPad移动阅片。 * 省去百万研发费: 医疗影像的底层解析(如窗宽窗位调节、各种DICOM Tag解析、图像无损压缩算法)是深水区,直接购买本源码,省去2-3年以上的底层图形学研发周期。 * 高价值变现: 本源码不仅可独立作为医院影像科管理系统出售,更可作为“影像插件”

By Ne0inhk