我正在研究一些刮擦技术。到目前为止,我使用无头 Chrome 119、[电子邮件受保护] 和 [电子邮件受保护]。我尝试绕过 CreepJS 检查:https://abrahamjuliot.github.io/creepjs/
有一个检查我看不懂,它是Worker/userAgent:
我的 navigator.userAgent 已成功被覆盖
const userAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36';
await page.setUserAgent(userAgent);
但是 Worker.userAgent 仍然是无头的。为了理解这种行为以及如何避免它,我尝试实现我自己的网络工作者,例如
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<h3>Worker test</h3>
<script>
function sleep(ms = 0) {
return new Promise(r => setTimeout(r, ms));
}
async function checkWorkerNavigator() {
const w = new Worker('worker_test.js');
let ready = false, res = undefined;
// console.log(window.navigator.userAgent);
w.onmessage = (e) => {
ready = true;
res = e.data;
console.log(res);
};
}
window.onload = function() {
checkWorkerNavigator();
}
</script>
</body>
</html>
// worker_test.js
postMessage(self.navigator.userAgent);
但是当我通过无头 Chrome 访问它时,这个虚拟页面返回覆盖的“headful”UA (Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36) .
CreepJS 的 Web Worker 代码似乎比我的复杂得多,https://github.com/abrahamjuliot/creepjs/blob/master/src/worker/index.ts,而且我没能弄清楚如何创建 Web使其返回实际的无头用户代理。
任何有关导航器和网络工作者的用户代理之间差异原因的指南或文章将不胜感激。
不要从页面本身欺骗用户代理,指纹脚本无论如何都会从自己的脚本启动自己的工作程序,并且您无法对其进行操作(除了使用完全复杂的 ServiveWorker 规则,这些规则会影响回应但是...)。
相反,请在启动 Chrome 实例时使用
--user-agent=YOUR-STRING-HERE
命令行开关。