You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Puppeteer配置多代理?现有方案报错求助

Puppeteer多代理配置问题解决

问题说明

原本单代理配置可正常运行,但尝试为每个独立Chrome窗口配置不同代理以实现隔离并行爬取时,出现net::ERR_NO_SUPPORTED_PROXIES错误。

错误信息

Error: net::ERR_NO_SUPPORTED_PROXIES at https://dnsleaktest.com

正常单代理代码

const puppeteer = require('puppeteer');

const proxy = 'myip:myport';
const username = 'myusername';
const password = 'mypassword';

(async () => {
    // 传入代理地址到--proxy-server参数
    const browser = await puppeteer.launch({
        args: [`--proxy-server=${proxy}`],
        headless: false,
        ignoreHTTPSErrors: true
    });

    const page = await browser.newPage()
    page.setDefaultNavigationTimeout(0);

    // 使用账号密码认证代理
    await page.authenticate({ username, password });

    await page.goto('https://dnsleaktest.com');
})();

用户的多代理问题代码

const puppeteer = require('puppeteer');
(async () => {
    let browsers = [];
    const proxies = [
        'socks5://myuser:mypass@host:port',
        'socks5://myuser:mypass@host:port',
        'socks5://myuser:mypass@host:port',
    ];
    const openWindow = async (proxy) => {
        try {
            const browser = await puppeteer.launch({ headless: false, ignoreHTTPSErrors: true, args: [`--proxy-server=${proxy}`] });
            const page = await browser.newPage();
            browsers.push({ browser, page });
            page.setDefaultNavigationTimeout(0);

            await page.setViewport({
                width: 992,
                height: 607
            });

            await page.goto('chrome://new-tab-page/', { waitUntil: 'load' });
            await page.goto('https://dnsleaktest.com/', { waitUntil: 'load' });
            console.log(`Window opened with proxy: ${proxy}`);
        } catch (error) {
            console.error(`Error opening window with proxy ${proxy}: ${error}`);
        }
    };

    // 批量启动代理窗口
    const openWindowPromises = proxies.map(proxy => openWindow(proxy));
    await Promise.all(openWindowPromises);

    console.log('All windows opened or skipped due to dead proxies.');
})();

问题原因

Chrome的--proxy-server参数不支持直接在代理URL中嵌入用户名和密码(如socks5://myuser:mypass@host:port格式),这种写法会导致代理配置无法被识别,进而抛出ERR_NO_SUPPORTED_PROXIES错误。正确的做法是将代理地址与认证信息分离,通过page.authenticate()单独传入账号密码。

修正后的多代理代码

const puppeteer = require('puppeteer');

(async () => {
    let browsers = [];
    // 改为存储代理地址、账号、密码的对象数组
    const proxyConfigs = [
        {
            proxy: 'socks5://host:port',
            username: 'myuser',
            password: 'mypass'
        },
        {
            proxy: 'socks5://host:port',
            username: 'myuser',
            password: 'mypass'
        },
        {
            proxy: 'socks5://host:port',
            username: 'myuser',
            password: 'mypass'
        }
    ];

    const openWindow = async (config) => {
        try {
            const browser = await puppeteer.launch({ 
                headless: false, 
                ignoreHTTPSErrors: true, 
                args: [`--proxy-server=${config.proxy}`] 
            });
            const page = await browser.newPage();
            browsers.push({ browser, page });
            page.setDefaultNavigationTimeout(0);

            await page.setViewport({
                width: 992,
                height: 607
            });

            // 添加代理认证步骤
            await page.authenticate({ 
                username: config.username, 
                password: config.password 
            });

            await page.goto('https://dnsleaktest.com/', { waitUntil: 'load' });
            console.log(`Window opened with proxy: ${config.proxy}`);
        } catch (error) {
            console.error(`Error opening window with proxy ${config.proxy}: ${error}`);
        }
    };

    // 并行启动所有代理窗口
    const openWindowPromises = proxyConfigs.map(config => openWindow(config));
    await Promise.all(openWindowPromises);

    console.log('All windows opened or skipped due to dead proxies.');
})();

额外注意事项

  • 确保代理地址格式正确(如socks5://host:port,不要附带认证信息)
  • 若使用HTTP/HTTPS代理,将协议改为http://或https://即可
  • 并行启动多个浏览器实例时,注意系统资源占用,避免因资源不足导致异常

内容的提问来源于stack exchange,提问作者Parvinder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 13:07:43