This commit is contained in:
fengchuanhn@gmail.com
2026-05-21 00:19:11 +08:00
parent 1325ff92e5
commit 7f57dfa9ed
31 changed files with 10437 additions and 12 deletions

View File

@@ -0,0 +1,82 @@
"use strict";
const { delay, newPublishPage, LOGIN_URLS } = require("./publish_browser.js");
const LOGIN_SELECTORS = {
douyin: ["#header-avatar", ".creator-avatar", 'input[type="file"]'],
kuaishou: ['[class*="avatar"]', ".user-avatar", '[class*="upload"]'],
shipin: ['[class*="avatar"]', ".avatar"],
xiaohongshu: ['[class*="avatar"]', ".user-avatar", '[class*="upload"]'],
};
const URL_EXCLUDE = {
douyin: ["login", "passport"],
kuaishou: ["login", "passport"],
shipin: ["login", "auth", "qr"],
xiaohongshu: ["login", "passport", "account"],
};
async function checkLoggedIn(page, platform) {
const url = page.url();
const excludes = URL_EXCLUDE[platform] || URL_EXCLUDE.douyin;
if (excludes.some((k) => url.includes(k))) return false;
const sels = LOGIN_SELECTORS[platform] || LOGIN_SELECTORS.douyin;
for (const sel of sels) {
const el = await page.$(sel);
if (el) return true;
}
return false;
}
globalThis.__nodejsMain = async function main(params) {
const p = params || {};
const platform = String(p.platform || "").trim();
const accountId = p.accountId || null;
const loginUrl = LOGIN_URLS[platform];
if (!loginUrl) {
return { success: false, error: `不支持的平台: ${platform}` };
}
globalThis.__native?.emitProgress?.("正在打开登录页,请在浏览器中完成登录…");
const page = await newPublishPage(platform, accountId, []);
try {
await page.goto(loginUrl, { waitUntil: "domcontentloaded", timeout: 60000 });
await delay(3000);
const maxMs = 300000;
const start = Date.now();
while (Date.now() - start < maxMs) {
if (await checkLoggedIn(page, platform)) {
const cookies = await page.cookies();
let nickname = "";
try {
nickname = await page.$eval(
".username, .account-name, .user-name, .nickname",
(el) => (el.textContent || "").trim(),
);
} catch {
nickname = "已登录用户";
}
return {
success: true,
message: "登录成功",
nickname: nickname || "已登录用户",
uid: `user_${Date.now()}`,
cookies,
};
}
await delay(2000);
globalThis.__native?.emitProgress?.("等待登录完成…");
}
return {
success: false,
error: "登录超时5 分钟),请重试",
};
} finally {
try {
await page.close();
} catch {
/* keep browser for user */
}
}
};