web-dev-qa-db-fra.com

Comment définir l'authentification du proxy (utilisateur et mot de passe) à l'aide de Python + Selenium

J'utilise Firefox WebDriver en Python 2.7 avec Selenium. Mon programme python démarre le navigateur Firefox et visite différents sites Web lorsque je lance le programme. Mais, je dois configurer le proxy avec une authentification afin que, lorsque le programme visite un site Web, il le visite via le serveur proxy.

Il y a quelques questions similaires sur SO. Mais, il n’existe pas de solution spécifique pour Selenium Firefox WebDriver of Python.

7
Rafayet Ullah

En plus d'exécuter Firefox avec un profil qui a les informations d'identification enregistrées. Vous pouvez le faire en chargeant une extension qui écrit dans les variables loginTextbox et password1Textbox de chrome://global/content/commonDialog.xul (la fenêtre d'alerte).

Il y a déjà des extensions qui feront le travail. Par exemple: 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)
6
Nuno André

Il existe un exemple pour Firefox + Python mais sans l’authentification ici . Ensuite, vous pouvez trouver d'autres paramètres disponibles ici dans le code source. Il semble donc que vous ayez besoin des éléments suivants:

socksUsername
socksPassword

Par exemple:

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 avec des préférences:

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)

MODIFIER:

Je l'ai regardé à nouveau et il semble qu'il soit impossible de définir les détails de l'authentification dans FF, même manuellement. Le seul moyen est simplement de vous rappeler les détails que vous avez déjà entrés et qui sont définis par 2 paramètres: 

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

qui peut être configuré avec la méthode set_preference(). Vous pouvez également afficher manuellement toutes les options FF en allant à about:config.

1
Eugene S

En plus de la réponse avec extension.

Vous pouvez également utiliser le remplissage de formulaire pour modifier de manière dynamique les informations d'identification sur votre proxy. Il suffit de charger la page d'extension, de remplir le formulaire automatiquement et de cliquer sur Enregistrer!