Как сменить прокси на моем вебдрайвере несколько раз за один сеанс? - PullRequest
0 голосов
/ 09 февраля 2019

Я работаю над ботом.Я хочу, чтобы бот менял прокси вебдрайвера каждые 50 поисков.У меня есть API, который запрашивает прокси и сокет, я храню эти переменные, и до сих пор я использовал профили Firefox для его настройки, но это не очень хорошо работает.

Так, учитывая тот факт, что у меня уже естьнадежный источник прокси и портов, можете ли вы сказать мне, как я могу изменить прокси без сбоя веб-драйвера и делать это за один сеанс?

Предыдущие попытки:

Я попытался настроитьпрофиль Firefox следующим образом:

regions = {
    'US': '', #USA is the default server
    'Australia': #json response through the api,
    'Canada': #json response through the api,
    'France': #json response through the api,
    'Germany': #json response through the api,
    'UK': #json request response the api
}    
for region in regions:
        fp = webdriver.FirefoxProfile()
        if(regions[region] != ''):
            fp.set_preference("network.proxy.type", 1)
            fp.set_preference("network.proxy.socks", regions[region])
            fp.set_preference("network.proxy.socks_port", port)

Это вызвало у меня некоторые проблемы, и мне приходилось начинать новый сеанс каждый раз, когда я хотел поменять прокси.Поэтому я попытался изменить прокси-сервер с помощью параметров Firefox (параметры - общие сведения - параметры подключения), но оказалось, что всплывающее окно, которое появляется на экране после нажатия кнопки параметров подключения, недоступно через селен или javascript (файл xul).

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Согласно этой теме, вот ваше решение:

Ссылка на решение: Python Selenium Webdriver - Изменение настроек прокси на лету

var setupScript=`var prefs = Components.classes["@mozilla.org/preferences-service;1"]
.getService(Components.interfaces.nsIPrefBranch);

prefs.setIntPref("network.proxy.type", 1);
prefs.setCharPref("network.proxy.http", "${proxyUsed.host}");
prefs.setIntPref("network.proxy.http_port", "${proxyUsed.port}");
prefs.setCharPref("network.proxy.ssl", "${proxyUsed.host}");
prefs.setIntPref("network.proxy.ssl_port", "${proxyUsed.port}");
prefs.setCharPref("network.proxy.ftp", "${proxyUsed.host}");
prefs.setIntPref("network.proxy.ftp_port", "${proxyUsed.port}");
                  `;    

//running script below  
driver.executeScript(setupScript);

//sleep for 1 sec
driver.sleep(1000);
0 голосов
/ 13 февраля 2019

Я смог решить эту проблему, настроив настройки через JS на aboutLconfig, а затем использовал execute_script в селене для развертывания js через python:

regions = {
'US': '', #USA is the default server
'Australia': #json response through the api,
'Canada': #json response through the api,
'France': #json response through the api,
'Germany': #json response through the api,
'UK': #json request response the api
}   
    for region in regions:
        driver.get("about:config")
        time.sleep(3)
        driver.find_element_by_css_selector("window#config deck#configDeck vbox#warningScreen vbox#warningBox.container vbox.description hbox.button-container button#warningButton.primary").click()
        time.sleep(3)
        driver.execute_script('var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); prefs.setIntPref("network.proxy.type", 1); prefs.setCharPref("network.proxy.socks", "' + regions[region] + '"); prefs.setIntPref("network.proxy.socks_port", 9998);')
        time.sleep(3)
        driver.get('https://www.whatsmyip.com/')
        time.sleep(10)

С выполняющимся сценариемЯ меняю значение службы хоста socks и хоста socks с region и port соответственно.

По сути, это то же самое, что и настройка профиля с помощью селена, но таким образом вы делаете это во время работы бота.Вы также можете сменить пользовательский агент и почти все, что захотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...