使用Selenium webdriver在Firefox中动态更改代理

Dan*_*lch 11 firefox proxy selenium

使用selenium webdriver时,有没有办法动态更改Firefox使用的代理?

目前我有使用代理配置文件的代理支持但有没有办法在浏览器处于活动状态并运行时更改代理?

我目前的代码:

proxy = Proxy({
    'proxyType': 'MANUAL',
    'httpProxy': proxy_ip,
    'ftpProxy': proxy_ip,
    'sslProxy': proxy_ip,
    'noProxy': '' # set this value as desired
    })
browser = webdriver.Firefox(proxy=proxy)
Run Code Online (Sandbox Code Playgroud)

提前致谢.

Bob*_*ani 12

这是一个稍微陈旧的问题.但实际上可以通过" hacky方式 " 动态更改代理我将使用Selenium JS和Firefox,但您可以按照您想要的语言进行操作.

第1步:访问"about:config"

driver.get("about:config");
Run Code Online (Sandbox Code Playgroud)

第2步:运行更改代理的脚本

var setupScript=`var prefs = Components.classes["@mozilla.org/preferences-service;1"]
.getService(Components.interfaces.nsIPrefBranch);

prefs.setIntPref("network.proxy.type", 1);
prefs.setCharPref("network.proxy.http", "${proxyUsed.host}");
prefs.setIntPref("network.proxy.http_port", "${proxyUsed.port}");
prefs.setCharPref("network.proxy.ssl", "${proxyUsed.host}");
prefs.setIntPref("network.proxy.ssl_port", "${proxyUsed.port}");
prefs.setCharPref("network.proxy.ftp", "${proxyUsed.host}");
prefs.setIntPref("network.proxy.ftp_port", "${proxyUsed.port}");
                  `;    

//running script below  
driver.executeScript(setupScript);

//sleep for 1 sec
driver.sleep(1000);
Run Code Online (Sandbox Code Playgroud)

使用$ {abcd}是放置变量的位置,在上面的示例中我使用的是处理串联的ES6,如图所示,您可以使用您选择的其他串联方法,具体取决于您的语言.

第3步:访问您的网站

driver.get("http://whatismyip.com");
Run Code Online (Sandbox Code Playgroud)

说明:上面的代码利用Firefox的API来使用JavaScript代码更改首选项.

  • 也适用于Python。只需使用execute_script并将您的setupScript包装在“”引号中即可。 (2认同)

Pau*_*ris 3

据我所知,只有两种方法可以更改代理设置,一种是通过配置文件(您正在使用),另一种是在您按照此处实例化驱动程序时使用驱动程序的功能。遗憾的是,这些方法都没有达到您想要的效果,因为它们都是在您创建驱动程序之前发生的。

我想问一下,为什么要更改代理设置?我能轻易想到的唯一解决方案是将 Firefox 指向一个可以在运行时更改的代理。我不确定,但这可能通过 browsermob-proxy 实现。