Использование и рандомизация прокси

Мне просто интересно, как вы собираетесь устанавливать определенный прокси для каждого запроса?!

Следующая цитата из блока - это единственное, о чем говорится в документации. Кроме того, в документации есть только пример 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 в сценарии.