📌 一、核心定位:当爬虫遇见自动化,合二为一
DrissionPage 给我的第一印象是「务实」。它聪明地把 Python 中两个重量级库 requests(静态抓取) 和 selenium(浏览器操控) 的优点融合了。用一套几乎一致的 API 命令,就能搞定两种最常见的数据获取场景,避免了来回切换工具的麻烦。
几个直击痛点的优势:
- 两套引擎,一个入口:
SessionPage(静态线程,类似Requests) 和WebPage(浏览器驱动,类似Selenium) 随心切换,甚至能在一个实例DrissionPage()里智能自动切换。 - 查找元素像翻书一样自然: 它采用了类似 BeautifulSoup 的类 HTML DOM 遍历方式,定位元素语法比原生 Selenium 的
find_element_by_xxx直观太多。 - 低冗余、高统一: 不管页面是静态HTML还是JS动态渲染,操作元素的命令是完全一致的(
ele(),eles(),.text,.click()等)。
🚀 二、初窥门径:14行代码入门
1️⃣ 安装建议
pip install drissionpage
说句实在的: 想用浏览器模式做爬取,强烈配合
undetected_chromedriver。它对付反爬基础检测更稳,安装指令是pip install undetected_chromedriver.
2️⃣ 初始化(选你最顺手的方式)
from drission import DrissionPage, WebPage, SessionPage
# 懒人全能版 (推荐,根据场景自动选模式)
dp = DrissionPage()
# 精准控制版
wp = WebPage() # 专门操作浏览器(模拟点击、填表单等)
sp = SessionPage() # 纯HTTP请求,速度快如疾风
🔧 三、基础三板斧
1. 开门:访问页面
dp.get('https://example.com') # 自动模式根据URL识别最优方式
# wp.get('...') # 明确浏览器模式
# sp.get('...') # 明确静态模式
个人选择逻辑: 面对纯API、静态页、大并发,选
SessionPage;看到满天飞的JS渲染,需要模拟交互,果断WebPage。
2. 定位:精准揪出元素(核心优势)
# 查找单个元素 - 语法糖拉满
title = dp.ele('tag:h1@class="main-title"') # CSS选择器思路:标签h1且class="main-title"
login_btn = dp.ele('text:登录') # 按可见文字精准定位
search_box = dp.ele('@id="searchInput"') # 简洁版ID定位 (@相当于id:)
# 查找元素列表
items = dp.eles('tag:li@class=product-item') # 所有符合条件的li元素
支持的定位方式够用且简洁:
tag:div- HTML标签@id_name或id:id_name- 元素IDclass:class_name- CSS类名text:部分或全文- 文本匹配(超实用!)css:selector- 完整CSS选择器xpath:xpath_expression- XPath表达式
✅ 关键体验: 这套语法不受底层是 requests 还是 selenium 的影响,学习成本骤降。
3. 提取:拿到你想要的数据
print(title.text) # 获取元素内文本:"欢迎光临"
print(title.html) # 获取元素的完整HTML源码
print(search_box.attr('name')) # 获取特定属性值,如 'q'
# .attrs 返回元素所有属性的字典
🖱️ 四、浏览器模式专属技能(自动化核心)
当你在 WebPage或 DrissionPage(浏览器模式下),可以玩这些自动化操作:
# 精准点击那个“登录”按钮
login_btn.click()
# 在搜索框填写关键词
search_box.input('DrissionPage教程') # 自动清理原内容并输入
# 笃定地等待“验证成功”提示出现(超时10秒)
dp.wait.ele_display('text:验证成功', timeout=10)
🧠 五、翻出你的小本本:实用进阶技巧
1. 浏览器隐身术:参数设置
from drission import ChromiumOptions # 专管浏览器配置
co = ChromiumOptions()
co.set_paths(browser_path='/path/to/chrome') # 指定Chome执行路径
co.headless() # 开启无头模式,后台运行
co.set_download_path('documents/') # 文件默认保存位置(超省心)
co.set_argument('--incognito') # 无痕模式,减少干扰
wp = WebPage(coordinator=co) # 使用配置好的选项创建浏览器
避坑指南:
set_download_path()提前设好路径,能规避下载对话框,实现后台静默下载。
2. 信息复用:状态捕获
current_cookies = wp.cookies # 获取此行代码执行时浏览器的所有Cookies
req_headers = wp.headers # 获取当前请求头 (可用于SessionPage模拟)
实用场景: 在浏览器采摘细火慢炖获取完登录Cookies后,导入到
SessionPage利用cookie飞速访问后续接口与页面。
3. 📊 场景匹配建议(我的决策树)
| 任务类型 | 首选模式 | 为什么 |
|---|---|---|
| 纯 API 接口调用 | SessionPage |
速度碾压,资源消耗低 |
| 页面大量 JS 动态渲染 | WebPage |
无头浏览器才能“看到”全部内容 |
| 网页自动签到/操作 | WebPage |
需要模拟人工点击、输入、跳转 |
| 大批量抓取固定HTML | SessionPage |
速度至上,处理简单页面没压力 |
模式切换灵活自如:
# 同一个 `dp` 对象中 (DrissionPage),能随时按需变身:
dp.set_driver_mode('web') # 启动或切换到浏览器驱动
dp.set_driver_mode('session') # 关闭浏览器,切换回轻量HTTP模式
实际体会: 处理登录后用Session提速、偶尔切回浏览器破解复杂验证码的场景优化利器。
📚 六、腿部挂件:学习资源导航
- 项目源头:GitHub - g1879/drissionpage - 看源码,提Issue
- 官方手册:中文文档站 - 最系统全面的语法讲解,必看!
- 案例库(官方):教程合集 (Gitee) - 提供真实场景脚本参考(如登录某站、批量下载)
📌 七、精华速记卡(高频命令一览)
| 操作目的 | 代码示例 | 备注 |
|---|---|---|
| 访问网址 | dp.get('https://target.com') |
自动模式智能选择 |
| 精准定位 | el = dp.ele('text:提交') |
@id / class: / css:均可 |
| 提取文本 | content = el.text |
获取可见文字 |
| 触发点击 | el.click() |
|
| 模拟填报 | el.input('姓名') |
适用于输入框 |
| 批量捕获 | els = dp.eles('.item') |
返回符合条件的元素列表 |
| 保存文件 | wp.download(file_url, '路径/') |
WebPage/DrissionPage浏览器模式 |
| 引擎切换 | dp.set_driver_mode('session') |
'web'切至浏览器,'session'变静态 |
对于厌倦了在 requests 速度与 selenium 全能间反复横跳的开发者,DrissionPage 就是那条「中庸之道」。它提供了一种清爽思路:统一接口,按需调用底层引擎,让爬虫与自动化脚本更加清晰可预期。从内部封装来看,它的设计逻辑真的很 Pythonic —— Simple is better than complex. 轻装上阵,效率就是你的通行证。
评论