Node.js Selenium代理配置无效:为何仍使用本地IP?
排查WebDriver代理不生效的问题
让我帮你梳理下代理设置后仍用本地IP的常见原因,你可以逐一排查:
代理参数格式错误
很多时候问题出在proxy.manual的参数格式上,Selenium的manual方法要求代理地址以数组形式传入,而不是单个字符串。比如你的代码里应该写成:var driver = new webdriver.Builder() .withCapabilities(webdriver.Capabilities.chrome()) .setProxy(proxy.manual({http: ['103.87.16.2:80'], https: ['103.87.16.2:80']})) .build();注意:如果你的请求包含HTTPS站点,必须同时配置
https代理,否则HTTPS请求会绕过HTTP代理直接用本地IP。ChromeDriver与Selenium版本兼容性
不同版本的Selenium对代理配置的API可能有变化。如果你用的是较新的Selenium版本,建议用Proxy类来构建配置,语法更清晰也更可靠:const { Builder, Proxy } = require('selenium-webdriver'); // 构建代理对象 const proxyConfig = new Proxy() .setHttpProxy('103.87.16.2:80') .setHttpsProxy('103.87.16.2:80'); const driver = new Builder() .forBrowser('chrome') .setProxy(proxyConfig) .build();浏览器默认配置或插件干扰
Chrome可能会加载本地的代理设置,或者有VPN、代理切换类插件覆盖了代码配置。你可以尝试启动Chrome时禁用默认代理并开启无痕模式,避免缓存和插件影响:const chrome = require('selenium-webdriver/chrome'); const options = new chrome.Options() .addArguments('--incognito') // 无痕模式 .addArguments('--no-proxy-server'); // 禁用浏览器默认代理 var driver = new webdriver.Builder() .withCapabilities(webdriver.Capabilities.chrome()) .setChromeOptions(options) .setProxy(proxy.manual({http: ['103.87.16.2:80'], https: ['103.87.16.2:80']})) .build();代理本身不可用
先确认你用的代理103.87.16.2:80是正常工作的。可以在终端用curl测试:curl -x http://103.87.16.2:80 https://api.ipify.org如果返回的不是代理IP,说明代理本身失效、需要认证或者被防火墙拦截了,这种情况下WebDriver会自动 fallback到本地网络。
代码执行顺序问题
虽然影响不大,但有些版本的Selenium要求setProxy方法放在withCapabilities之前,你可以调整顺序试试:var driver = new webdriver.Builder() .setProxy(proxy.manual({http: ['103.87.16.2:80'], https: ['103.87.16.2:80']})) .withCapabilities(webdriver.Capabilities.chrome()) .build();
内容的提问来源于stack exchange,提问作者chosirai
相关产品推荐
相关产品推荐

