在木偶师额外上更改用户代理似乎不会生效



我正在尝试使用puppeteer抓取不同的网站。由于我使用puppeteer-extra(用于他们的steal- plugin),我决定使用他们的anonymize-ua插件来随机更改默认的user-agent,以进一步减少检测。

我试着遵循他们的解释,但是当我记录浏览器的实际用户代理时,它似乎没有起作用。

下面是我正在做的一个例子:

import puppeteer from 'puppeteer-extra';
import StealthPlugin from 'puppeteer-extra-plugin-stealth';
import UserAgent from 'user-agents';
const scrape = async (url: string) => {
// Set stealth plugin
const stealthPlugin = StealthPlugin();
puppeteer.use(stealthPlugin);
// Create random user-agent to be set through plugin
const userAgent = new UserAgent({ platform: 'MacIntel', deviceCategory: 'desktop' });
const userAgentStr = userAgent.toString();
console.log(`User Agent: ${userAgentStr}`);
const anonymizeUserAgentPlugin = require('puppeteer-extra-plugin-anonymize-ua')({
customFn: () => userAgentStr 
});
puppeteer.use(anonymizeUserAgentPlugin);
puppeteer
.launch({ headless: false })
.then(async (browser) => {
// Different from the one above
console.log(`User Agent: ${await browser.userAgent()}`);
})
.catch((e) => console.log(e));
}

虽然第一个user-agent字符串是随机的(从运行到运行),但在创建浏览器时记录的另一个字符串是实际运行的Chromium版本。

我错过了一些配置吗?或者我不应该像那样查看浏览器用户代理吗?

在深入挖掘了puppeteer-extra和anonymize-ua插件代码之后,我发现:

  1. page实例上更改了用户代理,因此尝试查看来自browser的用户代理不会导致使用实际的用户代理。正确的方法是通过devtools控制台记录navigator.useragent
  2. 在puppeteer上有一个开放的问题,即事件没有足够早地触发侦听器(例如使用onPageCreated的插件),以便能够在浏览器请求发生之前修改页面实例(例如user-agent)。似乎他们试图通过首先gotoabout:blank来解决这个问题。这个解决方法并没有为我解决这个问题,因为用户代理没有改变。

所以我的解决方案是复制插件中的代码,并在page上设置生成的用户代理:

puppeteer
.launch({ headless: false })
.then(async (browser) => {
browser
.pages()
.then(async ([page]) => {
await page.setUserAgent(userAgentStr);
})
.catch(async (e) => {
console.log(e);
await browser.close();
});
})
.catch((e) => console.log(e));

希望这有助于任何人!

默认puppeteer-extra-plugin-anonymize-ua'是用属性makeWindows: true设置的,它覆盖了你的平台设置'MacIntel'与'Windows NT 10.0;Win64;x64的

import puppeteer from 'puppeteer-extra';
import StealthPlugin from 'puppeteer-extra-plugin-stealth';
import UserAgent from 'user-agents';
const scrape = async (url: string) => {
// Set stealth plugin
const stealthPlugin = StealthPlugin();
puppeteer.use(stealthPlugin);
// Create random user-agent to be set through plugin
const userAgent = new UserAgent({ platform: 'MacIntel', deviceCategory: 'desktop' });
const userAgentStr = userAgent.toString();
console.log(`User Agent: ${userAgentStr}`);
const anonymizeUserAgentPlugin = require('puppeteer-extra-plugin-anonymize-ua')({
customFn: () => userAgentStr,
stripHeadless: true,
makeWindows: false,
});
puppeteer.use(anonymizeUserAgentPlugin);
puppeteer
.launch({ headless: false })
.then(async (browser) => {
// Different from the one above
console.log(`User Agent: ${await browser.userAgent()}`);
})
.catch((e) => console.log(e));
}

设置makeWindows如下例所示,这个问题应该得到解决。

我将存储库的链接附加到解决此问题的特定代码行

https://github.com/berstend/puppeteer-extra/blob/master/packages/puppeteer-extra-plugin-anonymize-ua/index.js力争

相关内容

  • 没有找到相关文章

最新更新