Files
links/patches/puppeteer-api/lib/launch-real-browser.js
T

67 lines
2.0 KiB
JavaScript
Raw Normal View History

2026-06-20 04:47:34 +08:00
/**
* Real Browser 启动:puppeteer-real-browser(抗 Cloudflare Turnstile
*/
const {
BASE_LAUNCH_ARGS,
resolveChromeExecutable,
} = require('./constants');
const { resolveProfileDir } = require('./profile-dir');
2026-06-20 04:47:34 +08:00
let realBrowserModuleChecked = null;
let realBrowserAvailable = false;
function isRealBrowserAvailable() {
if (realBrowserModuleChecked !== null) return realBrowserAvailable;
2026-06-20 04:47:34 +08:00
try {
require.resolve('puppeteer-real-browser');
realBrowserAvailable = true;
} catch (_) {
realBrowserAvailable = false;
}
realBrowserModuleChecked = true;
return realBrowserAvailable;
}
/**
* @param {string[]} [extraArgs]
* @param {{ sessionKey?: string, profile?: 'standard'|'real' }} [options]
2026-06-20 04:47:34 +08:00
*/
async function launchRealBrowser(extraArgs = [], options = {}) {
2026-06-20 04:47:34 +08:00
if (!isRealBrowserAvailable()) {
throw new Error(
'puppeteer-real-browser 未安装。请在 puppeteer-api 目录执行: npm install [email protected]'
);
}
const { connect } = require('puppeteer-real-browser');
const chromePath = resolveChromeExecutable();
const profile = options.profile === 'real' ? 'real' : 'standard';
const profileDir = options.sessionKey ? resolveProfileDir(options.sessionKey, profile) : null;
const args = [...BASE_LAUNCH_ARGS, '--mute-audio', ...extraArgs];
if (profileDir) {
args.push(`--user-data-dir=${profileDir}`);
}
2026-06-20 04:47:34 +08:00
const result = await connect({
headless: false,
turnstile: true,
disableXvfb: false,
customConfig: { chromePath },
args,
2026-06-20 04:47:34 +08:00
});
const browser = result.browser;
const page = result.page;
if (!browser || !page) {
throw new Error('puppeteer-real-browser connect 未返回 browser/page');
}
browser.__persistentProfile = !!profileDir;
browser.__userDataDir = profileDir || '';
2026-06-20 04:47:34 +08:00
return { browser, page };
}
module.exports = {
isRealBrowserAvailable,
launchRealBrowser,
};