Commit Graph
132 Commits
Author SHA1 Message Date
Qiufeng 3add81c59a fix(tencent): 图文上传框轮询等待拉长到 180s,适配慢网络下表单挂载慢 2026-08-21 23:20:30 +08:00
Qiufeng 7d6089112a fix(tencent): 图文发布改用独立创建页 finderNewLifeCreate(不再在视频表单里切换模式);全面拉长 timeout 适配慢网络;清理调试代码 2026-08-21 22:43:52 +08:00
Qiufeng 757ce2f77c fix(tencent): cookie_auth 改用 auth_data 接口探测为权威判据,移除不存在的「发表视频」按钮验证——该按钮随平台改版已不存在,导致登录成功后误判失效 2026-08-21 20:00:59 +08:00
Qiufeng a7348495c9 fix(tencent): 修正登录完成判定顺序——移除 qrconnect iframe 前置误判,改为发表视频按钮/平台页优先;扫码与过期检测穿透 iframe,修复扫码后无反馈、登录成功后二维码不销毁 2026-08-21 18:45:15 +08:00
Qiufeng b96de7a2d2 fix(tencent): 登录态校验区分接口层/页面层——接口 auth_data 判快速失效,页面验证「发表视频」按钮判登录完整;修复扫码后过早保存不完整 cookie(finder_uin 空)导致发布弹扫码框 2026-08-21 18:30:26 +08:00
Qiufeng 2ed56bb144 fix(tencent): 登录态校验统一改为 get_auth_info 接口探测(errCode==0),消除测试/发布两套判定不一致;修正登录态 cookie 为 sessionid+wxuin 2026-08-21 17:54:29 +08:00
Qiufeng 9295e715b5 fix(tencent): 登录成功改为 cookie 检测优先(ww_datasalt/ww_bizuin/wxuin/slave_sid),修复扫码确认后 DOM/URL 检测不到的问题 2026-08-21 17:07:18 +08:00
Qiufeng 583a7a3465 fix(tencent): page.goto 加 domcontentloaded + 60s 超时 + 容错,避免首页加载超时导致登录直接失败 2026-08-21 16:59:17 +08:00
Qiufeng d34711062d fix(tencent): 修复扫码成功判定——登录后停在 /platform 首页也视为成功;扫码/过期状态实时推给前端 2026-08-21 16:42:38 +08:00
Qiufeng fb250da631 fix: 抖音/TikTok 未填标签时 self.tags=None 导致 len() 崩溃,兜底为 [] 2026-08-21 16:00:39 +08:00
Qiufeng fd944b08bd feat: EveryPublish Web 管理端重构与全平台发布接入
- 新增 React + TDesign 管理端(sau_web_react),替代历史 Vue 前端
- 后端接入 11 平台登录/发布(视频+图文),check_cookie 扩展全平台
- 异步发布任务 + 实时进度监控 + 发布日志
- Open API 开放体系(API Key 鉴权 + 7 个开放接口 + API 文档页)
- 账号单/批量校验与批量删除
- 全局配置(登录方式 + 发布静默模式)
- 统一浏览器为系统 Chrome,品牌文案统一为 EveryPublish
2026-08-21 14:41:47 +08:00
home-dev-pookz 926be742cd fix(tencent): wire collection name into uploader 2026-08-20 04:21:03 +08:00
home-dev-pookz 9fc5ec487f Merge pull request #270: Hupu uploader 2026-08-19 18:38:34 +08:00
home-dev-pookz d690c22ea6 Merge pull request #269: Weibo uploader 2026-08-19 18:33:46 +08:00
home-dev-pookz 49365fd046 Merge pull request #261: Tencent real-name verification 2026-08-19 18:31:07 +08:00
home-dev-pookz 5b836d5f50 Merge pull request #268: Alipay uploader 2026-08-19 18:15:27 +08:00
home-dev-pookz 43bdcbb2fd Merge pull request #267: Xiaohongshu publish fixes 2026-08-19 18:14:06 +08:00
home-dev-pookz abfc13503d Merge pull request #266: Kuaishou upload fixes 2026-08-19 18:14:02 +08:00
home-dev-pookz 9969770039 Merge pull request #265: Tencent revamped editor fixes 2026-08-19 18:13:51 +08:00
home-dev-pookz 5628f76684 Merge pull request #264: Douyin flow hardening 2026-08-19 18:13:13 +08:00
home-dev-pookz 78c88bc315 Merge pull request #263: Tencent upload retry and timeout fixes 2026-08-19 18:12:58 +08:00
suihf f64f712ab1 feat(baijiahao): rewrite uploader on BaseVideoUploader and add CLI
- Rewrite uploader/baijiahao_uploader/main.py: unify on BaseVideoUploader,
  add QR-code cookie login (headless), robust publish-page flow with
  title/desc/tags, thumbnail and collection support
