Puppeteer配置代理IP无效问题求助
解决Puppeteer连接antibotbrowser后代理不生效的问题
问题根源
你用antibotbrowser.startbrowser()启动浏览器后,再通过puppeteer.connect()传入--proxy-server参数是无效的——connect方法的args仅适用于启动新浏览器实例,对已运行的浏览器进程不产生作用。代理必须在启动浏览器时就配置好。
修复步骤
- 在antibotbrowser启动时注入代理参数:调用
antibotbrowser.startbrowser()时,传入包含代理配置的启动参数。 - 完善代理测试逻辑:给
testProxyConnection添加错误捕获,确保代理测试失败时能返回false,避免死循环。 - 修复变量声明问题:
switchProxy中的proxy和testPassed未声明,需添加let关键字。 - 修正拼写错误:原代码中
antibrowser.websokcet应为antibrowser.websocket,否则无法正常连接浏览器。
修改后的完整代码
antibotbrowser puppeteer-extra puppeteer-extra-plugin-stealth axios
const axios = require('axios'); const puppeteer = require('puppeteer-extra'); const puppeteerExtraPluginStealth = require('puppeteer-extra-plugin-stealth'); async function switchProxy(proxies) { let testPassed = false; let proxy; while (!testPassed && proxies.length > 0) { proxy = proxies[Math.floor(Math.random() * proxies.length)]; testPassed = await testProxyConnection(proxy); } return proxy; } async function testProxyConnection(proxy) { try { const protocol = proxy.protocol === 2 ? 'https' : 'http'; const response = await axios.get('https://httpbin.org/ip', { proxy: { host: proxy.ip, port: proxy.port, protocol: protocol }, timeout: 10000 }); console.log(`测试代理有效:${response.data.origin}`); return true; } catch (err) { console.log(`代理无效,跳过:${proxy.ip}:${proxy.port}`); return false; } } async function createBrowserWithProxyAndAntibot(proxy) { puppeteer.use(puppeteerExtraPluginStealth()); // 启动浏览器时直接传入代理参数 const antibrowser = await antibotbrowser.startbrowser({ args: [ `--proxy-server=${proxy.protocol === 2 ? 'https' : 'http'}://${proxy.ip}:${proxy.port}`, '--disable-features=site-per-process', '--no-sandbox', '--disable-setuid-sandbox', ], headless: false }); const browser = await puppeteer.connect({ browserWSEndpoint: antibrowser.websocket, headless: false, }); const page = await browser.newPage(); // 检查页面IP const checkIP = await page.goto('https://httpbin.org/ip'); const ipResult = await checkIP.json(); console.log(`页面当前IP: ${ipResult.origin}`); return { browser, page }; } (async () => { const proxies = await fetchProxiesFromAPI(); const proxy = await switchProxy(proxies); if (!proxy) { console.log("没有可用的代理"); return; } const { browser, page } = await createBrowserWithProxyAndAntibot(proxy); // 后续操作... })();
额外注意事项
- 免费代理稳定性差,建议使用付费代理服务提高成功率。
- 若代理需要账号密码,需添加
--proxy-auth=用户名:密码到启动参数中。
内容的提问来源于stack exchange,提问作者martinaaron123
相关产品推荐
相关产品推荐

