为什么结合Apify使用Puppeteer-Extra时solveRecaptchas()不是有效函数?
问题根因
你定义了用于挂载验证码插件的addPlugins函数,但全程没有调用该函数,因此puppeteer-extra没有实际加载recaptcha插件,自然不会向page实例注入solveRecaptchas方法,调用时就会报方法不存在的错误。
修复方案
- 执行
addPlugins函数完成插件加载,建议在初始化爬虫前调用即可。 - 你注释掉的StealthPlugin建议开启,可降低被目标站点反爬识别的概率。
修正后的核心代码示例:
/**************************************/ /* Setup requires */ /**************************************/ const Apify = require("apify"); const puppeteer = require("puppeteer-extra"); const PuppeteerExtraPluginRecaptcha = require("puppeteer-extra-plugin-recaptcha"); const StealthPlugin = require("puppeteer-extra-plugin-stealth"); /**************************************/ /* Use Recaptcha */ /**************************************/ function addPlugins() { // 加载隐身插件 puppeteer.use(StealthPlugin()); const captchaOptions = { provider: { id: "2captcha", token: "my-2captcha-api-key", }, solveInactiveChallenges: true, visualFeedback: true, }; puppeteer.use(PuppeteerExtraPluginRecaptcha(captchaOptions)); } /**************************************/ /* Through Apify? */ /**************************************/ Apify.main( async () => { // 新增:调用函数完成插件加载 addPlugins(); /**************************************/ /* Cue up URL */ /**************************************/ const requestQueue = await Apify.openRequestQueue(); await requestQueue.addRequest( { url: "https://www.google.com/recaptcha/api2/demo", } ); /**************************************/ /* Puppeteer Crawler */ /**************************************/ const crawler = new Apify.PuppeteerCrawler( { requestQueue, launchContext: { launcher: puppeteer, launchOptions: { devtools: false, headless: false, ignoreHTTPSErrors: true, defaultViewport: { width: 1366, height: 768 }, timeout: 60 * 1000, args: [ "--no-sandbox", "--disable-web-security", "--disable-setuid-sandbox", "--disable-features=IsolateOrigins,site-per-process", "--flag-switches-begin --disable-site-isolation-trials --flag-switches-end", ], }, }, handlePageFunction: async ({ request, page }) => { // solve captcha (if one exists) await page.solveRecaptchas(); // additional code }, }); await crawler.run(); } );
其他注意事项
如果修复后仍有报错,可检查以下两点:
- 确保
puppeteer、puppeteer-extra、puppeteer-extra-plugin-recaptcha三者的版本兼容,建议升级到最新稳定版 - 确认你填写的2captcha API密钥有效,且账号内有足够的余额用于验证码识别
内容的提问来源于stack exchange,提问作者Robert Andrews
相关产品推荐
相关产品推荐

