在Playwright启动时,如何为SOCKS5代理注入凭据?

前端开发 2026-07-09

问题: 我想在Playwright(Chromium)中使用带用户名/密码认证的SOCKS5代理。当我在代理URL中包含凭据时,会出现以下错误: net::ERR_PROXY_AUTH_UNSUPPORTED

期望行为: 浏览器应该启动,与SOCKS5代理进行认证,并使用代理的IP地址成功加载目标页面。

最短可复现代码:

const { chromium } = require('playwright');

(async () => {
  // This approach triggers the error
  const browser = await chromium.launch({
    proxy: {
      server: 'socks5://username:password@proxy-address:port' 
    }
  });

  const page = await browser.newPage();
  try {
    await page.goto('https://example.com');
  } catch (e) {
    console.error(e.message);
  }
  await browser.close();
})();

我尝试了什么: 我怀疑问题出在基于URL的认证上。我的SOCKS5代理在本地浏览器设置中工作正常,因此凭据本身是有效的。如何在Playwright中以编程方式传递这些凭据,以满足Chromium的认证要求?

解决方案

你应该使用代理URL格式 socks5://username:password@IP:PORT

例如:

const { chromium } = require('playwright');

(async () => {
  const proxyHost = '31.59.20.176';
  const proxyPort = 6754;
  const proxyUser = 'myuser';
  const proxyPass = 'mypassword';

  const proxyUrl = `socks5://${proxyUser}:${proxyPass}@${proxyHost}:${proxyPort}`;

  const browser = await chromium.launch({
    headless: false,

    proxy: {
      server: `socks5://${proxyHost}:${proxyPort}`,
      username: proxyUser,
      password: proxyPass,
    },

    args: [
      `--proxy-server=${proxyUrl}`,
    ],
  });

  const page = await browser.newPage();

  await page.goto('https://httpbin.org/ip');

  console.log(await page.textContent('body'));

  await browser.close();
})();

或通过context完整地使用

const { chromium } = require('playwright');

(async () => {
  const proxyHost = '31.59.20.176';
  const proxyPort = 6754;
  const proxyUser = 'myuser';
  const proxyPass = 'mypassword';

  const proxyUrl = `socks5://${proxyUser}:${proxyPass}@${proxyHost}:${proxyPort}`;

  const browser = await chromium.launch({
    headless: false,

    proxy: {
      server: `socks5://${proxyHost}:${proxyPort}`,
      username: proxyUser,
      password: proxyPass,
    },

    args: [
      `--proxy-server=${proxyUrl}`,
    ],
  });

  const context = await browser.newContext({
    proxy: {
      server: `socks5://${proxyHost}:${proxyPort}`,
      username: proxyUser,
      password: proxyPass,
    },
  });

  const page = await context.newPage();

  await page.goto('https://httpbin.org/ip');

  console.log(await page.textContent('body'));

  await browser.close();
})();
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章