feat(stealth): 增强指纹一致性并新增 creepjs 检测脚本
This commit is contained in:
@@ -51,4 +51,47 @@ describe('Stealth mode', () => {
|
||||
expect(signals.ownNavigator).toBe(false);
|
||||
expect(signals.ownPrototype).toBe(false);
|
||||
});
|
||||
|
||||
it('aligns navigator language with AGENT_BROWSER_LOCALE', async () => {
|
||||
const previousLocale = process.env.AGENT_BROWSER_LOCALE;
|
||||
process.env.AGENT_BROWSER_LOCALE = 'fr-FR';
|
||||
|
||||
try {
|
||||
browser = new BrowserManager();
|
||||
await browser.launch({ headless: true, stealth: true });
|
||||
|
||||
const languageSignals = await browser.getPage().evaluate(() => ({
|
||||
language: navigator.language,
|
||||
languages: navigator.languages,
|
||||
}));
|
||||
|
||||
expect(languageSignals.language).toBe('fr-FR');
|
||||
expect(languageSignals.languages).toEqual(['fr-FR', 'fr']);
|
||||
} finally {
|
||||
if (previousLocale === undefined) {
|
||||
delete process.env.AGENT_BROWSER_LOCALE;
|
||||
} else {
|
||||
process.env.AGENT_BROWSER_LOCALE = previousLocale;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
it('keeps worker and page userAgent free of HeadlessChrome tokens', async () => {
|
||||
browser = new BrowserManager();
|
||||
await browser.launch({ headless: true, stealth: true });
|
||||
|
||||
const userAgentSignals = await browser.getPage().evaluate(async () => {
|
||||
const pageUA = navigator.userAgent;
|
||||
const workerUA = await new Promise<string>((resolve) => {
|
||||
const source = 'postMessage(navigator.userAgent);';
|
||||
const blob = new Blob([source], { type: 'application/javascript' });
|
||||
const worker = new Worker(URL.createObjectURL(blob));
|
||||
worker.onmessage = (event) => resolve(String(event.data));
|
||||
});
|
||||
return { pageUA, workerUA };
|
||||
});
|
||||
|
||||
expect(userAgentSignals.pageUA).not.toContain('HeadlessChrome');
|
||||
expect(userAgentSignals.workerUA).not.toContain('HeadlessChrome');
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user