在网页自动化领域,Selenium 和 Playwright 早已是开发者耳熟能详的工具。但今天要给大家介绍一款更轻量、更易用的 Python 库 ------DrissionPage 。它以 "融合 selenium 和 requests 优势" 为核心设计理念,既能像 requests 一样高效处理静态网页,又能像 selenium 一样操控动态页面,让网页爬取和自动化测试变得前所未有的简单。

一、DrissionPage 是什么?
DrissionPage 是由国内开发者开发的一款网页自动化工具,它的核心特点是 **"一体化"**:将 "静态请求" 与 "动态渲染" 两种操作模式无缝结合,无需在 requests 和 selenium 之间切换,就能轻松应对各种网页场景。
二、为什么选择 DrissionPage?
相比传统工具,DrissionPage 的优势非常明显:
- 极简 API :告别 Selenium 繁琐的初始化配置,一行代码即可启动浏览器或发送请求。
- 兼顾效率与交互 :静态页面用 requests 模式快速爬取,动态页面切换到浏览器模式处理,避免 "杀鸡用牛刀"。
- 强大的元素定位 :支持 CSS 选择器、XPath、文本、属性等多种定位方式,且语法更简洁。
- 内置反反爬机制 :自动处理部分反爬策略(如 User-Agent 随机化、Cookie 持久化)。
- 完整的文档支持 :中文文档详尽,对国内开发者友好,入门门槛低。
三、快速上手:DrissionPage 基础用法
1. 安装库
bash
pip install DrissionPage
2. 静态模式:爬取静态网页
适用于无需交互的静态页面(如新闻详情页、博客文章):
代码:
from DrissionPage import SessionPage
# 创建静态页面对象(基于requests)
page = SessionPage()
# 发送请求
page.get("https://www.baidu.com")
# 获取页面标题
print("页面标题:", page.title)
# 获取页面源码
html = page.html
# 用CSS选择器提取元素
search_input = page.ele("#kw") # 定位百度搜索框print("搜索框默认值:", search_input.attr("value"))
3. 动态模式:操控浏览器
适用于需要交互的动态页面(如登录、表单提交、JavaScript 渲染内容):
代码:
from DrissionPage import ChromiumPage
# 创建浏览器页面对象(默认启动Chrome)
page = ChromiumPage()
# 打开网页
page.get("https://www.baidu.com")
# 定位并输入搜索关键词
page.ele("#kw").input("DrissionPage")
# 点击搜索按钮
page.ele("#su").click()
# 等待页面加载完成
page.wait.load_start()
# 提取搜索结果
results = page.eles(".result a") # 获取所有结果链接
for i, result in enumerate(results[:5], 1):
print(f"结果{i}:{result.text},链接:{result.attr('href')}")
# 关闭浏览器
page.close()
4. 多开浏览器
使用ChromiumOptions对象的atuo_port()方法,可指定程序自动创建全新的浏览器,多个浏览器互不干扰。
代码:
from DrissionPage import ChromiumPage
# 创建浏览器页面对象(默认启动Chrome)
page = ChromiumPage()
# 打开网页
page.get("https://www.baidu.com")
# 定位并输入搜索关键词
page.ele("#kw").input("DrissionPage")
# 点击搜索按钮
page.ele("#su").click()
# 等待页面加载完成
page.wait.load_start()
# 提取搜索结果
results = page.eles(".result a") # 获取所有结果链接
for i, result in enumerate(results[:5], 1):
print(f"结果{i}:{result.text},链接:{result.attr('href')}")
# 关闭浏览器
page.close()
四、进阶技巧:让自动化更高效
1. 元素定位:多种方式灵活选择
DrissionPage 的元素定位语法非常灵活,支持多种方式:
代码:
# 1. CSS选择器(推荐)
page.ele("#username") # ID选择器
page.ele(".password") # 类选择器
page.ele("input[name='email']") # 属性选择器
# 2. XPath
page.ele("//div[@class='content']")
# 3. 文本内容(精确匹配)
page.ele("text=提交订单")
# 4. 部分文本匹配(模糊定位)
page.ele("text:包含('登录')")
# 5. 标签名
page.ele("tag:select")
2. 处理 iframe 和弹窗
无需切换上下文,直接定位嵌套元素:
代码:
# 定位iframe中的元素(自动切换到iframe上下文)
iframe_ele = page.ele("#iframe1").ele("#username")
# 处理alert弹窗
alert = page.alert # 获取弹窗对象print(alert.text) # 打印弹窗内容
alert.accept() # 确认弹窗
3. 配置浏览器参数
自定义浏览器启动参数(如无头模式、代理):
代码:
from DrissionPage import ChromiumOptions, ChromiumPage
# 创建配置对象
co = ChromiumOptions()
co.set_headless(True) # 无头模式(不显示浏览器窗口)
co.set_proxy("http://127.0.0.1:8888") # 设置代理
co.add_argument("--disable-images") # 禁用图片加载
# 应用配置启动浏览器
page = ChromiumPage(co)
五、DrissionPage vs 其他工具
|--------------|--------------------------|--------------------------------|
| 工具 | 优势 | 劣势 |
| DrissionPage | 静态 / 动态无缝切换,API 简洁,学习成本低 | 生态相对较小,复杂场景案例较少 |
| Selenium | 生态成熟,支持多浏览器 | API 繁琐,配置复杂,速度较慢 |
| Playwright | 跨浏览器支持好,异步性能强 | 语法较新,与 requests 配合需额外处理 Cookie |
| requests | 速度快,轻量 | 无法处理 JavaScript 动态内容 |
官方文档链接:https://www.drissionpage.cn/