在自动化的世界里,Selenium是老兵,DrissionPage是新秀。老兵有经验,但在面对复杂的现代网页时,常常力不从心。新秀不一定完美,但有时能一招制敌。
这次,我的目标是:实现“今日头条”的自动发布功能。听起来不难,做起来却让人抓狂。
🧱 Selenium的困境:登录即是地狱
用Selenium尝试自动发布,第一步就卡在登录。今日头条采用了滑块验证、动态加载、Cookie绑定等一系列“反自动化”手段。Selenium模拟浏览器行为,但在处理这些反爬机制时,显得笨拙:
- 滑块验证无法绕过
- 登录后Cookie不稳定
- 页面元素动态加载,定位频繁失效
我尝试了各种绕过方式,包括打码平台、手动Cookie注入、等待策略优化……最终还是败下阵来。
🚀 DrissionPage的登场:浏览器与请求的双剑合璧
DrissionPage是一个融合了Selenium和requests的自动化工具,它的优势在于:
- 支持无头浏览器与请求模式切换
- 可以直接读取浏览器登录后的Cookie
- 对动态页面的处理更灵活
我用DrissionPage的浏览器模式完成登录,提取Cookie,再切换到请求模式进行内容发布。

整个流程如下:
🧩 自动发布流程拆解
| 步骤 | 工具 | 说明 |
|---|---|---|
| 打开浏览器 | DrissionPage(浏览器模式) | 模拟真实用户登录 |
| 登录并获取Cookie | DrissionPage | 登录一次,提取有效Cookie |
| 构造发布请求 | requests模式 | 使用Cookie构造POST请求 |
| 提交内容 | DrissionPage | 模拟点击或直接请求接口 |
整个流程只需一次人工登录,之后即可实现批量自动发布。
🛠️ 核心代码片段
from DrissionPage import DrissionPage
dp = DrissionPage()
# 登录并获取Cookie
dp.get('https://mp.toutiao.com/')
input('请手动登录后按回车...')
cookies = dp.get_cookies()
# 切换到requests模式发布内容
dp.set_mode('requests')
headers = {'Cookie': '; '.join([f"{c['name']}={c['value']}" for c in cookies])}
data = {
'title': '自动化发布测试',
'content': '<p>这是一篇自动发布的文章。</p>',
# 其他参数根据接口文档填写
}
dp.post('https://mp.toutiao.com/api/article/publish', data=data, headers=headers)
🧠 为什么选择DrissionPage?
- 不需要频繁处理验证码
- Cookie稳定性高
- 支持请求与浏览器双模式
- 更适合内容平台的自动化任务
🏁 写在最后
Selenium是好工具,但不是万能钥匙。面对复杂的内容平台,DrissionPage提供了更灵活的解决方案。作为dashen.wang的站长,我更关心的是:如何用最少的成本,实现最稳定的自动化。
这次,我找到了答案。



