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

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

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

SqlMaster发布于 2026/3/28更新于 2026/7/2448 浏览
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()
search_btn.click()
'人工智能'
# 点击搜索按钮
'xpath://button[@type="submit"]'
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 请求被拦截
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 编译型与解释型语言:核心原理、区别与应用场景
  • Windows 安装 Neo4j 图数据库详细教程
  • 绿豆 UI9 源码支持 Python 线路与弹幕解析功能介绍
  • 10 款主流网络爬虫工具对比评测:从 Scrapy 到 Bright Data 选型指南
  • 飞算 JavaAI:Java 开发的智能助推引擎
  • SM4 国密算法原理与 C++跨平台实现详解
  • Spring Data JPA 原理与实战:Repository 接口深度解析
  • GitHub 学生开发者认证指南与配置流程
  • AI 交互上下文溢出解决方案:会话压缩技术实现解析
  • 大模型基于 llama.cpp 量化详解
  • OpenCode:开源版 Claude Code 体验与配置指南
  • 算法面试:C++ 数组去重与位运算核心解析
  • Git 分布式版本控制:安装、配置与实战
  • SageMaker 部署 AIGC 应用:训练、优化、部署及 Web 前端集成
  • Spring Cloud Alibaba 集成 SkyWalking 全链路追踪实战
  • 语音交互实战:基于 WebRTC 与 AI 接口构建实时语音对话系统
  • FPGA 常用音视频协议(DP、HDMI、USB4、GPMI、eDP、LVDS)性能对比
  • Windows 系统 Python 详细安装教程与配置指南
  • Stable Diffusion WebUI 落幕:从表单到节点的 AIGC 工具演进
  • Homebrew 在 Mac 上的安装与使用指南

相关免费在线工具

  • 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