在Playwright启动时,如何为SOCKS5代理注入凭据?
问题: 我想在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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。