Использование и рандомизация прокси
Мне просто интересно, как вы собираетесь устанавливать определенный прокси для каждого запроса?!
Следующая цитата из блока - это единственное, о чем говорится в документации. Кроме того, в документации есть только пример Java...
Firefox версии 48 и новее - GeckoDriver
Firefox поддерживает конфигурацию прокси-сервера в профиле. Вы можете предварительно установить прокси-сервер в профиле и использовать этот профиль Firefox, или вы можете установить его в профиле, который создается на лету, как показано в следующем примере. С помощью GeckoDriver прокси-сервер должен пройти необходимые функции.
Любой совет будет принят во внимание!
Ответы
Ответ 1
Я уже установил прокси с помощью PhantomJS, но не использовал Firefox в качестве драйвера. Тем не менее, следуя за этим сообщением SO post (здесь для удобства использования):
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
в списке прокси.
Ответ 2
Я решил это, настроив прокси на странице about:config
в Firefox. Вот код, который вам нужен для того, чтобы сделать это:
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 в сценарии.