Como definir a autenticação de proxy (usuário e senha) usando o selenium python

Estou usando o Firefox webdriver no Python 2.7 com Selenium. Meu programa python inicia o navegador firefox e visita sites diferentes quando eu executo o programa. Mas, eu preciso definir o proxy com autenticação, para que quando o programa visitar qualquer site, ele irá visitar através do servidor proxy.

Existem algumas perguntas semelhantes sobre o SO. Mas, não existe uma solução específica para o selenium Firefox webdriver do Python.

  • Python Selenium Webdriver – Autenticação por Proxy
  • Rodando o selenium atrás de um servidor proxy

Além de rodar o Firefox com um perfil que possui as credenciais salvas. Você pode fazer isso carregando uma extensão que escreve no loginTextbox e password1Textbox de chrome://global/content/commonDialog.xul (a janela de alteração).

Já existem algumas extensões que farão o trabalho. Por exemplo: Close Proxy Authentication

https://addons.mozilla.org/firefox/downloads/latest/close-proxy-authentication/addon-427702-latest.xpi

 from selenium import webdriver from base64 import b64encode proxy = {'host': HOST, 'port': PORT, 'usr': USER, 'pwd': PASSWD} fp = webdriver.FirefoxProfile() fp.add_extension('closeproxy.xpi') fp.set_preference('network.proxy.type', 1) fp.set_preference('network.proxy.http', proxy['host']) fp.set_preference('network.proxy.http_port', int(proxy['port'])) # ... ssl, socks, ftp ... fp.set_preference('network.proxy.no_proxies_on', 'localhost, 127.0.0.1') credentials = '{usr}:{pwd}'.format(**proxy) credentials = b64encode(credentials.encode('ascii')).decode('utf-8') fp.set_preference('extensions.closeproxyauth.authtoken', credentials) driver = webdriver.Firefox(fp) 

Há um exemplo para o Firefox + Python, mas sem a autenticação aqui . Então você pode encontrar outros parâmetros disponíveis aqui no código-fonte. Então parece que você precisa do seguinte:

 socksUsername socksPassword 

Por exemplo:

 from selenium import webdriver from selenium.webdriver.common.proxy import * myProxy = "host:8080" proxy = Proxy({ 'proxyType': ProxyType.MANUAL, 'httpProxy': myProxy, # set this value as desired 'ftpProxy': myProxy, # set this value as desired 'sslProxy': myProxy, # set this value as desired 'noProxy': '' # set this value as desired 'socksUsername': = '' 'socksPassword': = '' }) driver = webdriver.Firefox(proxy=proxy) 

ou com preferências:

 driverPref = webdriver.FirefoxProfile() driverPref.set_preference("network.proxy.type", 1) . . . driverPref.set_preference('network.proxy.socks', proxyHost) driverPref.set_preference('network.proxy.socks_port', proxyPort) driverPref.update_preferences() driver = webdriver.Firefox(firefox_profile=driverPref) 

EDITAR :

Eu olhei para ele novamente e parece que é impossível definir detalhes de autenticação no FF, mesmo manualmente. A única maneira é apenas lembrar os detalhes que você já inseriu, feitos por dois parâmetros:

 signon.autologin.proxy=true network.websocket.enabled=false 

que pode ser configurado com o método set_preference() . Você também pode ver manualmente todas as opções de FF, navegando para about:config .

Em uma adição à resposta com extensão.

Você também pode usar o preenchimento de formulário para alterar dinamicamente as credenciais no seu proxy. Basta carregar a página de extensão, preencher o formulário automaticamente e clicar em salvar!

Intereting Posts