2015-04-21 45 views
3

我目前成功地使用下面的代码来使用Selenium webdriver的代理。不幸的是,我似乎无法在不重新启动整个浏览器的情况下更改代理设置。我希望只是更新代理设置,就像我设置代理开始时一样,会更改代理,但似乎不起作用。任何有关这个问题的帮助将不胜感激。Python Selenium Webdriver - 实时更改代理设置

profile = webdriver.FirefoxProfile() 
profile.set_preference("network.proxy.type", 1) 
profile.set_preference("network.proxy.http", proxyAddress) 
profile.set_preference("network.proxy.http_port", proxyPort) 
profile.update_preferences() 
driver = webdriver.Firefox(firefox_profile=profile) 
+0

创建链接到您的代理的本地代理。必要时请您当地的代理商更改“退出”。 – user37203

+0

看起来过于复杂。我希望有一个更简单的方法来做到这一点。 – tobloef

+0

它实际上听起来像10行代码,有一个python库的任何东西在那里.. – user37203

回答

1

这是一个稍微老的问题。 但它实际上是可以动态地改变代理通,我将使用硒JS用Firefox一个“哈克的方式” 但你可以按照通在您需要的语言。

第1步:访问 “about:config中”

driver.get("about:config"); 

步骤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); 

凡使用$ {ABCD}是你放置你的变量,在上面的例子中,我使用ES6处理串联,如图所示,你可以根据你的需要使用其他连接方法。R语言(的SetupScript包含脚本进行拼命地跑括在``)

第3步::访问你的网站

driver.get("https://whatismyip.com"); 

说明:上面的代码利用Firefox的API来改变使用JavaScript代码的偏好。

+1

我承认没有测试过解决方案,并且该项目早已放弃,但我会接受无论如何回答。谢谢! – tobloef

相关问题