fix: 共用浏览器数据目录跟随本机配置 (#37)

This commit is contained in:
ila
2026-10-07 16:27:59 +08:00
parent 3c3ed47b14
commit 0aa930480d
7 changed files with 30 additions and 32 deletions
+5 -5
View File
@@ -45,11 +45,11 @@ taobao:
# 在「参数设置」页可以用「选择文件」按钮挑,不用手打。
chrome_path: "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe"
# 专属 Chrome 的用户数据目录,淘宝登录态就存在这里。
# 默认在 %LOCALAPPDATA%\电商视频自动下载工具\淘宝浏览器\默认账号
# [注意] 改了这个路径就要重新扫码登录一次,不要随手改。
# 这个目录不要提交、打包或共享。
user_data_dir: "C:\\Users\\你的用户名\\AppData\\Local\\电商视频自动下载工具\\淘宝浏览器\\默认账号"
# 淘宝和 1688 共用的用户数据目录;默认在 config.yaml 旁的
# 运行数据\浏览器\淘宝1688。开发模式是项目根目录,打包版是 exe 旁。
# [注意] 改路径后需分别手动重新登录两站;不要提交、打包或共享此目录。
# 如需自定义,取消下一行注释并填写绝对路径。
# user_data_dir: "D:\\自定义目录\\淘宝1688"
# 给专属 Chrome 分配调试端口的范围。端口被占用时会往后找。
debug_port_start: 19666
+3 -3
View File
@@ -2,8 +2,8 @@
generated: true (请先修改 Gitea Wiki,禁止直接编辑本文件)
wiki_page: Project-Profile
wiki_url: https://git.ilapage.cn/chengma/cmsp/wiki/Project-Profile.-
wiki_revision: a6dc3ff73d753db3750b9d2421fcd0661b6bc169
synchronized_at: 2026-09-30T01:39:55Z
wiki_revision: 7a6c27d8b2986bc87bc3eabf45fdf3813a9c7764
synchronized_at: 2026-10-07T08:26:23Z
<!-- gitea-wiki-mirror:end -->
# 项目档案
@@ -152,7 +152,7 @@ Go 与前端目录在项目骨架建立后补入[架构与代码地图](02-archi
| 历史 OCR 服务地址 | 兼容旧配置 | 不再参与运行时请求 |
| Gitea token | 文档同步 | 只从进程环境或 MCP 安全配置读取,**不得写入仓库** |
专属 Chrome Profile 目录默认为 `%LOCALAPPDATA%\电商视频自动下载工具\淘宝浏览器\默认账号`,沿用已验证 Python 流程的路径,避免使用者重新登录。该目录不得提交、打包或共享。
淘宝与 1688 共用的专属 Chrome Profile 默认位于 `config.yaml` 所在目录下的 `运行数据/浏览器/淘宝1688`;开发模式在项目根目录,打包版在 exe 旁,不落入可清理的 `build/bin`。改变旧目录后需分别手动重新登录,原 Profile 不自动迁移或删除。该目录不得提交、打包或共享。
## 项目专用验收要求
+3 -3
View File
@@ -2,8 +2,8 @@
generated: true (请先修改 Gitea Wiki,禁止直接编辑本文件)
wiki_page: Architecture-and-Code-Map
wiki_url: https://git.ilapage.cn/chengma/cmsp/wiki/Architecture-and-Code-Map.-
wiki_revision: 402b037c2ccb948e297aeb15e9679565ca80d2bb
synchronized_at: 2026-10-07T08:13:39Z
wiki_revision: 928afb2d53fd93391b384fe3af843180a0bfc728
synchronized_at: 2026-10-07T08:26:24Z
<!-- gitea-wiki-mirror:end -->
# 架构与代码地图
@@ -183,4 +183,4 @@ cmsp/
## 1688 视频下载来源(2026-10-07,#37)
商品列表“下载视频”旁选择淘宝或 1688;`download.source` 写入本机 `config.yaml`,批次启动时固定来源。1688 与淘宝共用现有专属 Chrome Profile、进程和运行状态文件;两个站点均由操作者手动登录。`app_1688.go` 调用 `internal/alibaba1688/search.go`:上传商品主图到网页以图搜,按结果顺序进入候选详情,读取页面视频地址。`internal/downloader` 将候选 MP4 下载到临时文件;`internal/alibaba1688/quality.go` 用 ffprobe 校验、ffmpeg 抽帧检测黑底文字广告和静止拼图。只有判为 `usable` 的视频才晋升为商品文件,`internal/store.CompleteVideoDownload` 在同一 SQLite 事务中写视频记录与商品已下载状态。拒绝、无法判定、候选下载失败时保留原商品状态;上传仍沿用原有 erpgo 流程。
商品列表“下载视频”旁选择淘宝或 1688;`download.source` 写入本机 `config.yaml`,批次启动时固定来源。1688 与淘宝共用现有专属 Chrome Profile、进程和运行状态文件;默认目录由 `internal/config.DefaultChromeUserDataDir` 定位到 `config.yaml` 旁的 `运行数据/浏览器/淘宝1688`,两个站点均由操作者手动登录。`app_1688.go` 调用 `internal/alibaba1688/search.go`:上传商品主图到网页以图搜,按结果顺序进入候选详情,读取页面视频地址。`internal/downloader` 将候选 MP4 下载到临时文件;`internal/alibaba1688/quality.go` 用 ffprobe 校验、ffmpeg 抽帧检测黑底文字广告和静止拼图。只有判为 `usable` 的视频才晋升为商品文件,`internal/store.CompleteVideoDownload` 在同一 SQLite 事务中写视频记录与商品已下载状态。拒绝、无法判定、候选下载失败时保留原商品状态;上传仍沿用原有 erpgo 流程。
+3 -3
View File
@@ -2,8 +2,8 @@
generated: true (请先修改 Gitea Wiki,禁止直接编辑本文件)
wiki_page: Business-Rules-and-Glossary
wiki_url: https://git.ilapage.cn/chengma/cmsp/wiki/Business-Rules-and-Glossary.-
wiki_revision: 9050db999007f60f94f1d1b394a447836a61762e
synchronized_at: 2026-10-07T08:13:39Z
wiki_revision: 3f8176505ad472eb9c7899fb032a41b1b5fa28b4
synchronized_at: 2026-10-07T08:26:24Z
<!-- gitea-wiki-mirror:end -->
# 业务规则与术语
@@ -77,7 +77,7 @@ MTOP 搜索方式、签名与请求参数保持现状。商品原链接以实际
| MTOP | 淘宝的 H5 接口网关。请求需要 `appKey`、毫秒时间戳、由 `_m_h5_tk` 派生的 token 和 MD5 签名 |
| pcSign | MTOP 请求参数内部的一个附加签名,由紧凑 JSON 载荷加固定盐做 SHA256 后 Base64 得到 |
| 专属 Chrome | 由本程序用固定 `--user-data-dir` 和调试端口启动的独立 Chrome 实例,与使用者日常浏览器互不影响 |
| Chrome Profile | 专属 Chrome 的用户数据目录,保存淘宝登录态。它是淘宝登录的唯一保存位置 |
| Chrome Profile | 淘宝与 1688 共用的专属 Chrome 用户数据目录,默认在配置文件旁的 `运行数据/浏览器/淘宝1688`;登录态只留在该目录 |
| CDP | Chrome DevTools Protocol。程序通过它导航页面、读取 Cookie 名称、在页面上下文执行 JavaScript |
| 深度登录检查 | 导航到「我的淘宝」后按页面标题、最终地址和正文判断服务端是否仍认可登录,而不是只看本地 Cookie 是否存在 |
| 阻断词 | 页面中出现即停止自动访问的关键词;「请登录」属于登录失效,「安全验证」「访问受限」属于访问异常 |
@@ -2,8 +2,8 @@
generated: true (请先修改 Gitea Wiki,禁止直接编辑本文件)
wiki_page: Local-Development-and-Verification
wiki_url: https://git.ilapage.cn/chengma/cmsp/wiki/Local-Development-and-Verification.-
wiki_revision: 222b13d06ebc82783abd51eb5c82a9e6c8ea35e4
synchronized_at: 2026-10-07T08:13:40Z
wiki_revision: 410c1bb02afc010289a9e1787e89835aafdb8976
synchronized_at: 2026-10-07T08:26:25Z
<!-- gitea-wiki-mirror:end -->
# 本地开发与验证
@@ -235,4 +235,4 @@ Go 实现完成后适用:
## 1688 视频来源运行要求(2026-10-07,#37)
在商品列表下载按钮旁选“1688”,参数设置中检查 `taobao.chrome_path`、`taobao.user_data_dir` 与调试端口范围;这组配置供淘宝和 1688 共用。点击“打开 1688 登录”在同一专属 Chrome 中手动登录。旧 `alibaba1688` 配置块读取时忽略,保存后不再写出。1688 视频内容检测除了既有 ffprobe,还需要 `ffmpeg.exe`;打包运行时把二者放在 `cmsp.exe` 同目录,或加入 PATH。缺少 ffmpeg 时启动 1688 下载前即提示,不改变淘宝下载。`download.source` 保存在本机 `config.yaml`,默认 `taobao`。验证命令:`go test ./...`,`wails build`;真机验收分别用广告文字候选和正常商品视频检查拒绝、放行及 SQLite 状态。
在商品列表下载按钮旁选“1688”,参数设置中检查 `taobao.chrome_path`、`taobao.user_data_dir` 与调试端口范围;这组配置供淘宝和 1688 共用。默认 Profile 位于 `config.yaml` 同目录的 `运行数据/浏览器/淘宝1688`;`config.example.yaml` 不写死本机路径。开发运行使用项目根目录,打包运行使用 exe 旁的配置目录。旧 Profile 不自动复制或删除,切换后需分别手动登录。点击“打开 1688 登录”在同一专属 Chrome 中手动登录。旧 `alibaba1688` 配置块读取时忽略,保存后不再写出。1688 视频内容检测除了既有 ffprobe,还需要 `ffmpeg.exe`;打包运行时把二者放在 `cmsp.exe` 同目录,或加入 PATH。缺少 ffmpeg 时启动 1688 下载前即提示,不改变淘宝下载。`download.source` 保存在本机 `config.yaml`,默认 `taobao`。验证命令:`go test ./...`,`wails build`;真机验收分别用广告文字候选和正常商品视频检查拒绝、放行及 SQLite 状态。
+5 -15
View File
@@ -149,20 +149,10 @@ func Default() Config {
}
}
// DefaultChromeUserDataDir 返回专属 Chrome 用户数据目录的默认位置。
//
// 这个路径沿用迁移前 Python 版本的目录,改动它会导致同事需要重新
// 扫码登录淘宝,所以不要随手改。
// DefaultChromeUserDataDir 返回配置文件旁的共用 Chrome Profile 目录。
// 开发模式位于项目根目录;打包版位于 exe 旁,不使用会被清理的 build/bin。
func DefaultChromeUserDataDir() string {
base := os.Getenv("LOCALAPPDATA")
if base == "" {
home, err := os.UserHomeDir()
if err != nil {
return filepath.Join(".", "淘宝浏览器", "默认账号")
}
base = home
}
return filepath.Join(base, "电商视频自动下载工具", "淘宝浏览器", "默认账号")
return filepath.Join(DataRoot(), "运行数据", "浏览器", "淘宝1688")
}
// DataRoot 返回程序存放数据的根目录。
@@ -371,8 +361,8 @@ taobao:
# chrome.exe 的完整路径。注意是文件不是目录。
chrome_path: %s
# 专属 Chrome 的用户数据目录,淘宝登录态就存在这里。
# [注意] 改了这个路径就要重新扫码登录一次,不要随手改。
# 淘宝和 1688 共用的 Chrome 用户数据目录,默认位于配置文件旁的运行数据/浏览器/淘宝1688。
# [注意] 改了这个路径就要分别手动重新登录两站,不要随手改。
# 这个目录不要提交、打包或共享。
user_data_dir: %s
+8
View File
@@ -398,6 +398,14 @@ func TestDataRoot跟随配置文件位置(t *testing.T) {
if root != filepath.Dir(DefaultPath()) {
t.Fatalf("数据根目录应当是配置文件所在目录,实际 %q", root)
}
profile := DefaultChromeUserDataDir()
if want := filepath.Join(root, "运行数据", "浏览器", "淘宝1688"); profile != want {
t.Fatalf("共用浏览器目录应当跟随配置文件:got %q want %q", profile, want)
}
loaded, err := Load(cfgPath)
if err != nil || loaded.Taobao.UserDataDir != profile {
t.Fatalf("旧配置缺少浏览器目录时应使用新默认值:%v", err)
}
videoDir := DefaultVideoDir()
if !strings.HasPrefix(videoDir, root) {