设置 proxy.socks.port 硒

Posted

技术标签:

【中文标题】设置 proxy.socks.port 硒【英文标题】:Set proxy.socks.port selenium 【发布时间】:2012-09-14 04:05:46 【问题描述】:

我习惯这样设置http端口:

profile.set_preference("network.proxy.http_port", "PORTNUMBER")

这行得通。 但是现在我需要连接 socks 代理并设置端口,它不起作用

profile.set_preference("network.proxy.socks_port", "PORTNUMBER")

我在文档中找不到参考,这就是我在这里问的原因。 有任何想法吗 ?有更好的方法吗?

谢谢

【问题讨论】:

查看用户如何使用 socks_port.... 在示例中 wsec.be/blog/2012/05/22/… & gist.github.com/2402041 谢谢!哇,我不敢相信我错过了那个“细节”呵呵。你能把它添加为答案,以便我接受吗? 【参考方案1】:

在您的情况下,我认为您应该将端口用作 int 而不是字符串。详情见下文

让我们先了解一下,FF(或与 Selenium 一起使用的 webdriver)是如何设置 SOCKS 代理的。

对于 Firefox,在 URL 框中执行 about:config。

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。

使用 selenium 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 about:config 列表中。

【讨论】:

【参考方案2】:

在下面的示例中查看用户如何使用 socks_port....

using-selenium-for-web-based-hostname-enumeration 和gist.github.com

【讨论】:

请不要简单地发布链接。粘贴在这里的简单代码示例(即使取自这些网站)会好得多。然后您可以使用链接引用您的来源。【参考方案3】:
ffprofile=webdriver.FirefoxProfile()
ffprofile.set_preference('network.proxy.type', 1)
ffprofile.set_preference('network.proxy.http', HTTP_IP)

ffprofile.set_preference("network.proxy.http_port", HTTPPORT)
ffprofile.set_preference('network.proxy.socks', 'SOCKS_IP')
ffprofile.set_preference('network.proxy.socks_port', SOCKSPORT)

ffprofile.update_preferences()

driver = webdriver.Remote(
   command_executor='http://SELENIUM:PORT/wd/hub',
   desired_capabilities=DesiredCapabilities.FIREFOX,
   browser_profile = ffprofile
   )

【讨论】:

以上是关于设置 proxy.socks.port 硒的主要内容,如果未能解决你的问题,请参考以下文章

如何在硒测试中设置html元素的样式显示?

让用户不关注硒

ExecuteScript 上的硒超时

尝试运行脚本时如何解决mac上的硒问题

为什么设置Google Chrome配置文件时硒会崩溃? [重复]

CSS中行内元素应该如何才能够设置宽度?