DrissionPage 入门教程
常见问题与进阶指南
本教程共 42 篇 · 第 42 篇 · 更新于 2026-07-29 · 约 6 分钟阅读
DrissionPageDrissionPage 入门教程FAQ常见问题版本迁移进阶
42. 常见问题与进阶指南
本节目标:汇总常见错误和疑问,帮你避坑,同时指明继续学习的方向。
常见错误
找不到元素
现象:ele() 返回 NoneElement,或者报找不到元素的错误。
可能原因:
-
元素在 iframe 里
# 先获取 frame,再查找 frame = page.get_frame('#frameId') element = frame.ele('#elementId') -
元素还没加载出来
# 等待一下 page.wait.ele_display('#elementId', timeout=10) element = page.ele('#elementId') -
元素在 Shadow DOM 里
# 穿透 Shadow DOM shadow_root = page.ele('#hostElement').shadow_root element = shadow_root.ele('.shadow-element') -
选择器写错了
# 试试不同写法 element = page.ele('#id') element = page.ele('.className') element = page.ele('tag:div') element = page.ele('text=文本')
点击没反应
现象:click() 执行了,但页面没变化。
常见原因:
-
元素被遮挡
# 先滚动到可见区域 element.scroll.to_see() element.click() -
需要 JS 点击
# 用 JS 直接调用 click element.run_js('this.click()') -
元素还没可交互
# 等元素可点击 page.wait.ele_display('#btn') page.ele('#btn').click()
浏览器启动失败
现象:创建 ChromiumPage() 时报错。
解决方案:
- 浏览器版本不匹配:DrissionPage 会自动下载匹配的浏览器,确保网络畅通
- 端口被占用:换端口
from DrissionPage import ChromiumOptions co = ChromiumOptions() co.set_local_port(9222) # 指定调试端口 page = ChromiumPage(co) - 杀毒软件拦截:添加信任或临时关闭
输入中文乱码
现象:input('中文') 显示乱码。
解决:用模拟键盘方式输入。
element = page.ele('#input')
element.input('中文内容', by_js=False)
版本迁移
DrissionPage 从 3.x 升级到 4.x 有一些变化。
主要变化
- 包名调整:导入路径可能有变化
- API 重构:部分方法签名改了
- 类型提示:4.x 增强了 IDE 类型提示
迁移建议
- 先看官方更新日志:4.0 功能介绍
- 跑一遍现有测试,看看哪些报错
- 对照官方文档逐个修复
旧版兼容
一些旧版写法在 4.x 还能用,但会有警告:
# 旧版写法(仍可用但不推荐)
page.set_headers({'User-Agent': 'xxx'})
# 新版推荐写法
page.set.user_agent('xxx')
FAQ
DrissionPage 支持哪些浏览器?
支持基于 Chromium 的浏览器:Chrome、Edge、Vivaldi 等。
目前不支持 Firefox 和 Safari。
如何使用已安装的浏览器?
from DrissionPage import ChromiumOptions
co = ChromiumOptions()
co.set_browser_path(r'C:\Program Files\Google\Chrome\Application\chrome.exe')
page = ChromiumPage(co)
如何让浏览器不自动关闭?
# 创建页面后,不调用 quit()
page = ChromiumPage()
page.get('https://example.com')
# 脚本结束前保持运行
input('按回车退出...')
page.quit()
如何处理验证码?
几种思路:
- 第三方打码平台:超级鹰、2Captcha 等
- 手动输入:保存图片,人工识别
captcha = page.ele('#captchaImg') captcha.save('captcha.png') code = input('请输入验证码: ') page.ele('#captchaInput').input(code) - WebPage 模式绕过:部分验证码只在数据包请求时出现
脚本运行慢怎么优化?
- 不需要浏览器渲染时用 SessionPage
- 无头模式省资源
- 禁用图片加载
- 合理设置超时
- 及时释放不用的页面对象
co = ChromiumOptions()
co.headless() # 无头模式
co.no_imgs(True) # 禁用图片
co.set_timeouts(page_load=10, script=10)
page = ChromiumPage(co)
怎么处理反爬?
-
加随机延时
import random, time time.sleep(random.uniform(1, 3)) -
设置合理的请求头
page.set.user_agent('Mozilla/5.0 ...') -
用代理 IP
co = ChromiumOptions() co.set_proxy('http://proxy.example.com:8080') -
模拟正常用户行为
page.scroll.down(500) element.hover()
如何报告 Bug?
- GitHub Issues
- Gitee Issues
- QQ 交流群(见官方文档)
提交时请带上:版本号、Python 版本、系统信息、复现代码。
进阶学习建议
学完本教程,你已经掌握了 DrissionPage 的核心功能。
接下来可以深入这些方向:
1. 深入理解架构
- 了解 CDP(Chrome DevTools Protocol)
- 理解 WebPage 双模式的设计原理
- 学习会话管理和连接复用
2. 性能优化
- 无头部署到服务器
- 多进程 + 多线程组合
- 连接池管理
- 资源复用策略
3. 高级交互
- 动作链(Actions)的复杂用法
- 文件上传下载的高级场景
- 事件监听和拦截
- WebSocket 处理
4. 项目集成
- 和 Scrapy 集成
- 和 FastAPI/Flask 集成
- 配合数据库存储
- 部署到 Docker
5. 推荐资源
小结
遇到元素找不到,先检查是否在 iframe 或 Shadow DOM 里。
点击没反应试试 JS 点击或滚动到可见区域。
性能优化三板斧:无头、禁图片、设超时。
反爬要综合运用延时、换 UA、代理、模拟行为等手段。
进阶方向包括架构理解、性能优化、高级交互和项目集成。
上一篇
与 selenium 对比
下一篇
已经是最后一篇啦