2015-04-21 60 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

相關問題