代理:Selenium + Python、Firefox

Posted

技术标签:

【中文标题】代理:Selenium + Python、Firefox【英文标题】:Proxy: Selenium + Python, Firefox 【发布时间】:2013-09-14 05:25:06 【问题描述】:

如何将 Selenium 在 Python 中启动的 Firefox 的流量重定向到代理?我使用了网上建议的解决方案,但它们不起作用!

我试过了:

profile = webdriver.FirefoxProfile() 
profile.set_preference("network.proxy.type", 1)
profile.set_preference("network.proxy.http", "54.213.66.208")
profile.set_preference("network.proxy.http_port", 80)
profile.update_preferences() 
driver = webdriver.Firefox(profile)

【问题讨论】:

网络上可能有不止一种解决方案。你尝试了什么? (特别是,你试过this吗?) 我试过这个:profile = webdriver.FirefoxProfile() profile.set_preference("network.proxy.type", 1) profile.set_preference("network.proxy.http", "54.213 .66.208") profile.set_preference("network.proxy.http_port", 80) profile.update_preferences() driver = webdriver.Firefox(profile) 您的网址使用的是http: 还是https: http.我午餐这个命令 driver.get("whatismyipaddress.com") 并且 ip 不是代理的 ip 而是通过 ip... 您知道如何进行这项工作吗?我有同样的问题,我正在使用 Firefox46 【参考方案1】:

您需要导入以下内容:

from selenium.webdriver.common.proxy import Proxy, ProxyType

然后设置代理:

myProxy = "xx.xx.xx.xx:xxxx"

proxy = Proxy(
    'proxyType': ProxyType.MANUAL,
    'httpProxy': myProxy,
    'ftpProxy': myProxy,
    'sslProxy': myProxy,
    'noProxy': '' # set this value as desired
    )

然后调用webdriver.Firefox()函数如下:

driver = webdriver.Firefox(proxy=proxy)
driver.get("http://www.google.com")

不记得我在哪里找到了这个解决方案,但它就在某个地方。如果我再次找到它,肯定会提供一个链接。刚刚从我的代码中删除了这部分。

【讨论】:

我想你是从 JAVA 独立服务器获得的代码,它使用这种方式来找到所需的浏览器功能。这真的有效吗? 这是python的解决方案,而不是java。这绝对适合我。 我的错误。您编写该函数的方式与 Java 示例指南非常相似,当 python 指南不提供所有可能的编码方式时,虽然支持。也许您是专业的编码员,或者您只是以这种方式学习的,但在菜鸟指南上却没有。我已经找到了一种使用带有名称的配置文件的方法,但不知道如何编辑当前配置文件、随机创建的配置文件、当前实例。我肯定会测试的。谢谢。 重要提示:myProxy 必须是 IPAddress:porthostname:port,其中主机名不包含 "http://" 前缀 noProxy 是什么意思?它的值的示例是什么?【参考方案2】:

在 firefox/geckodriver 上试试这个:

proxy = "212.66.117.168:41258"

firefox_capabilities = webdriver.DesiredCapabilities.FIREFOX
firefox_capabilities['marionette'] = True

firefox_capabilities['proxy'] = 
    "proxyType": "MANUAL",
    "httpProxy": proxy,
    "ftpProxy": proxy,
    "sslProxy": proxy


driver = webdriver.Firefox(capabilities=firefox_capabilities)

对于 Chrome,您可以使用:

proxy = "212.66.117.168:41258"
prox = Proxy()
prox.proxy_type = ProxyType.MANUAL
prox.http_proxy = proxy
prox.socks_proxy = proxy
prox.ssl_proxy = proxy

capabilities = webdriver.DesiredCapabilities.CHROME
prox.add_to_capabilities(capabilities)
driver = webdriver.Chrome(desired_capabilities=capabilities)

【讨论】:

谢谢。如果你愿意,你也可以使用我的 python 库来获得免费和新鲜的代理github.com/OceanFireSoftware/python-simple-proxy 这对我有用!!!!很多解决方案都缺少firefox_capabilities['marionette'] = True。谢谢分享! 这很有用。经过这么多的试验和错误,这是在最新的 Firefox/Geckodriver 设置中唯一有效的解决方案。 46版本的firefox以后需要使用geckodriver,可以通过这种方式设置代理。 谢谢。唯一有效的解决方案。应标记为“已接受的答案” 在没有 ['marionette'] = True 的情况下为我工作。我猜是因为默认情况下它是 True =)【参考方案3】:

您的问题出在驱动程序初始化上。试试webdriver = webdriver.Firefox(firefox_profile=profile) 其他代码都可以,也可以去掉profile.update_preferences()这一行。

我通过 2 分钟的谷歌搜索找到了您的解决方案。你花了多少时间等待? :D

您的问题是您可能从 Python 之外的其他语言中读取代码。将此webdriver.Firefox(profile) 替换为webdriver.Firefox(firefox_profile=profile)

你的代码应该是:

profile = webdriver.FirefoxProfile() 
profile.set_preference("network.proxy.type", 1)
profile.set_preference("network.proxy.http", "54.213.66.208")
profile.set_preference("network.proxy.http_port", 80)
profile.update_preferences() 
driver = webdriver.Firefox(firefox_profile=profile)

【讨论】:

没有。 WebDriver 的__init__ 方法(作为Firefox 导入)接受firefox_profile 作为第一个参数。 不得不承认,如果你使用命名变量与第一个“位置”不同,但我们说的是完全不同的东西。这将类似于在没有命名参数的情况下运行 Firefox("firefox", profile)。 我不确定你在说什么。检查source。 Firefox(firefox_profile=profile) 等于 Firefox(profile)

以上是关于代理:Selenium + Python、Firefox的主要内容,如果未能解决你的问题,请参考以下文章

Python+Selenium学习笔记9 - 警告框处理

Python + Selenium + Firefox 使用代理 auth 的用户名密码授权

python selenium Chrome 设置为ip代理模式

Selenium_python自动化环境搭建篇

如何在 Python + Selenium 中创建随机用户代理?

Firefox与selenium和python代理问题