- sau_cli: add 'baijiahao login/check/upload-video' subcommands
- examples: get_baijiahao_cookie_headless.py for headless QR login
2026-08-13 10:04:50 +08:00
suihf 254d0beb20 feat(hupu): add Hupu (虎扑) video uploader
- New uploader/hupu_uploader module: QR-code cookie login, direct publish
  page flow with title/desc/tags, cover upload, zone/declaration selection
- sau_cli: add 'hupu login/check/upload-video' subcommands
- utils/log.py: register hupu logger
2026-08-13 10:01:23 +08:00
suihf 466f81d3be feat(weibo): add Sina Weibo video uploader
- New uploader/weibo_uploader module: passport QR-code cookie login,
  upload flow with title/desc/tags, cover and collection support
- sau_cli: add 'weibo login/check/upload-video' subcommands
- utils/log.py: register weibo logger
2026-08-13 09:58:57 +08:00
suihf 0625f9b13b feat(alipay): add Alipay life account video uploader
- New uploader/alipay_uploader module: QR-code cookie login, upload page
  flow, title/desc/tags fill, thumbnail, collection and publish
- sau_cli: add 'alipay login/check/upload-video' subcommands
- examples: get_alipay_cookie.py and test_alipay_upload.py
- utils/log.py: register alipay logger
- utils/login_qrcode.py: robust QR decode on non-ASCII Windows paths
  (numpy imdecode with cv2.imread fallback)
2026-08-13 09:55:22 +08:00
suihf 233cb990a6 fix(kuaishou): robust desc editor focus, cookie auth and Joyride cleanup
- _focus_desc_editor: locate the description editor with multiple fallback
  strategies instead of a single brittle selector; dump page screenshot/HTML
  on failure for easier selector updates
- cookie_auth: positive verification via the upload button presence, with
  login-page / intro-page / legacy checks as fallbacks
- close_guide_overlay: also remove the Joyride portal and spotlight layers
  that intercept clicks
- add collection_name support to KSVideo
2026-08-13 09:50:21 +08:00
suihf c1617444f9 fix(tencent): adapt to Channels revamped editor and improve publish flow
- Open homepage first, then click the visible 'publish video' entry
  button instead of loading /platform/post/create directly, which gets
  bounced back to the homepage and leaves the form iframe un-mounted
- Detect expired cookies up front by watching for the /login.html
  redirect and the qrconnect iframe
- Drop the redundant confirm_thumbnail_crop call that caused a 5s
  timeout on cover upload
- Select collection by exact name after upload completes (form resets
  selections made while the video is still uploading); keep it
  unselected when no matching name is found instead of picking a
  random one
- Scroll the target option into view and fall back to forced click /
  native dispatch for headless visibility issues
- Tighten short-title length to 7~15 chars to pass platform validation
- Dismiss the occasional 'switch account' dialog that blocks the
  description box and the publish button
2026-08-13 09:49:34 +08:00
suihf ad49ebae7a fix(douyin): harden cover, collection and self-declaration flows
- Set cover via native click with retries; skip gracefully instead of failing the whole order
- Select the collection via its dedicated Semi select with overlay cleanup
- Rewrite self-declaration dialog handling (entry/dialog/option/confirm) and reuse it in upload
- Type description before tags and fill via set_input_files with robust upload input detection
- Keep SMS verification code prompt as a publish-loop guard
2026-08-13 09:48:40 +08:00
suihf 3590c526b0 fix(xiaohongshu): declare repost source and harden cover upload
- check_original_declaration: replace the original checkbox with the
  '来源转载' (repost) declaration flow: open the declaration picker, select
  '来源转载', fill the media name, confirm. Falls back to JS click when the
  element text is wrapped in non-interactive spans
