我只是想知道您将如何为每个请求设置特定的代理?!
以下documentation对此的唯一引用是。此外,文档仅提供Java的示例...
Firefox 48及更高版本-GeckoDriver
Firefox在配置文件中维护其代理配置。您可以在配置文件中预设代理并使用该Firefox配置文件,也可以在快速创建的配置文件中对其进行设置,如以下示例所示。使用GeckoDriver,必须通过所需的功能传递代理。
任何建议将不胜感激!
答案 0 :(得分:0)
我以前使用PhantomJS设置代理,但没有使用Firefox作为驱动程序。不过,请遵循this SO post's的领导原则(此处为了便于使用,请在此处进行举报):
Thread.sleep
我将尝试遍历指定的代理列表,并仅在每个请求上修改(或重新创建)代理变量。如果要随机化,只需在代理服务器列表上调用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")
。
答案 1 :(得分:0)
我通过在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)
如果您不想覆盖UA,则无需使用设备列表,只需删除脚本中的最后一个js规则集即可。
答案 2 :(得分:0)
通常,如果我使用含硒的代理,我更喜欢一些易于阅读和理解的东西
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)
我倾向于从“提供免费代理的网站” 中获取几种不同的代理,并对其进行测试,那些不会出错的代理将它们存储在列表或文件中并在初始化硒类时对其进行迭代。硒起作用的是哪一个起作用,如果硒被阻塞,则还有更多选择。我通过抓取此类站点并将其存储在计算机中的文件中来获取代理,因此下次我想要一个有效的代理服务器时,不必回到该站点。