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

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

介绍 DrissionPage 这款 Python 网页自动化工具,融合浏览器与 HTTP 请求模式。涵盖环境搭建、基础操作、元素定位、智能等待、混合模式实战及反爬策略。通过知乎热榜采集案例展示完整流程,并提供性能优化与常见问题排查指南,帮助开发者高效处理动态网页数据抓取任务。

SqlMaster发布于 2026/3/28更新于 2026/9/1074 浏览
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 自动化创作流程
  • Python 基于 Selenium 实现淘宝购物车自动结算脚本
  • Java Maven 项目结合 Git 与 Jenkins 的自动化构建部署指南
  • Vue 3 常用编程技巧整理
  • Dify 工作流发布为 MCP Server 实战指南
  • LeetCode 3315. 构造最小位运算数组 II 位运算解法
  • CCF-GESP 二级 C++ 真题解析:绘制菱形图案
  • Kimi 与豆包学术助手对比:AI 写作与降重效果实测分析
  • AI 辅助小说创作:三步心法与十款工具实测
  • 前端 AI 与营销增长:AI 应用的核心趋势与实战价值
  • OpenClaw 核心逻辑解析:从对话到执行的数字员工范式
  • OpenClaw:开源 AI 智能体框架架构、部署与安全分析
  • KWDB 3.1.0 进阶实战:千万级写入、监控与运维指南
  • Spring Boot RESTful API 开发实战与测试指南
  • Spring Boot 消息队列与异步通信实战
  • PyTorch 文本引导图像生成与 Stable Diffusion 实践
  • 一维与二维前缀和的常用写法
  • 三款主流云电脑部署 DeepSeek 模型性能对比评测
  • 基于 n8n 与 AI 模型的智能写作工作流实战指南
  • 无需拓展插件:Copilot 接入第三方 OpenAI 接口方案

相关免费在线工具

  • 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