2012-10-11 207 views
11

En este momento, este es mi código, pero webDriver muestra una ventana emergente para ingresar credenciales de proxy y no quiero esta situación molesta, esto no es la primera vez que apareció la misma pregunta en stackoverflow, pero nadie respondió con una respuesta adecuada.Cómo ejecutar el controlador web de selenio detrás de un servidor proxy que necesita autenticación en python

Intenté google para encontrar una solución para este problema. Llegué a conocer la solución en Java, pero no sé cómo lo hacemos en Python.

PROXY_HOST = "65.49.1.59" 
    PROXY_PORT = 60099 
    fp = webdriver.FirefoxProfile() 
    # Direct = 0, Manual = 1, PAC = 2, AUTODETECT = 4, SYSTEM = 5 

    print " im in parse_details" 

    fp.set_preference("network.proxy.type", 1) 
    fp.set_preference('network.http.phishy-userpass-length', 255) 

    fp.set_preference("network.proxy.http", PROXY_HOST) 
    fp.set_preference("network.proxy.http_port", PROXY_PORT) 
    fp.set_preference("network.proxy.ftp", PROXY_HOST) 
    fp.set_preference("network.proxy.ftp_port", PROXY_PORT) 
    fp.set_preference("network.proxy.ssl", PROXY_HOST) 
    fp.set_preference("network.proxy.ssl_port", PROXY_PORT) 
    #fp.set_preference("network.proxy.user_name", 'someusername') 
    #fp.set_preference("network.proxy.password", 'somepassword') 
    fp.set_preference("network.proxy.no_proxies_on", "") # set this value as desired 

    self.driver = webdriver.Firefox(firefox_profile=fp) 
    self.driver.get("http://www.whatismyip.com/") 

Estas declaraciones son adivinado por mí, y no estoy seguro de que su sintaxis es correcta o no, aunque he intentado averiguar en la documentación de selenio, pero sin ayuda. Podrían arrojar algo de luz sobre esto.

#fp.set_preference("network.proxy.user_name", 'someusername') 
    #fp.set_preference("network.proxy.password", 'somepassword') 

p.s. La misma pregunta se hizo aquí Selenium using Python: enter/provide http proxy password for firefox

Respuesta

3

Sé que es bastante tarde para responder a su pregunta, pero recientemente comencé a trabajar con Python, e intentaba hacer lo mismo e hice algo así para manejar esta situación.

Para ejecutar controlador Web selenio detrás de servidor proxy

  1. necesidad de crear un perfil de Firefox, donde complemento se debe instalar "AutoAuth".
  2. Intenta guardar la contraseña del nombre de usuario del servidor proxy & pulsando una URL manualmente.
  3. El perfil de Firefox guardará la credencial del servidor proxy con la ayuda de autoauth
  4. En la secuencia de comandos, llame a ese perfil de Firefox en particular.
  5. Establezca todas las preferencias para definir los detalles del servidor proxy.
  6. perfil
  7. Asignar Firefox a la instancia del navegador
  8. Hit cualquier URL, A continuación se muestra el ejemplo de ejecución

P. S. : Elimine todas las configuraciones de las opciones del proxy de Internet, la escritura lo utilizará automáticamente

Así que técnicamente aquí no se va a enviar proxy de nombre de usuario & contraseña, se ahorrará los credenciales en Firefox e invocar ese perfil concreto Firefox.

Espero que ya haya resuelto su problema hace mucho tiempo, pero en caso de que todavía esté allí, esto podría ayudarlo. :)

0

se refieren a esta ruta sobre la manera de acceder al perfil de Firefox: http://software-testing-tutorials-automation.blogspot.jp/2014/05/how-to-create-and-use-custom-firefox.html

Básicamente es necesario crear un perfil y utilizar ese perfil en Firefox. Ahora el comportamiento de su perfil también será el mismo cuando se ejecuta a través de selenio. Por lo tanto, si su perfil solicitará la autenticación del proxy, también se mostrará cuando lo abra a través de selenio. Así que tiene que encontrar una forma mediante el uso de complementos para ocultar la autenticación utilizando ese perfil. Después de haber hecho eso con éxito, será lo mismo ahora con Selenio.

7

Selenium no se puede manejar con autenticación básica ni funciona bien con ventanas emergentes. Pero este problema se puede resolver. Como solución que funcionó para mí (lo encontré here) es agregar una extensión de navegador que hace la autenticación de Selenium. Es bastante simple. Aquí es cómo funciona para Chrome y Python:

  1. crear un archivo ZIP proxy.zip que contiene dos archivos:

background.js

var config = { 
    mode: "fixed_servers", 
    rules: { 
     singleProxy: { 
     scheme: "http", 
     host: "YOU_PROXY_ADDRESS", 
     port: parseInt(YOUR_PROXY_PORT) 
     }, 
     bypassList: ["foobar.com"] 
    } 
    }; 

chrome.proxy.settings.set({value: config, scope: "regular"}, function() {}); 

function callbackFn(details) { 
    return { 
     authCredentials: { 
      username: "YOUR_PROXY_USERNAME", 
      password: "YOUR_PROXY_PASSWORD" 
     } 
    }; 
} 

chrome.webRequest.onAuthRequired.addListener(
     callbackFn, 
     {urls: ["<all_urls>"]}, 
     ['blocking'] 
); 
no hacer

olvide reemplazar YOUR_PROXY_ * a su configuración.

manifest.json

{ 
    "version": "1.0.0", 
    "manifest_version": 2, 
    "name": "Chrome Proxy", 
    "permissions": [ 
     "proxy", 
     "tabs", 
     "unlimitedStorage", 
     "storage", 
     "<all_urls>", 
     "webRequest", 
     "webRequestBlocking" 
    ], 
    "background": { 
     "scripts": ["background.js"] 
    }, 
    "minimum_chrome_version":"22.0.0" 
} 
  1. Añadir la

Código proxy.zip creado como una extensiónPython:

from selenium import webdriver 
from selenium.webdriver.chrome.options import Options 

chrome_options = Options() 
chrome_options.add_extension("proxy.zip") 

driver = webdriver.Chrome(executable_path='chromedriver.exe', chrome_options=chrome_options) 
driver.get("http://google.com") 
driver.close() 

Eso es todo. Para mí eso funcionó como un encanto. Si necesita crear proxy.zip dinámicamente o necesita un ejemplo de PHP, vaya al original post

+0

Advertencia para cualquiera que piense en hacer esto para Firefox: Firefox no es compatible con OnAuthRequired. –

+0

@ XaviLópez, ¿de qué estás hablando? Esta es la única solución que he encontrado hasta ahora. – Toolkit

+0

@ XaviLópez ok, genial, también limpiaré los comentarios. Pero esto es una locura, no puedo encontrar nada que funcione con la autenticación de proxy de Chrome ... – Toolkit

Cuestiones relacionadas