it-swarm.com.de

So legen Sie die Proxy-Authentifizierung (Benutzer und Kennwort) mit Python + Selenium fest

Ich verwende Firefox WebDriver in Python 2.7 mit Selenium. Mein Python-Programm startet den Firefox-Browser und besucht beim Ausführen des Programms verschiedene Websites. Aber ich muss den Proxy mit Authentifizierung festlegen, so dass das Programm, wenn eine Website besucht wird, den Proxy-Server besucht.

Es gibt einige ähnliche Fragen zu SO. Es gibt jedoch keine spezifische Lösung für Selenium Firefox WebDriver von Python.

7
Rafayet Ullah

Zusätzlich zum Ausführen von Firefox mit einem Profil, das die Anmeldeinformationen gespeichert hat. Sie können eine Erweiterung laden, die in loginTextbox und password1Textbox von chrome://global/content/commonDialog.xul (dem Alarmfenster) schreibt.

Es gibt bereits einige Erweiterungen, die diese Aufgabe erfüllen. Zum Beispiel: 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é

Es gibt ein Beispiel für Firefox + Python, jedoch ohne Authentifizierung hier . Dann finden Sie andere verfügbare Parameter hier im Quellcode. So wie es aussieht, brauchen Sie Folgendes:

socksUsername
socksPassword

Zum Beispiel:

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)

oder mit Vorlieben:

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)

EDIT:

Ich habe es mir noch einmal angesehen und es scheint, dass es unmöglich ist, Authentifizierungsdetails in FF festzulegen, auch nicht manuell. Sie können sich nur die Details merken, die Sie bereits eingegeben haben, und zwar mit zwei Parametern: 

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

das kann mit der set_preference()-Methode konfiguriert werden. Sie können alle FF-Optionen auch manuell anzeigen, indem Sie zu about:config wechseln.

1
Eugene S

In Ergänzung zur Antwort mit Erweiterung.

Sie können das Ausfüllen von Formularen auch verwenden, um Anmeldeinformationen auf Ihrem Proxy dynamisch zu ändern. Laden Sie einfach die Erweiterungsseite, füllen Sie das Formular automatisch aus und klicken Sie auf Speichern!