使用Puppeteer通过谷歌登录YouTube被反爬拦截如何绕过验证
解决方案
- 移除异常启动参数
你当前配置的--disable-web-security、--disable-features=IsolateOrigins,site-per-process属于谷歌反爬系统重点标记的异常浏览器参数,直接删除。同时新增--disable-blink-features=AutomationControlled参数,清除浏览器自带的自动化标记。 - 替换浏览器内核
不要使用Puppeteer自带的Chromium,在启动配置中指定你本地安装的正式版Chrome路径,正式版Chrome的指纹特征和普通用户完全一致,被识别的概率大幅降低。 - 模拟真实用户操作
输入账号时添加随机输入延迟,点击按钮前先等待元素完全加载、增加随机停顿,不要输入完成后立刻点击,和真人操作行为对齐。 - 优化页面初始化逻辑
不要直接取用浏览器启动默认生成的第一个标签页,手动新建标签页再操作,避免默认页面残留自动化标记。
修改后可正常通过验证的代码如下:
const puppeteer = require('puppeteer-extra') const StealthPlugin = require('puppeteer-extra-plugin-stealth') puppeteer.use(StealthPlugin()) async function start(){ var browser = await puppeteer.launch({ headless: false, slowMo: 30, // 替换为你本地Chrome的实际安装路径 executablePath: '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome', ignoreDefaultArgs: ['--disable-extensions'], args: [ '--window-size=1280,800', '--hide-scrollbars', '--no-first-run', '--no-default-browser-check', '--disable-blink-features=AutomationControlled' ], }) // 手动新建页面,不使用默认页面 var page = await browser.newPage() await page.setViewport({ width: 1280, height: 800 }) await page.goto('https://www.youtube.com/account'); // 等待账号输入框加载完成 await page.waitForSelector('#identifierId', {timeout: 15000}) // 模拟真人随机输入速度 await page.type('#identifierId', 'soapy1310@gmail.com', {delay: 60 + Math.floor(Math.random() * 60)}) // 随机停顿1-2秒再点击下一步 await page.waitForTimeout(1000 + Math.floor(Math.random() * 1000)) await page.click('.VfPpkd-RLmnJb'); } start()
内容的提问来源于stack exchange,提问作者Ryan Tang
相关产品推荐
相关产品推荐

