Files
yaoyaoai/scripts/nodejs/publish_login.js
fengchuanhn@gmail.com 7f57dfa9ed 11
2026-05-21 00:19:11 +08:00

83 lines
2.4 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"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 */
}
}
};