我在想如何为每个请求设置特定的代理?!
以下引用块是文档中唯一提到这点的内容。此外,文档仅提供Java的示例...
Firefox版本48及更高版本 - GeckoDriver
Firefox将其代理配置保存在配置文件中。您可以预置Firefox配置文件中的代理,也可以在即时创建的配置文件上设置它,如下面的示例所示。使用GeckoDriver,代理必须通过所需的能力传递。
感谢任何建议!
我在想如何为每个请求设置特定的代理?!
以下引用块是文档中唯一提到这点的内容。此外,文档仅提供Java的示例...
Firefox版本48及更高版本 - GeckoDriver
Firefox将其代理配置保存在配置文件中。您可以预置Firefox配置文件中的代理,也可以在即时创建的配置文件上设置它,如下面的示例所示。使用GeckoDriver,代理必须通过所需的能力传递。
感谢任何建议!
我通过在Firefox的about:config
页面上设置代理来解决这个问题。以下是您需要使用的代码:
devices = {
"mobile" : "Mozilla/5.0 (Android 4.4; Tablet; rv:41.0) Gecko/41.0 Firefox/41.0",
"desktop" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.246"
}
scripts = 'var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); prefs.setIntPref("network.proxy.type", 1); prefs.setCharPref("network.proxy.socks", "' + proxy + '"); prefs.setIntPref("network.proxy.socks_port", port); prefs.setBoolPref("dom.webnotifications.enabled", false); prefs.setCharPref("general.useragent.override", "' + devices[device] + '");'
browser.execute_script(scripts)
class Properties:
def __init__(self):
self.options = Options()
self.options.headless = True
self.options.add_argument("ignore-certificate-errors")
self.options.add_argument("--proxy-server=http://xxx.xxx.xx.54:xx28") #sets a proxy
self.driver = webdriver.Chrome(options=self.options)
我以前使用PhantomJS设置过代理,但没有使用Firefox作为驱动程序。尽管如此,我仍然遵循这篇SO帖子的建议(在此重新粘贴以方便使用):
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
})
driver = webdriver.Firefox(proxy=proxy)
driver.get("http://www.google.com")
我会尝试循环遍历指定代理列表,并在每个请求上修改(或重新创建)代理变量。如果您想要随机化它,只需在代理列表上调用random.choice
。