puppeteer - Puppeteer 机器人检测
问题描述
我正在尝试使用 puppeteer 登录到 nike 网站,但我收到错误可能是由于反机器人。我已经尝试了一些方法来避免被检测到,但没有任何运气。这是我的代码:
//const puppeteer = require('puppeteer');
const puppeteer = require("puppeteer-extra");
const pluginStealth = require("puppeteer-extra-plugin-stealth");
puppeteer.use(pluginStealth());
//Create Sleep function to use in Async/Await function
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
const randomDelay = (min, max) =>
Math.floor(Math.random() * (max - min + 1) + min);
(async () => {
await sleep(1000);
var browser;
browser = await puppeteer.launch({
executablePath: 'C:/Program Files/Google/Chrome/Application/chrome.exe',
headless: false,
args: ['--no-sandbox', '--disable-setuid-sandbox', '--disable-web-security'],
});
const page = await browser.newPage();
await page.setUserAgent(
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36',
);
await page.setExtraHTTPHeaders({
'Accept-Language': 'en-GB,en-US;q=0.9,en;q=0.8',
});
await page.goto('https://www.nike.com/us/en_us/e/nike-plus-membership', {
waitUntil: 'networkidle0',
});
const emailSelector = '.nike-unite-text-input.emailAddress input';
await page.waitFor(emailSelector);
await page.waitFor(randomDelay(300, 600));
const inputs = [emailSelector, '.nike-unite-text-input.password input'];
await page.type(inputs[0], 'xyz@gmail.com', {
delay: randomDelay(200, 300),
});
await page.waitFor(randomDelay(300, 600));
await page.type(inputs[1], 'XYZDEFEWD!"', {
delay: randomDelay(200, 300),
});
const submitBtn = '.nike-unite-submit-button.loginSubmit input';
await page.waitFor(randomDelay(200, 500));
await page.click(submitBtn);
})();
有什么方法可以识别网站使用什么来检测我正在使用 puppeteer?
解决方案
可能有避免机器人检测的完整证明解决方案,但这里有一些你可以尝试的方法
尝试通过多个国家/地区代理您的 IP
尝试在 n/w 调用中添加随机间隔
使用随机用户代理而不是固定用户代理,并更改视口大小。
推荐阅读
- python - 通过引发 404 来保护页面
- javascript - mongodb - 聚合游标计数
- python - 如何使用函数更改返回函数/更改变量?
- java - 嵌套的 LinearLayouts LayoutTransition 动画在子移除时跳转
- dart - 如何从语言代码中获取语言的全名?(例如:从 'en' 到 'English')
- c# - 缺少使用 NUnit 3.12 的 TestCase 属性...?
- ruby - 当块有两个参数时,Ruby Array#map 的行为如何?
- android - Android Studio 错误模拟器:dsound:警告:语音未捕获 api 28 模拟器不起作用
- r - 使用 lapply 基于多个条件和子集创建新变量
- email - 将电子邮件传送到解析器脚本时出现“参数 1 中的错误,字符 3:找不到选项”