跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python

DrissionPage 使用教程:Python 动态网页自动化实战

DrissionPage 是融合浏览器自动化与 HTTP 请求的 Python 工具。文章涵盖环境搭建、双模式操作(ChromiumPage 与 SessionPage)、元素定位、智能等待及反爬策略。通过知乎热榜采集案例展示混合模式应用,并提供性能优化与常见问题排查指南,帮助开发者高效处理动态网页数据抓取任务。

赛博行者发布于 2026/2/12更新于 2026/10/24101 浏览
DrissionPage 使用教程:Python 动态网页自动化实战

一、初识 DrissionPage:新时代网页自动化利器

1.1 什么是 DrissionPage?

DrissionPage 是一款基于 Python 的全能型网页自动化工具,创新性地将浏览器自动化与直接 HTTP 请求两大模式完美融合。它不仅具备 Selenium 的动态页面处理能力,还拥有 requests 的高效特性,堪称爬虫开发者的瑞士军刀。

1.2 为什么选择 DrissionPage?
特性传统方案DrissionPage
浏览器驱动依赖需要 ChromeDriver无需额外驱动
动态页面处理仅浏览器模式双模式协同作战
执行效率较慢智能提速 50%+
反爬对抗能力较弱内置指纹伪装
代码复杂度高极简 API 设计

二、环境搭建:5 分钟快速上手

2.1 安装核心库
# 安装最新稳定版
pip install DrissionPage
# 升级到最新开发版
pip install DrissionPage --upgrade
2.2 浏览器内核配置(可选)
from DrissionPage import ChromiumOptions

# 自动下载并配置 Chromium
co = ChromiumOptions().auto_install()

# 高级配置示例(无头模式 + 中文语言)
co.set_headless(True)
co.set_lang('zh-CN')

三、浏览器模式实战:动态页面全掌控

3.1 基础操作四部曲
from DrissionPage import ChromiumPage

# 初始化浏览器(可视化模式)
page = ChromiumPage(addr_driver_opts=co)

# 访问目标网站
page.get('https://www.zhihu.com')

# 定位搜索框并输入关键词
search_box = page.ele('#Popover1-toggle')
search_box.input('人工智能')

# 点击搜索按钮
search_btn = page.ele('xpath://button[@type="submit"]')
search_btn.click()
3.2 元素定位十八般武艺
定位方式示例代码适用场景
CSS 选择器page.ele('#main > .title')精确层级定位
XPathpage.ele('//div[@class="card"]')复杂结构定位
文本定位page.ele('text:热门话题')模糊匹配内容
正则表达式page.ele('text:^\\d+月榜单$')模式匹配内容
链式定位page.ele('#header').ele('.logo')分步缩小范围
3.3 智能等待:告别 time.sleep
# 显式等待元素出现(最多 10 秒)
answer_div = page.wait.ele_loaded('.AnswerItem', timeout=10)

# 等待页面跳转完成
page.wait.load_start()

# 等待 Ajax 加载完成
page.wait.ajax_load('//div[@class="comment-list"]')

四、HTTP 模式:闪电战数据抓取

4.1 基础请求示例
from DrissionPage import SessionPage

session = SessionPage()

# 发送 GET 请求
session.get('https://api.zhihu.com/topstory')

# 自动解析 JSON
print(session.json['data'][0]['title'])
4.2 高级请求配置
# 自定义请求头
session.headers = {
    'Referer': 'https://www.zhihu.com',
    'X-Requested-With': 'XMLHttpRequest'
}

# 设置代理
session.proxies = {'http': 'http://127.0.0.1:1080'}

# 文件下载
session.download('https://example.com/report.pdf', './data')

五、双剑合璧:混合模式实战

5.1 动态参数抓取流程
# 浏览器模式获取动态 token
page.get('https://m.weibo.cn')
token = page.ele('meta[name="csrf"]').attr('content')

# 切换到 HTTP 模式批量抓取
session = SessionPage()
for page_num in range(1, 6):
    url = f'https://m.weibo.cn/api/feed?token={token}&page={page_num}'
    session.get(url)
    print(session.json['data'])
5.2 登录态保持技巧
# 浏览器模式登录
page.get('https://passport.zhihu.com/login')
page.ele('#username').input('[email protected]')
page.ele('#password').input('your_password')
page.ele('button[type="submit"]').click()

# 同步 Cookie 到 HTTP 模式
session.cookies = page.cookies

# 使用共享登录态
session.get('https://www.zhihu.com/notifications')

六、反反爬策略大全

6.1 指纹伪装配置
co = ChromiumOptions()

# 修改浏览器指纹
co.set_user_agent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36')
co.set_platform('Win32')
co.set_resolution(1920, 1080)

# 禁用 WebRTC
co.set_argument('--disable-webrtc')
6.2 流量特征优化
# 随机化操作间隔
import random
page.set.click_options(interval=(0.5, 2))

# 模拟人类滚动
page.scroll.to_bottom(step=300, duration=1.5)

七、企业级实战案例:知乎数据采集

7.1 需求分析
  • 目标:采集知乎热榜前 50 问题
  • 字段:标题、热度值、回答数、创建时间
  • 难点:动态加载、登录验证、反爬机制
7.2 完整实现代码
from DrissionPage import ChromiumPage
from time import sleep
import pandas as pd

