如何让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代理的支持。