- set_thumbnail: switch to the '上传封面' tab and target the upload-wrapper
  file input instead of the cover-plugin-preview selector; skip gracefully on
  failure and let the video first frame be used
2026-08-13 09:45:44 +08:00
FromTX2SJ 9342a343ab fix(tencent): 上传卡住时要说话 —— iframe 等待 / 重试上限 / 超时
三个问题都是「失败了但看起来像正常」,实测于 2026-08-11。

1. open_upload_page 不等 iframe 加载完
   上传表单在 micro/content/post/create 这个 iframe 里,domcontentloaded
   时它还是空的。紧接着找 input[type=file] 找不到,报「未找到视频号文件
   上传框」——而失败截图上左栏渲染正常、主内容区一片空白,完全不像是
   加载没完成。加一个 networkidle 等待。

2. 找上传框的重试窗口只有 20 秒
   实测这个 iframe 挂上 input 要几十秒。提到 60 秒,并在最终失败时留
   截图 + url + frames:这个错误的可能原因太多(没登录 / 落到首页 /
   iframe 没加载完 / 平台改版),只看错误字符串没法区分。

3. wait_for_upload_complete 是没有出口的 while True  ← 最严重
   上传出错就删掉重传,失败再删再传,永远循环;中间每 2 秒打一行
   「正在上传视频中...」——这条日志和真的在传一模一样,从外面完全分不出。

   实测 172MB / 上行 ~0.5Mbps:每次传到 4 分钟左右报错然后重来,
   循环了近 2 小时也不会停,进程也不会退。用户看到的只有「正在上传
   视频中」,真相是同一段视频被反复上传了 20 多次。

   改成 1 小时超时 + 3 次重试上限,两个都带现场截图报明确的错。
   进度日志从每 2 秒一行降到 30 秒一行并带上已等时长(原来 50 分钟
   刷了 1600 行同样的话)。
