Node.js下Selenium配置代理的有效代码示例及解决方案求助
Node.js Selenium 带代理配置可用方案(2024 v4.x 版本适配)
以下方案基于官方selenium-webdriver v4.x 版本测试可用,适配Chrome/Edge等Chromium内核浏览器。
前置依赖安装
- 安装selenium官方依赖包:
npm install selenium-webdriver - 下载和本地Chrome/Edge浏览器主版本完全匹配的对应驱动,放在系统PATH路径或项目根目录
无身份认证代理配置示例(Chrome)
const { Builder, By } = require('selenium-webdriver'); const chrome = require('selenium-webdriver/chrome'); async function runSeleniumWithProxy() { // 代理地址格式:http://IP:端口 或 socks5://IP:端口 const proxyAddress = 'http://127.0.0.1:7890'; let options = new chrome.Options(); // 配置代理参数 options.addArguments(`--proxy-server=${proxyAddress}`); // 可选:无头模式运行,去掉注释即可启用 // options.addArguments('--headless=new'); options.addArguments('--no-sandbox'); options.addArguments('--disable-dev-shm-usage'); let driver = await new Builder() .forBrowser('chrome') .setChromeOptions(options) .build(); try { // 访问IP查询接口验证代理是否生效 await driver.get('https://api.ipify.org'); // 打印当前出口IP let ip = await driver.findElement(By.tagName('body')).getText(); console.log('当前访问IP:', ip); } finally { await driver.quit(); } } runSeleniumWithProxy();
带用户名密码认证的代理配置示例
const { Builder, By } = require('selenium-webdriver'); const chrome = require('selenium-webdriver/chrome'); async function runAuthenticatedProxy() { const proxyHost = '你的代理IP'; const proxyPort = '你的代理端口'; const proxyUser = '代理用户名'; const proxyPass = '代理密码'; let options = new chrome.Options(); // 配置代理地址 options.addArguments(`--proxy-server=http://${proxyHost}:${proxyPort}`); options.addArguments('--no-sandbox'); options.addArguments('--disable-dev-shm-usage'); // 关闭密码保存提示避免干扰 options.setUserPreferences({ 'profile.password_manager_enabled': false, 'credentials_enable_service': false, }); let driver = await new Builder() .forBrowser('chrome') .setChromeOptions(options) .build(); try { // 预先完成代理认证,避免后续访问弹认证框 await driver.get(`http://${proxyUser}:${proxyPass}@${proxyHost}:${proxyPort}`); // 访问目标站点验证 await driver.get('https://api.ipify.org'); let ip = await driver.findElement(By.tagName('body')).getText(); console.log('当前访问IP:', ip); } finally { await driver.quit(); } } runAuthenticatedProxy();
常见问题排查
- 确保
selenium-webdriver版本为v4.x,旧版v3的API存在差异无法直接复用 - 浏览器驱动版本必须和本地安装的浏览器主版本完全一致,否则会出现启动失败问题
- 代理地址前缀不能省略,http代理加
http://,socks5代理加socks5:// - 如果是内网自签名证书代理,可额外加
--ignore-certificate-errors参数忽略证书校验 - Edge浏览器适配仅需将
require('selenium-webdriver/chrome')替换为require('selenium-webdriver/edge'),setChromeOptions替换为setEdgeOptions即可,逻辑完全一致
内容的提问来源于stack exchange,提问作者user14982265
相关产品推荐
相关产品推荐

