92 lines
3.1 KiB
JavaScript
92 lines
3.1 KiB
JavaScript
import { connect } from "puppeteer-real-browser";
|
|
import path from "path";
|
|
import { fileURLToPath } from 'url';
|
|
import { createDirectoryIfNotExists, sleep, extractCookie, getSessionCookie } from "./utils.mjs";
|
|
|
|
const __filename = fileURLToPath(import.meta.url);
|
|
const __dirname = path.dirname(__filename);
|
|
|
|
async function initSessions(config) {
|
|
console.log(`本项目依赖Chrome浏览器,请勿关闭弹出的浏览器窗口。如果出现错误请检查是否已安装Chrome浏览器。`);
|
|
var sessions = {};
|
|
|
|
// extract essential jwt session and token from cookie
|
|
for (let index = 0; index < config.sessions.length; index++) {
|
|
let session = config.sessions[index];
|
|
var { jwtSession, jwtToken } = extractCookie(session.cookie);
|
|
if (jwtSession && jwtToken) {
|
|
try {
|
|
let jwt = JSON.parse(Buffer.from(jwtToken.split(".")[1], "base64").toString());
|
|
sessions[jwt.user.name] = {
|
|
configIndex: index,
|
|
jwtSession,
|
|
jwtToken,
|
|
valid: false,
|
|
};
|
|
console.log(`已添加 #${index} ${jwt.user.name}`);
|
|
} catch (e) {
|
|
console.error(`解析第${index}个cookie失败`);
|
|
}
|
|
} else {
|
|
console.error(`第${index}个cookie中缺少jwtSession或jwtToken,请重新获取`);
|
|
}
|
|
}
|
|
console.log(`已添加 ${Object.keys(sessions).length} 个有效cookie,开始验证有效性`);
|
|
|
|
for (var username of Object.keys(sessions)) {
|
|
var session = sessions[username];
|
|
createDirectoryIfNotExists(path.join(__dirname, "browser_profiles", username));
|
|
await connect({
|
|
headless: 'auto',
|
|
turnstile: true,
|
|
customConfig: {
|
|
userDataDir: path.join(__dirname, "browser_profiles", username),
|
|
},
|
|
}).then(async (response) => {
|
|
const { page, browser, setTarget } = response;
|
|
await page.setCookie(...getSessionCookie(session.jwtSession, session.jwtToken));
|
|
|
|
page.goto("https://you.com", { timeout: 60000 });
|
|
await sleep(5000); // 等待加载完毕
|
|
// 如果遇到盾了就多等一段时间
|
|
var pageContent = await page.content();
|
|
if (pageContent.indexOf("https://challenges.cloudflare.com") > -1) {
|
|
console.log(`请在30秒内完成人机验证`);
|
|
page.evaluate(() => {
|
|
alert("请在30秒内完成人机验证");
|
|
});
|
|
await sleep(30000);
|
|
}
|
|
|
|
// get page content and try parse JSON
|
|
try {
|
|
let content = await page.evaluate(() => {
|
|
return fetch("https://you.com/api/user/getYouProState").then(res=>res.text());
|
|
});
|
|
let json = JSON.parse(content);
|
|
if (json.subscriptions.length > 0) {
|
|
console.log(`${username} 有效`);
|
|
session.valid = true;
|
|
session.browser = browser;
|
|
session.page = page;
|
|
} else {
|
|
console.log(`${username} 无有效订阅`);
|
|
await browser.close();
|
|
}
|
|
} catch (e) {
|
|
console.log(`${username} 已失效`);
|
|
await browser.close();
|
|
}
|
|
}).catch((e) => {
|
|
console.error(`初始化浏览器失败`);
|
|
console.error(e);
|
|
});
|
|
}
|
|
|
|
console.log(`验证完毕,有效cookie数量 ${Object.keys(sessions).filter((username) => sessions[username].valid).length}`);
|
|
|
|
return sessions;
|
|
|
|
}
|
|
|
|
export { initSessions }; |