2026-08-11 19:55:52 +08:00
tankztz ad2419ef16 fix(tencent): wait for real-name verification 2026-08-10 02:09:51 +08:00
tankztz 8ee7bcdb8a fix(tencent): poll delayed publish entry 2026-08-07 17:04:43 +08:00
tankztz 2dfae17775 fix(tencent): support current video publish page 2026-08-06 18:57:56 +08:00
AlleriaandGitHub dde0eacb91 Merge pull request #250 from mechanic-Q/feat/douyin-explicit-declaration
fix(douyin): make self-declaration explicit and fail-closed (follow-up to #213)
2026-07-23 08:59:35 +08:00
snow-moonlight1 662633bb3d fix(tencent): cookie_auth 误报有效 + 上传页登录跳转前置检测
视频号 cookie 失效时, post/create 页面先正常加载, 数秒后才被前端 JS
跳转到 login.html。原 cookie_auth 在跳转前检查, 误报 'cookie 有效',
放行后在上传页报出无关错误(如 '未找到视频号文件上传框')。

- cookie_auth: 等待 8 秒确认是否被踢到 login.html, 外加 qrconnect
  登录 iframe 双保险, 消除误报
- open_upload_page: 同样的跳转检测前置, cookie 失效时报明确错误
  '请重新扫码登录后再发布'
2026-07-23 00:32:57 +08:00
snow-moonlight1 f4693db9d7 fix(tencent): adapt QR code extraction to new qrconnect login iframe
The WeChat Channels login page now embeds the QR code in an
open.weixin.qq.com/connect/qrconnect iframe whose img.qrcode src is a
relative path (e.g. /connect/qrcode/xxxx) instead of an inline
data:image/ URL. The previous logic looked for a login-for-iframe
frame and only accepted data:image/ sources, so login always failed
with '未获取到视频号登录二维码地址'.

Changes:
- Detect the qrconnect iframe and resolve the relative img src,
  download the QR image via the browser context and convert it to a
  data URL so downstream save/decode logic stays unchanged
- Keep the legacy login-for-iframe and selector fallbacks
- Tolerate QR extraction failure: the login flow now continues and
  lets the user scan directly in the headed browser instead of
  aborting the whole login
2026-07-21 13:42:10 +08:00
lmr e89d3a875a fix(douyin): require explicit self-declaration 2026-07-18 02:07:55 +08:00
anzhen9 395c6434bb feat(douyin): 支持终端交互输入短信验证码 2026-07-11 17:18:13 +08:00
anzhen9 be77aaef8b feat(douyin): 处理短信验证码弹窗 2026-07-11 16:52:42 +08:00
anzhen9 fa59d50030 Revert "feat(douyin): 添加短信验证码弹窗处理并移除多余浏览器参数"
This reverts commit 77b372a56e.
2026-07-11 16:47:04 +08:00
anzhen9 77b372a56e feat(douyin): 添加短信验证码弹窗处理并移除多余浏览器参数 2026-07-11 16:43:37 +08:00
AlleriaandGitHub 90b751f791 Merge branch 'main' into fix/douyin-cli-login-overhaul 2026-06-27 01:15:42 +08:00
OpenClaw Contributor ae72b87141 fix(douyin): overhaul CLI auto-login + supporting fixes (rebased on main)
4 commits squashed into 1 due to force-push via API. See PR #229 body for full description.

Key changes:
- cookie_auth: polling loop (10s) instead of single count() snapshot (race fix)
- cookie_auth: env var DOUYIN_COOKIE_AUTH_HEADLESS for linux server headless override
- _extract_douyin_qrcode_src: 4-tier selector fallback (animate_qrcode_container)
- _wait_for_douyin_login: 2FA detection with warning
- export_douyin_cookie: USERNAME from os.environ
- ks/xiaohongshu uploader: chromium default + cdp_url support for ks
2026-06-25 18:44:55 +08:00
changyandaoc 51209a1331 fix(douyin): cookie_auth 间歇性误判失效——重试3次+宽松判定
有头校验仍会因页面慢/瞬时跳转让 wait_for_url(精确URL,5s) 超时误判,
导致 check 通过但 upload 前置校验失败。改为重试3次 + 等2.5s稳定 +
宽松判定(URL含 content/upload 且无登录文案)。
2026-06-22 18:44:00 +08:00
AlleriaandGitHub 70a58b739f Merge pull request #233 from tankztz/tankztz/xhs-configurable-creator-domain
fix: allow configuring Xiaohongshu creator domain
2026-06-21 21:20:37 +08:00
tankztz ea2bcb0d8a fix: allow configuring Xiaohongshu creator domain 2026-06-20 09:45:31 +08:00
nirolee 5b26106fb1 fix(youtube): prevent #Shorts hashtag autocomplete from blocking upload
Title and description were typed character-by-character, so a '#'
(e.g. '#Shorts') triggered YouTube's topic-autocomplete dropdown that
follows the caret and covers the Next/Publish buttons, stalling the
upload. Switch to fill() (one-shot insert, no per-keystroke autocomplete)
with a type() fallback, and add _dismiss_autocomplete (blur, then Escape
only when a dropdown is actually visible so the upload dialog is never
closed by mistake).
2026-06-20 03:34:55 +09:00
AlleriaandGitHub c9d6d5b39c Merge branch 'main' into main 2026-06-19 13:51:25 +08:00
AlleriaandGitHub 23b0cb2468 Merge pull request #227 from nirolee/feat/youtube-uploader
feat(youtube): add YouTube uploader via browser automation
2026-06-19 13:44:45 +08:00
DerekEXS 42d39f2693 chore(xiaohongshu): switch default channel to chromium
Same reason as the ks uploader: bundled patchright cannot reliably resolve the system 'chrome' channel on every platform, so use the bundled 'chromium' channel by default and rely on conf.py:LOCAL_CHROME_PATH for users who want real Chrome.
2026-06-16 20:12:58 +08:00