2012-01-16 17 views
14

Quiero usar selenio con un proxy que esté protegido por contraseña. El proxy no es fijo, sino una variable. Así que esto tiene que hacerse en el código (simplemente configurar Firefox en esta máquina en particular para trabajar con el proxy es menos que ideal). Hasta ahora tengo el siguiente código:Selenio usando Python: ingrese/proporcione la contraseña http proxy para firefox

fp = webdriver.FirefoxProfile() 
# Direct = 0, Manual = 1, PAC = 2, AUTODETECT = 4, SYSTEM = 5 
fp.set_preference("network.proxy.type", 1) 

fp.set_preference("network.proxy.http", PROXY_HOST) 
fp.set_preference("network.proxy.http_port", PROXY_PORT) 

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

En este punto, el diálogo aparece solicitando el/pase usuario de proxy.

¿Hay una manera fácil de cualquiera:

  1. Type en el usuario/pass en el cuadro de diálogo.
  2. Proporcione el usuario/pase en una etapa anterior.
+2

hey mate, ¿ha encontrado soluciones todavía? – Shane

+1

@Shane ¿ha encontrado soluciones todavía? –

+2

@ArsenIbragimov ¿Has encontrado soluciones todavía? – Math

Respuesta

-4

¿Has probado PROXY_HOST = "http://username:[email protected]"?

Also:

Starting with Selenium 2.0 beta 1, there is built in support for handling popup dialog boxes.

+2

'PROXY_HOST =" username: [email protected] "' no funciona. En cuanto al manejo del diálogo emergente, ¿cómo localizo los elementos user/pass para ingresar? – Shane

+0

@Shane, ¿has probado 'PROXY_HOST =" username: [email protected] "' o 'PROXY_HOST =" http: // username: [email protected] "'. El segundo debería pasar la autenticación básica. En cuanto a la ubicación de los elementos: si puedes cambiar al diálogo, siempre puedes navegar por sus elementos enviando la señal de tecla 'tab'. –

8

selenio no puede hacerlo por sí mismo. La única forma que encontré útil se describe here. Para ser breve, debe agregar una extensión de navegador al vuelo que realiza la autenticación. Es mucho más simple de lo que parece ser.

Aquí es cómo funciona para Chrome (en mi caso):

  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 olvides 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 el proxy.zip creado como una extensión

    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 PHP, vaya al original post

+0

Awesome !!!!! Funcionó un encanto! Cheers Mike –

+0

Mike, no funciona conmigo - http://joxi.net/LmG3OVNTRbEMam La última línea dice 'WebDriverException: Mensaje: error desconocido: no se puede procesar la extensión # 1 de error desconocido: no se puede leer el manifiesto (Información del controlador : chromedriver = 2.29.461591 (62ebf098771772160f391d75e589dc567915b233), plataforma = Windows NT 10.0.14393 x86_64) ' –

1

Después de inspirarse en las pruebas unitarias en el selenio github repo. Esto funcionó para mí:

from selenium import webdriver 

PROXY_HOST = "IP_address" 
PROXY_PORT = 8080 
USERNAME = "your_user_name" 
PASSWORD = "YOUR_PASSWORD" 

profile = webdriver.FirefoxProfile() 
profile.set_preference("network.proxy.type", 1) 
profile.set_preference("network.proxy.http", PROXY_HOST) 
profile.set_preference("network.proxy.http_port", PROXY_PORT) 
profile.set_preference("network.proxy.socks_username", USERNAME) 
profile.set_preference("network.proxy.socks_password", PASSWORD) 

profile.update_preferences() 

# executable_path = define the path if u don't already have in the PATH system variable. 
browser = webdriver.Firefox(firefox_profile=profile) 
browser.get('http://website.com') 
browser.maximize_window() 
Cuestiones relacionadas