面向 DJI 旧机回收与换新申请的本地浏览器填写辅助工具
工具能力 · 快速开始 · 项目架构 · Plus版本战绩 · 常见问题
Important
本项目是独立的本地自动化辅助工具,与 DJI 及其关联方不存在官方合作、授权或隶属关系。账号、密码、地址等信息仅从本地 config.yaml 读取;程序不会绕过登录、验证码或风控校验,也不会自动提交申请。
| 能力 | 说明 |
|---|---|
| 表单自动填写 | 自动填写 DJI 账号、设备序列号、收件人、联系方式与详细地址。 |
| 下拉选项选择 | 支持旧机型号及省、市、区县三级联动选择。 |
| 可见浏览器操作 | 默认使用有界面 Chromium,所有填写结果可在提交前人工核对。 |
| 会话复用 | 可配置本地浏览器资料目录,减少重复登录。 |
| 配置强校验 | 启动前校验 YAML 结构、HTTPS 地址和必填字段,尽早发现配置问题。 |
| 人工确认边界 | 登录、验证码、最终提交均由使用者在浏览器中完成。 |
需要 Python 3.10 或更高版本。首次使用时,在项目根目录执行:
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -r requirements.txt
python -m playwright install chromiumWindows PowerShell 使用以下命令激活虚拟环境:
.venv\Scripts\Activate.ps1cp config.example.yaml config.yaml在 config.yaml 中填入真实个人信息。该文件已被 .gitignore 忽略,禁止提交到 Git 仓库。
account:
dji_account: "手机号或邮箱"
dji_password: "DJI账号密码"
device:
model: "与网页下拉选项完全一致的旧机型号"
serial_number: "旧机序列号"source .venv/bin/activate
python run.py --config config.yaml程序会打开 https://support.dji.com/recycle/apply,完成字段填写后保持浏览器打开。请核对页面内容,并自行决定是否提交申请。
若需要先手动完成登录或验证码:
python run.py --config config.yaml --pause-before-fill加载 config.yaml
│
▼
启动可见 Chromium 浏览器
│
▼
打开 DJI 回收申请页面
│
├── 登录、验证码、风控校验:人工处理
│
▼
按标签定位字段并填写信息
│
▼
选择旧机型号和省/市/区县
│
▼
人工核对并手动提交
完整模板见 config.example.yaml。旧机型号、省、市、区县必须与网页下拉项显示的文本完全一致。
| 配置项 | 作用 | 示例 |
|---|---|---|
browser.headless |
是否隐藏浏览器界面 | false |
browser.slow_mo_ms |
每次浏览器操作的额外延迟 | 80 |
browser.manual_preparation_required |
是否在填写前等待人工准备 | false |
browser.user_data_dir |
本地浏览器会话目录 | runtime/browser-profile |
application.timeout_ms |
单次页面操作超时时间 | 15000 |
account.dji_account |
DJI 登录账号或联系方式 | example@example.com |
device.model |
旧机型号 | 页面下拉选项原文 |
address.province |
省级地址 | 页面下拉选项原文 |
DJI-Tools/
├── config.example.yaml # 可提交的配置模板
├── config.yaml # 本地个人配置,已忽略
├── requirements.txt # Python 依赖定义
├── run.py # 命令行入口
├── static/ # README 图标、Plus版本成果截图与购买二维码
└── dji_recycle/
├── application.py # 解析参数、管理浏览器生命周期
├── config.py # 加载并校验 YAML 配置
├── models.py # 不可变配置数据模型
├── page.py # 表单定位、填写与下拉选择
└── selectors.py # 页面中文字段标签定义
| 模块 | 职责 |
|---|---|
application.py |
串联配置、Playwright 与页面对象,确保浏览器资源正确释放。 |
config.py |
对配置类型、必填项、路径和页面地址执行启动前校验。 |
models.py |
以数据类隔离浏览器配置、账号、设备、联系人与地址。 |
page.py |
兼容原生和常见组件化下拉框,执行字段填写。 |
selectors.py |
集中维护页面字段中文标签,页面改版时可快速定位调整。 |
DJI 页面字段标签或组件结构发生变化时,优先按以下顺序处理:
- 检查 dji_recycle/selectors.py 中的中文标签是否仍与页面一致。
- 检查 dji_recycle/page.py 中对应字段的容器定位逻辑。
- 确认
device.model、address.province、address.city、address.district与下拉文本完全匹配。
保存或打开上方图片后,使用闲鱼扫一扫购买Plus版本。
Plus版本已完成库存匹配、验证码处理、换新申请提交,并收到 DJI 的申请成功通知和寄回指引。
| 库存匹配与验证码成功 | 换新申请提交成功 |
|---|---|
![]() |
![]() |
| 寄回指引短信通知 | 寄回设备指引详情 |
![]() |
![]() |
| 御 Mavic Pro换新申请成功 | 御 Spark换新申请成功 |
![]() |
![]() |
| 现象 | 处理方式 |
|---|---|
Executable doesn't exist |
执行 python -m playwright install chromium。 |
| 找不到字段标签 | 页面可能改版,更新 dji_recycle/selectors.py 中对应的标签文本。 |
| 找不到下拉选项 | 检查机型和地区名称是否与页面选项完全一致。 |
| 登录或验证码阻塞 | 使用 --pause-before-fill,完成验证后回到终端按回车。 |
| 浏览器关闭后登录失效 | 将 browser.user_data_dir 配置为非空目录。 |
config.yaml、runtime/、虚拟环境均已在.gitignore中排除。- 请仅使用本人有权使用的 DJI 账号和设备信息,并自行确认回收、换新政策与申请内容。
- 不要在 Issue、日志、截图或 Git 提交中粘贴密码、完整序列号、住址、申请编号等敏感信息。






