drissionpage在python 3.9+中完全可用,是替代selenium最平滑的选择:无需chromedriver、启动快、内存低、定位直觉,支持双模式协同、ajax监听与会话同步,内置弹窗自动处理。

DrissionPage 在 Python 3.9+ 中完全可用,且是目前替代 Selenium 最平滑、最省力的选择——它不依赖 chromedriver,不强制要求特定 Chrome 版本,启动快、内存低、定位语法直觉,尤其适合 Boss 直聘、X音、电商详情页这类 JS 渲染强、反爬逻辑多的站点。
安装与初始化:跳过 chromedriver 管理
你不用再查 Chrome 版本、下载匹配的 chromedriver、配置环境变量或用 webdriver-manager。DrissionPage 自带通信协议封装,直接连本地已装的 Chromium 内核浏览器(Chrome/Edge 90+ 即可)。
安装命令一行搞定:
pip install drissionpage==3.2.26
初始化只需两行,无额外参数也能跑通:
from DrissionPage import ChromiumPage<br>page = ChromiumPage()
- 若 Chrome 安装在非默认路径,用
ChromiumPage(browser_path='C:/Program Files/Google/Chrome/Application/chrome.exe') - 想静默运行?加
headless=True,但注意部分反爬会检测headless特征,建议先用有头模式调试 - 不指定
timeout时,默认等待 10 秒;高频采集建议显式设为timeout=3避免卡死
元素定位:不用写 XPath 或显式 WebDriverWait
DrissionPage 的 page('xxx') 是核心便利点——它自动融合查找、等待、重试,等效于 Selenium 里 WebDriverWait + find_element + 多种定位策略的组合。
图片提示词生成器?不止如此。 马甲系统 —— 把脑海中的画面,翻译成AI能理解的专业表达。 用得越多,它越懂你:首次需要多问几句确认方向,用久了几乎一说就懂。 用得越多,它越快:缓存机制让后续对话越来越省。 RAG进化:成功案例持续入库,越跑越聪明。 输入「新手指南」查看完整功能介绍
常见写法对比:
# 查找文本含“投递”按钮(自动匹配 text()、aria-label、placeholder 等)<br>btn = page('@text=投递')<br><br># 查找 id 为 username 的输入框<br>inp = page('#username')<br><br># 查找 class 包含 'job-card' 的第一个 div<br>card = page('.job-card')
- 不推荐用
page.ele('xpath=...')写原生 XPath,除非必须处理极复杂结构;多数场景用@text=、#id、.class更稳 - 如果页面有 iframe,
page('iframe').ele('文本')可直接跨帧操作,无需switch_to.frame - 返回对象自带
.click()、.input()、.text属性,不用再调.get_attribute('innerText')
数据监听:绕过渲染,直接捕获 Ajax 响应
对 Boss 直聘这类接口驱动型站点,真正要的数据往往藏在 XHR 请求里,而非 HTML 源码中。DrissionPage 的 listen.start() + listen.wait() 能直接拿到原始 JSON 响应,比等 DOM 渲染再解析快得多,也更抗干扰。
实操步骤:
page.listen.start('api/zpgeek/search/joblist.json') # 监听关键词匹配的 URL<br>page('button:contains(搜索)').click() # 触发请求<br>res = page.listen.wait() # 阻塞等待,返回 Response 对象<br>data = res.response.body.json() # 直接取结构化数据
- 监听路径支持正则,如
listen.start(r'/joblist\.json.*') -
res.response.body是 bytes,用.json()解析前建议先try/except捕获JSONDecodeError - 该机制依赖浏览器 DevTools Protocol,Chrome 90+ 默认开启,无需额外配置
混合模式:Session 模式接管登录态后切回浏览器操作
有些场景(比如登录后跳转到新页、需要 Cookie 维持态但又不想全程开浏览器),可以用 session 模式发请求,再把 session 同步回浏览器上下文:
from DrissionPage import SessionPage<br>s = SessionPage()<br>s.post('https://www.zhipin.com/login', data={'mobile': '138xxx', 'password': 'xxx'})<br>page.set_cookies(s.cookies) # 将登录态注入当前 ChromiumPage 实例
- 这样既避免了 Selenium 登录时被识别为自动化(输密码慢、鼠标轨迹假),又保留了后续页面交互能力
- 注意
s.cookies是RequestsCookieJar类型,page.set_cookies()内部会自动转换格式 - SessionPage 不支持执行 JS,所以不能用于触发前端加密逻辑;若登录需跑 JS(如滑块、指纹),仍得用浏览器模式
DrissionPage 的轻量不是靠阉割功能换来的,而是把“该等的时候智能等、该跳的时候果断跳、该监听的时候不碰 DOM”的判断逻辑全埋进内核里了。最容易被忽略的一点是:它默认启用 auto_handle_alert=True,遇到弹窗会自动点确定——这在 Boss 直聘的“频繁操作提示”里非常实用,但如果你需要自定义处理弹窗,得手动关掉这个开关。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










