📌 一、核心定位:当爬虫遇见自动化,合二为一

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_nameid:id_name - 元素ID
  • class: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 返回元素所有属性的字典

🖱️ 四、浏览器模式专属技能(自动化核心)

当你在 WebPageDrissionPage(浏览器模式下),可以玩这些自动化操作:

# 精准点击那个“登录”按钮
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提速、偶尔切回浏览器破解复杂验证码的场景优化利器。

📚 六、腿部挂件:学习资源导航

📌 七、精华速记卡(高频命令一览)

操作目的 代码示例 备注
访问网址 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. 轻装上阵,效率就是你的通行证。