如何让Selenium WebDriver使用Socks代理?

问题描述:

我有这样的代码:如何让Selenium WebDriver使用Socks代理?

proxy = Proxy({ 
    'proxyType': ProxyType.MANUAL, 
    "socksProxy": "192.200.208.5:80", #edited 
    "socksUsername" :"username", #edited 
    "socksPassword" : "password", #edited 
    'noProxy':''}) 

driver = webdriver.Firefox(proxy=proxy) 
driver.get('http://whatismyip.com') 

当我执行这个脚本它打开Firefox浏览器,但在加载网页时被“卡住”。如果我用这个代码,而不是:

PROXY = "192.200.208.5:80:username:password" 
proxy = Proxy({ 
    "httpProxy":PROXY, 
    "ftpProxy":PROXY, 
    "sslProxy":PROXY, 
    'proxyType': ProxyType.MANUAL, 
    'noProxy':''}) 

我被要求填写在弹出窗口中我的代理服务器的用户名/密码。当我输入凭据时,它会正常加载whatismyip.com,我可以看到我正在使用代理。

我想这会自动发生,但我不知道为什么上面的代码不工作。

我不确定代理是否是“袜子”代理,但它是唯一拥有用户名/密码的代理,所以我认为我处于正确的方向。

让我们首先了解FF(或Selenium使用的Webdriver)如何设置SOCKS代理。

对于Firefox,请执行以下操作:在URL框中进行配置。

network.proxy.socks;10.10.10.1 
network.proxy.socks_port;8999 
network.proxy.socks_remote_dns;true 
network.proxy.socks_version;5 

你可以看到如下FF轮廓导演的prefs.js相同:

user_pref("network.proxy.socks", "10.10.10.1"); 
user_pref("network.proxy.socks_port", 8999); 
user_pref("network.proxy.type", 1); 

需要注意的是,network.proxy.socks是字符串,它应该仅仅设置为字符串。 network.proxy.socks_port必须是int。

在使用硒Python模块设置它:

from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 
from selenium.webdriver.common.proxy import * 
import time 

# for fresh FF profile 
#profile = webdriver.FirefoxProfile() 
profile_path="/path/to/custom/profile/" 
profile = webdriver.FirefoxProfile(profile_path) 
# set FF preference to socks proxy 
profile.set_preference("network.proxy.type", 1) 
profile.set_preference("network.proxy.socks", "10.10.10.1") 
profile.set_preference("network.proxy.socks_port", 8999) 
profile.set_preference("network.proxy.socks_version", 5) 
profile.update_preferences() 
driver = webdriver.Firefox(firefox_profile=profile) 

driver.get("http://whatismyip.com") 
print driver.page_source 
# sleep if want to show in gui mode. we do print it in cmd 
time.sleep(25) 
driver.close() 
driver.quit() 

请检查是否给予优先支持,并以约FF:配置列表。我没有看到SOCKS代理的支持。