From e6dec231ea314976b7524682ad2a1dc3dab9e575 Mon Sep 17 00:00:00 2001 From: "949036910@qq.com" <> Date: Thu, 28 May 2026 20:02:15 +0800 Subject: [PATCH] 11 --- scripts/nodejs/publish_login.js | 49 +++++++++++++++++++++++++++++++-- scripts/nodejs/publish_open.js | 32 +++++++++++++++++++++ 2 files changed, 79 insertions(+), 2 deletions(-) create mode 100644 scripts/nodejs/publish_open.js diff --git a/scripts/nodejs/publish_login.js b/scripts/nodejs/publish_login.js index caadf5c..b6c5525 100644 --- a/scripts/nodejs/publish_login.js +++ b/scripts/nodejs/publish_login.js @@ -6,6 +6,7 @@ const { LOGIN_URLS, closePublishBrowser, } = require("./publish_browser.js"); +const DOUYIN_HOME_URL = "https://creator.douyin.com/creator-micro/home"; const LOGIN_SELECTORS = { douyin: ["#header-avatar", ".creator-avatar", 'input[type="file"]'], @@ -61,6 +62,45 @@ async function resolveUid(page) { return ""; } +async function resolveDouyinLabel(page) { + try { + await page.goto(DOUYIN_HOME_URL, { + waitUntil: "domcontentloaded", + timeout: 60000, + }); + await delay(2000); + } catch { + /* ignore */ + } + + try { + const text = await page.$eval( + '[class^="unique_id-"], [class*=" unique_id-"]', + (el) => (el.textContent || "").trim(), + ); + const m = String(text).match(/抖音号[::]\s*([a-zA-Z0-9._-]+)/); + if (m?.[1]) return m[1]; + } catch { + /* ignore */ + } + + try { + const fallback = await page.evaluate(() => { + const all = Array.from(document.querySelectorAll("div,span,p")); + const node = all.find((el) => + /抖音号[::]/.test((el.textContent || "").trim()), + ); + return (node?.textContent || "").trim(); + }); + const m = String(fallback).match(/抖音号[::]\s*([a-zA-Z0-9._-]+)/); + if (m?.[1]) return m[1]; + } catch { + /* ignore */ + } + + return ""; +} + globalThis.__nodejsMain = async function main(params) { const p = params || {}; const platform = String(p.platform || "").trim(); @@ -82,6 +122,7 @@ globalThis.__nodejsMain = async function main(params) { if (await checkLoggedIn(page, platform)) { const cookies = await page.cookies(); const resolvedUid = await resolveUid(page); + let douyinId = ""; let nickname = ""; try { nickname = await page.$eval( @@ -101,11 +142,15 @@ globalThis.__nodejsMain = async function main(params) { } catch { avatar = ""; } + if (platform === "douyin") { + douyinId = await resolveDouyinLabel(page); + } return { success: true, message: "登录成功", - nickname: nickname || "已登录用户", - uid: resolvedUid || `user_${Date.now()}`, + nickname: douyinId || nickname || "已登录用户", + uid: douyinId || resolvedUid || `user_${Date.now()}`, + label: douyinId || nickname || "已登录用户", avatar, cookies, }; diff --git a/scripts/nodejs/publish_open.js b/scripts/nodejs/publish_open.js new file mode 100644 index 0000000..006c6cb --- /dev/null +++ b/scripts/nodejs/publish_open.js @@ -0,0 +1,32 @@ +"use strict"; + +const { newPublishPage, LOGIN_URLS } = require("./publish_browser.js"); + +const OPEN_URLS = { + douyin: "https://creator.douyin.com/creator-micro/content/upload", + kuaishou: "https://cp.kuaishou.com/article/publish/video", + shipin: "https://channels.weixin.qq.com/post/list", + xiaohongshu: "https://creator.xiaohongshu.com/publish/publish", +}; + +globalThis.__nodejsMain = async function main(params) { + const p = params || {}; + const platform = String(p.platform || "").trim(); + const accountId = p.accountId || null; + const cookies = Array.isArray(p.cookies) ? p.cookies : []; + const targetUrl = OPEN_URLS[platform] || LOGIN_URLS[platform]; + + if (!targetUrl) { + return { success: false, message: `不支持的平台: ${platform}` }; + } + + const page = await newPublishPage(platform, accountId, cookies); + await page.goto(targetUrl, { waitUntil: "domcontentloaded", timeout: 60000 }); + + return { + success: true, + message: "已打开平台页面", + url: page.url(), + }; +}; +