def get_zhihu_hot():
    page = ChromiumPage()
    page.get('https://www.zhihu.com/hot')
    results = []
    for _ in range(5):
        items = page.eles('.HotItem')
        for item in items:
            title = item.ele('.HotItem-title').text
            heat = item.ele('.HotItem-metrics').text
            answers = item.ele('text:回答').parent().text.split()[0]
            time = item.ele('.HotItem-time').text
            results.append({
                '标题': title,
                '热度': heat,
                '回答数': answers,
                '发布时间': time
            })
        if page.wait.ele_loaded('.Pagination-next', timeout=3):
            page.ele('.Pagination-next').click()
            page.wait.load_start()
        else:
            break
    df = pd.DataFrame(results)
    df.to_excel('知乎热榜.xlsx', index=False)

if __name__ == '__main__':
    get_zhihu_hot()

八、性能优化指南

8.1 浏览器模式优化
# 禁用非必要资源加载
page.set.load_mode.images(False)  # 关闭图片
page.set.load_mode.scripts(False)  # 关闭 JavaScript

# 内存优化
page.set.memory_limit('80%')  # 限制内存使用
8.2 HTTP 模式优化
# 启用连接池
session.set.pool_size(10)

# 自动重试配置
session.set.retry_times(3)  # 重试次数
session.set.retry_interval(5)  # 重试间隔(秒)

九、常见问题排查

9.1 元素定位失败
  • ✅ 检查元素是否在 iframe 中
  • ✅ 确认页面加载已完成(使用 wait 方法)
  • ✅ 尝试更换定位策略(优先使用 CSS 选择器)
9.2 请求被拦截
  • ✅ 检查请求头完整性(特别是 Referer 和 Origin)
  • ✅ 添加随机延迟(0.5-3 秒)
  • ✅ 使用高质量代理 IP

目录

  1. 一、初识 DrissionPage:新时代网页自动化利器
  2. 1.1 什么是 DrissionPage?
  3. 1.2 为什么选择 DrissionPage?
  4. 二、环境搭建:5 分钟快速上手
  5. 2.1 安装核心库
  6. 安装最新稳定版
  7. 升级到最新开发版
  8. 2.2 浏览器内核配置(可选)
  9. 自动下载并配置 Chromium
  10. 高级配置示例(无头模式 + 中文语言)
  11. 三、浏览器模式实战:动态页面全掌控
  12. 3.1 基础操作四部曲
  13. 初始化浏览器(可视化模式)
  14. 访问目标网站
  15. 定位搜索框并输入关键词
  16. 点击搜索按钮
  17. 3.2 元素定位十八般武艺
  18. 3.3 智能等待:告别 time.sleep
  19. 显式等待元素出现(最多 10 秒)
  20. 等待页面跳转完成
  21. 等待 Ajax 加载完成
  22. 四、HTTP 模式:闪电战数据抓取
  23. 4.1 基础请求示例
  24. 发送 GET 请求
  25. 自动解析 JSON
  26. 4.2 高级请求配置
  27. 自定义请求头
  28. 设置代理
  29. 文件下载
  30. 五、双剑合璧:混合模式实战
  31. 5.1 动态参数抓取流程
  32. 浏览器模式获取动态 token
  33. 切换到 HTTP 模式批量抓取
  34. 5.2 登录态保持技巧
  35. 浏览器模式登录
  36. 同步 Cookie 到 HTTP 模式
  37. 使用共享登录态
  38. 六、反反爬策略大全
  39. 6.1 指纹伪装配置
  40. 修改浏览器指纹
  41. 禁用 WebRTC
  42. 6.2 流量特征优化
  43. 随机化操作间隔
  44. 模拟人类滚动
  45. 七、企业级实战案例:知乎数据采集
  46. 7.1 需求分析
  47. 7.2 完整实现代码
  48. 八、性能优化指南
  49. 8.1 浏览器模式优化
  50. 禁用非必要资源加载
  51. 内存优化
  52. 8.2 HTTP 模式优化
  53. 启用连接池
  54. 自动重试配置
  55. 九、常见问题排查
  56. 9.1 元素定位失败
  57. 9.2 请求被拦截

更多推荐文章

查看全部
  • OpenClaw 飞书机器人配置指南:多渠道 AI 助手集成
  • OpenClaw gateway start 报 401 Invalid API key 环境变量配置问题
  • Pyglet:Python 游戏与多媒体开发入门
  • 上手 Llama 3:推理与 LoRA 微调实践
  • 微软 Copilot Cowork 解析:基于 Kotlin 构建 AI Agent
  • OpenAI 发布 GPT-5 系列:标准版、Mini 与 Nano 解析
  • Whisper v0.2 语音转文字工具安装与使用指南
  • DeerFlow 2.0:字节开源的超级 Agent 框架
  • 基于 uni-app 与 AI 辅助开发扫码点餐小程序
  • 使用 LLaMA-Factory 进行大语言模型微调详解
  • 前端开发一天通常能完成多少个页面?
  • 深入理解 Java 虚拟机 (JVM) 核心原理
  • IDEA/WebStorm 切换分支方法
  • 国内环境下 Git 极速安装与镜像加速配置指南
  • WebSocket 与 MQTT 即时通讯协议对比与架构选型指南
  • Rust Cow 详解:写时复制机制与性能优化
  • 企业电子招标采购管理系统功能与技术架构
  • 机器人 URDF 建模与 Isaac Sim 仿真集成指南
  • Flutter 实现 TabBar 主菜单功能开发指南
  • GitHub Copilot:Python 开发者的 AI 助手

相关免费在线工具

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online