update at 2025-10-24 22:25:24

This commit is contained in:
douboer
2025-10-24 22:25:24 +08:00
parent 09b7d98396
commit 9bfeee5a6d
3 changed files with 141 additions and 299 deletions

View File

@@ -1,63 +1,72 @@
# douban-crawler
使用 Playwright + TypeScript 实现的豆瓣登录与辅助脚本,主要功能包括:
> Playwright + TypeScript 脚本,用于完成豆瓣短信验证码登录,并将登录态持久化到本地 Cookie 文件。滑块验证码需人工处理,本项目不再尝试自动识别。
- 通过短信验证码完成豆瓣登录,并持久化 Cookies
- 自动尝试滑块验证,降低人工干预;
- 可单独运行的滑块模拟脚本,便于在其它场景复用。
## 功能概览
## 快速开始
- 启动 Chromium 浏览器并访问豆瓣登录页;
- 自动填写手机号,触发短信验证码;
- 控制台提示用户完成页面内的额外验证(如滑块)并输入短信验证码;
- 登录成功后将 Cookie 状态保存到 `~/douban-cookie.json`,后续运行可直接复用。
## 环境准备
```bash
npm install
npx playwright install chromium
```
首次运行登录脚本需要提供手机号:
需要 Node.js ≥ 18。Playwright 会自动下载 Chromium首次运行请确保网络可访问 Playwright CDN。
```bash
DOUBAN_PHONE=13357108011 npm run login
```
## 使用方式
若需启用滑块自动化,可增加 `DOUBAN_AUTO_SLIDER=1`,更多环境变量见下文。
1. 设置手机号环境变量并运行登录脚本:
## 脚本说明
```bash
DOUBAN_PHONE=13800000000 npm run login
```
| 命令 | 说明 |
| -------------------- | ------------------------------- |
| `npm run login` | 豆瓣短信登录,复用 `~/cookies.json` |
| `npm run slider` | 独立测试滑块验证功能 |
2. 浏览器会自动打开豆瓣登录页,脚本完成以下操作:
- 填入手机号并点击「获取验证码」;
- 控制台提示等待页面验证(若出现滑块,请手动完成);
- 控制台等待用户输入短信验证码;
- 验证码提交成功后,脚本将登录态写入 `~/douban-cookie.json` 并退出。
## 配置项
3. 下次运行会优先尝试加载该 Cookie 文件,若仍在有效期内可直接登录。
登录流程支持以下环境变量:
## 命令列表
| 变量名 | 说明 | 默认值 |
| ---------------------------------- | ----------------------------------------------------------------------- | ---------------- |
| `DOUBAN_PHONE` | 登录手机号(必填) | - |
| `DOUBAN_AUTO_SLIDER` | 是否尝试自动完成滑块验证(`1` 表示开启) | `0` |
| `DOUBAN_SLIDER_DISTANCE` | 自定义滑块拖动距离(像素);缺省时脚本根据轨道宽度推测 | 自动推测或 200px |
| `DOUBAN_SLIDER_OFFSETS` | 距离微调列表(逗号分隔,逐个尝试以校正识别误差) | 自动选择 |
| `DOUBAN_SLIDER_HANDLE_SELECTOR` | 覆盖默认滑块按钮选择器 | 内置候选 |
| `DOUBAN_SLIDER_TRACK_SELECTOR` | 覆盖默认滑块轨道选择器 | 内置候选 |
| `DOUBAN_SLIDER_BG_SELECTOR` | 覆盖滑块背景图选择器 | 内置候选 |
| `DOUBAN_SLIDER_PIECE_SELECTOR` | 覆盖滑块拼图块选择器 | 内置候选 |
| `DOUBAN_SLIDER_TIMEOUT` | 等待滑块组件出现的超时(毫秒) | 20000 |
| 命令 | 说明 |
| --------------- | ---------------------------- |
| `npm run login` | 启动豆瓣登录流程并保存 Cookie |
Cookies 将默认保存到用户主目录下的 `~/cookies.json`,可根据需要修改 `src/login.ts` 中的路径。
## 可配置项
## 滑块验证自动化
当前脚本仅使用一个环境变量:
本项目集成了滑块验证码自动破解功能,参考了 [crack-slide-captcha](https://github.com/omigo/crack-slide-captcha) 项目。
| 变量名 | 说明 | 是否必填 | 默认值 |
| -------------- | ---------------- | -------- | ------ |
| `DOUBAN_PHONE` | 登录手机号(大陆) | 必填 | - |
### 核心特性
若需要更改 Cookie 保存位置,可在 `src/login.ts` 中调整 `COOKIES_PATH` 定义。
- 🔍 **智能识别**:通过图像处理自动计算滑动距离
- 🎭 **模拟真人**:先快后慢的速度曲线、轨迹抖动、随机反应时间
- 🔄 **多次重试**:支持偏移修正,提高成功率
- ⚙️ **高度可配**:支持自定义选择器、距离、偏移等参数
## 工作流程说明
### 快速使用
1. 读取 `DOUBAN_PHONE`,未提供则直接退出;
2. 若存在 `~/douban-cookie.json`,加载后访问登录页并校验登录态;
3. 如未登录,执行短信验证码流程,期间需手动处理页面可能出现的滑块或图形验证码;
4. 用户在终端输入收到的短信验证码;
5. 验证通过后,将当前浏览器上下文的 `storageState` 写入 `~/douban-cookie.json`。
## 常见问题
- **登录后仍提示手机号未填写?** 确认 Playwright 浏览器窗口焦点在页面内,避免浏览器阻止自动填充。
- **提示滑块验证但脚本无动作?** 脚本已停止自动滑块功能,请在浏览器中手动拖动滑块完成验证。
- **Cookie 未生成?** 只有当脚本确认登录成功时才会写入 Cookie。若终端未看到 “登录成功Cookies 已保存…” 的日志,请检查短信验证码是否正确。
## 声明
该项目仅供学习与功能验证,请勿用于违反豆瓣平台服务条款的场景。开发者需自行承担使用风险。
```bash
# 启用自动滑块验证