1. DrissionPage 简介 #
- DrissionPage 是 Python 的网页自动化库,可以同时做浏览器控制和HTTP 请求。
- 控制浏览器时类似 Selenium,发请求时类似 requests,语法比 Selenium 更简洁。
- 项目里最常用的是
ChromiumPage(操作 Chrome/Edge)和 SessionPage(纯请求,不启动浏览器)。
- 适合场景:自动填表、批量采集数据、下载页面资源、简单爬虫脚本。
- 需要执行 JavaScript 或模拟真实点击的页面,用
ChromiumPage;纯静态页面可优先用 SessionPage,速度更快。
2. 安装与快速入门 #
- 使用前安装 DrissionPage,并确保本机已安装 Chrome 或 Edge 浏览器。
- 推荐 Python 3.8 及以上版本。
- 下面按「安装 → 导入 → 浏览器配置 → 跑通第一个脚本」的顺序入门。
2.1 安装与导入 #
py -m pip install DrissionPage
ChromiumPage:启动浏览器,适合需要点击、输入、执行 JS 的场景。
SessionPage:只发 HTTP 请求,不打开浏览器,适合静态页面抓取。
from DrissionPage import ChromiumPage, SessionPage
2.2 浏览器路径设置 #
- 只用
SessionPage 时,无需配置浏览器。
- 使用
ChromiumPage 时,需确保能找到 Chrome/Edge 可执行文件。
- 下面脚本能正常打开页面,说明环境已就绪。
from DrissionPage import ChromiumPage
page = ChromiumPage()
page.get('https://www.baidu.com')
print('浏览器启动成功')
- 若提示找不到浏览器,在 Chrome 地址栏输入
chrome://version,复制「可执行文件」路径后执行:
from DrissionPage import ChromiumOptions
ChromiumOptions().set_browser_path(
r'C:\Program Files\Google\Chrome\Application\chrome.exe'
).save()
2.3 第一个自动化脚本 #
- 典型流程:
ChromiumPage() → get(url) → ele(选择器) → input() / click()。
ele() 自带等待(默认约 10 秒),元素未出现时会自动等,不必手动 sleep。
from DrissionPage import ChromiumPage
page = ChromiumPage()
page.get('https://www.baidu.com')
page.ele('#kw').input('DrissionPage')
page.ele('#chat-submit-button').click()
ChromiumPage() 创建浏览器对象。
get(url) 打开指定网址。
ele('#kw') 用 id 选择器定位搜索框。
ele('#chat-submit-button') 用ID选择器定位按钮。
input() 输入文字,click() 点击元素。
3. 元素查找 #
- 网页自动化里,定位元素是最核心的步骤,找不对元素后续操作都无法进行。
- 优先使用 DrissionPage 自带的简洁语法(
#、.、@、tag:),比复制 XPath 更易读。
- 查找方法只有两个:
ele() 找单个,eles() 找多个。
- 在已找到的元素上继续调用
ele() / eles(),表示在该元素内部查找(缩小范围)。
3.1 基本用法 #
from DrissionPage import ChromiumPage
page = ChromiumPage()
page.get('https://static.docs-hub.com/ysczdjbyf_1750214922342.html')
div1 = page.ele('#one')
p1 = page.ele('@name=row1')
div2 = page.ele('第二个div')
all_divs = page.eles('tag:div')
p_list = div1.eles('tag:p')
next_div = div1.next()
print(p1.text, next_div.text)
3.2 常用选择器 #
#id:按 id 匹配,如 #one。
.class:按 class 匹配,如 .p_cls。
@属性=值:属性精确匹配,如 @name=row1。
@属性:值:属性模糊匹配(包含),如 @class:p_cls。
tag:标签名:按标签匹配,如 tag:div、tag:a。
文本内容:按可见文本模糊匹配,如 ele('第二个div')。
- 复杂场景也支持
css: 和 xpath: 前缀,日常开发优先用上面几种即可。
from DrissionPage import ChromiumPage
page = ChromiumPage()
page.get('https://static.docs-hub.com/ysczdjbyf_1750214922342.html')
print(page.ele('#one'))
print(page.ele('.p_cls'))
print(page.ele('@name=row1'))
print(page.ele('@class:p_cls'))
print(page.ele('tag:p'))
print(page.ele('第二个div'))
3.3 用 SessionPage 抓取静态页 #
- 页面不需要 JS 渲染时,用
SessionPage 更轻量,无需启动浏览器。
- 用法与
ChromiumPage 相同: get() → ele() / eles() → 读 .text。
from DrissionPage import ChromiumPage
page = ChromiumPage()
page.get('https://gitee.com/explore')
page.wait.doc_loaded()
container = page.ele('tag:div@class:explore-repo__list', timeout=10)
titles = container.eles('tag:a@class:title project-namespace-path')
for t in titles:
print(t.text)
4. 元素操作 #
- 找到元素后,常用操作就是点击、输入、读取文本和属性。
eles() 返回列表,可遍历处理,也可用 get.texts() 一次性取所有文本。
- 查找自带等待;需要缩短或延长等待时,传
timeout 参数(单位:秒)。
- 找不到元素时返回空对象,用
if ele: 判断即可。
4.1 点击、输入与读取 #
click():点击按钮、链接等。
input(text):向输入框填入文字。
.text:获取元素可见文本。
.attr('属性名'):获取 href、src 等属性值。
from DrissionPage import ChromiumPage
page = ChromiumPage()
page.get('https://gitee.com/login')
page.ele('#user_login').input('your_username')
page.ele('#user_password').input('your_password')
page.ele('@name=commit').click()
4.2 批量获取元素 #
eles('tag:a') 获取所有链接,遍历后分别读取 .text 和 .attr('href')。
links.get.texts() 可一次拿到所有链接文字,适合批量提取。
from DrissionPage import SessionPage
page = SessionPage()
page.get('https://static.docs-hub.com/a_1783080368749.html')
links = page.eles('tag:a')
for link in links:
print(link.text, link.attr('href'))
print(links.get.texts())
4.3 等待与异常判断 #
ele('#id', timeout=5) 表示最多等待 5 秒,超时则视为未找到。
- 未找到时不要用元素方法,先
if ele: 判断。
from DrissionPage import ChromiumPage
page = ChromiumPage()
page.get('https://www.baidu.com')
ele = page.ele('#not_exist', timeout=3)
if not ele:
print('元素未找到')
else:
print(ele.text)
5. 常用场景 #
- 实际项目中,多标签切换和批量下载是最常见的两类需求。
- 多标签场景用
new_tab() 和 activate_tab() 管理。
- 批量下载时,先用
eles('tag:img') 拿到所有图片,再读取 src 下载。
5.1 多标签页切换 #
new_tab(url):新建标签页并打开网址,返回标签对象。
activate_tab(tab_id):切换到指定标签页。
page.title:获取当前标签页标题。
from DrissionPage import ChromiumPage
import time
page = ChromiumPage()
tab_baidu = page.new_tab('https://www.baidu.com')
tab_163 = page.new_tab('https://www.163.com')
time.sleep(1)
page.activate_tab(tab_baidu.tab_id)
print(page.title)
5.2 批量下载图片 #
- 用
eles('tag:img') 获取所有图片元素。
- 通过
img.attr('src') 拿到图片 URL,再用 requests 下载到本地。
import os
import requests
from DrissionPage import ChromiumPage
page = ChromiumPage()
page.get('https://static.docs-hub.com/8_1750232305740.html')
imgs = page.eles('tag:img')
os.makedirs('imgs', exist_ok=True)
for img in imgs:
url = img.attr('src')
filename = os.path.join('imgs', os.path.basename(url))
resp = requests.get(url)
with open(filename, 'wb') as f:
f.write(resp.content)
print(f'已下载: {filename}')
6. 常见问题 #
6.1 浏览器无法启动 #
- 确认本机已安装 Chrome 或 Edge。
- 检查 §2.2 的浏览器路径是否配置正确。
- 关闭所有已打开的 Chrome/Edge 窗口后重试。
6.2 找不到元素 #
- 确认选择器是否正确,可先在浏览器开发者工具(F12)里验证。
- 页面是否加载完成;动态内容可适当增大
timeout。
- 元素是否在 iframe 内;需先切换到对应 iframe 再查找。
6.3 SessionPage 与 ChromiumPage 怎么选 #
- 页面内容靠 JS 动态生成 → 用
ChromiumPage。
- 纯静态 HTML、接口返回的页面 → 优先用
SessionPage,更快更省资源。
- 不确定时先用
ChromiumPage,确认可行后再考虑换成 SessionPage 优化速度。
7. API 速查 #
| 操作 |
写法 |
| 创建浏览器页面对象 |
page = ChromiumPage() |
| 创建请求页面对象 |
page = SessionPage() |
| 打开网址 |
page.get(url) |
| 查找单个元素 |
page.ele('选择器') |
| 查找多个元素 |
page.eles('选择器') |
| 元素内查找 |
parent.ele('选择器') |
| 输入文字 |
ele.input('文字') |
| 点击 |
ele.click() |
| 获取文本 |
ele.text |
| 获取属性 |
ele.attr('href') |
| 批量取文本 |
eles.get.texts() |
| 设置等待 |
page.ele('#id', timeout=5) |
| 新建标签 |
page.new_tab(url) |
| 切换标签 |
page.activate_tab(tab_id) |
- 常用选择器:
#id、.class、@attr=value、tag:div、文本内容。
- 核心流程:
创建 page → get(url) → ele() → input() / click() / 读 .text。