web-dev-qa-db-fra.com

Comment utiliser un proxy authentifié dans Selenium chromedriver?

Après avoir cherché pendant plusieurs heures, je commence à penser que c'est impossible.

Je dois exécuter Chrome via Selenium en utilisant différents proxy authentifiés (non publics) pour chaque exécution.

PROXY_IP = "<some IP address>"
UID = "<the user id>"
PWD = "<the password">

options = webdriver.ChromeOptions()
options.add_argument("--proxy-server=%s:%s@%s" % (UID,PWD,PROXY_IP))

driver = webdriver.Chrome(executable_path=".\\driver\\chromedriver.exe",
                          chrome_options=options)
driver.get("<site URL>")

Chrome va s'allumer et afficher l'erreur:

This webpage is not available
ERR_NO_SUPPORTED_PROXIES

Si j'utilise un proxy public ne nécessitant aucune authentification comme celle-ci ...

PROXY_IP = "<public proxy IP address>"

options = webdriver.ChromeOptions()
options.add_argument("--proxy-server=%s" % PROXY_IP)

driver = webdriver.Chrome(executable_path=".\\driver\\chromedriver.exe",
                          chrome_options=options)
driver.get("<site URL>")

... il fonctionne très bien et affiche le site tout en utilisant le proxy.

J'ai aussi essayé une variante avec http:// devant l'ID utilisateur:

options.add_argument("--proxy-server=http://%s:%s@%s" % (UID,PWD,PROXY_IP))

Le fait que j’aie cherché loin et que je n’ai pas trouvé de solution m’amène à penser qu’il n’en existe peut-être pas.

J'ai trouvé ça mais je ne peux pas en comprendre le sens:

Proxy d’authentification par sélénium chromedriver

Vous ne savez pas ce que browswermob-proxy est ou est supposé faire ou comment implémenter et tester en Python. Je déteste accumuler des solutions de pansement à moins qu'elles ne soient absolument nécessaires.

15
martin's

J'ai vérifié la plupart des solutions sur le Web et aucune d'entre elles ne permet l'authentification via les fonctionnalités souhaitées de chrome/firefox. Vérifiez ce lien: https://github.com/webdriverio/webdriverio/issues/324 . Enfin, la solution temporaire consiste à ajouter votre adresse IP à la liste blanche avec le fournisseur de proxy.

2
Anurag Narra

après avoir essayé de nombreuses solutions qui ne fonctionnaient pas correctement, j’ai finalement réussi à définir le proxy authentifié à l’aide de l’extension suggérée dans les réponses précédentes. Ce que vous devez faire est de saisir ce lien:

http://crxextractor.com/ et collez cette adresse: https://www.crx4chrome.com/crx/1446/

Il vous permettra de télécharger l’extension au format .crx sans l’installer. Je n’ai utilisé ce code:

proxy = {'address': 'pr.oxylabs.io:7777',
     'username': 'USERNAME',
     'password': 'PASSWORD'}

capabilities = dict(DesiredCapabilities.CHROME)
capabilities['proxy'] = {'proxyType': 'MANUAL',
                         'httpProxy': proxy['address'],
                         'ftpProxy': proxy['address'],
                         'sslProxy': proxy['address'],
                         'noProxy': '',
                         'class': "org.openqa.Selenium.Proxy",
                         'autodetect': False,
                         'socksUsername': proxy['username'],
                         'socksPassword': proxy['password']}

options = webdriver.ChromeOptions()
options.add_extension("./extension_2_0_0_0.crx")
driver = webdriver.Chrome(executable_path=CHROME_PATH, desired_capabilities=capabilities, chrome_options=options)
0
OMERINB

J'ai essayé beaucoup de temps pour faire la même chose.

Chrome utilise uniquement le proxy du système d'exploitation sur lequel il est installé. Vous pouvez le vérifier en allant dans options-> trouver: proxy -> modifier les paramètres du proxy

Donc, sans addons supplémentaires et la configuration de ces addons, vous ne pouvez pas faire cela.

Ou vous pouvez modifier les paramètres de proxy de votre système d'exploitation, ce qui est beaucoup plus simple.

Vous pouvez aussi utiliser phantomjs - il a le même moteur (WebKit) que chrome. En utilisant quelque chose comme:

String PROXY = proxyIP + ":" + proxyPort;
String proxyAuth= proxyUser + ":" + proxyPass;
        OpenQA.Selenium.Proxy proxy = new OpenQA.Selenium.Proxy();
                    proxy.HttpProxy = PROXY;
                    proxy.FtpProxy = PROXY;
                    proxy.SslProxy = PROXY;
                    proxy.SocksProxy = PROXY;

    var serviceJS = PhantomJSDriverService.CreateDefaultService(phantomPath);
    serviceJS.AddArguments("--proxy=" + PROXY, "--proxy-type=http", "--proxy-auth=" + proxyAuth);
0
Andrew

Ceci est une solution temporaire qui pourrait fonctionner à l'état initial: Le code est en Python: Téléchargez d'abord le plug-in à partir du plug-in chrome: Proxy-Auto-Auth_v2.0.crx

        options = webdriver.ChromeOptions()
        options.add_extension("./Proxy-Auto-Auth_v2.0.crx")) #this will provide you a window to enter user name and proxy 
        driver = webdriver.Remote(command_executor=Selenium_server,desired_capabilities=options.to_capabilities())

        or 

        driver = webdriver.Chrome(chrome_options=options)
0
Manoj Sahu

Je n'ai trouvé aucune solution pour le chrome. Nous ne pouvons pas ajouter d'extensions avec l'option headless. J'utilise Heroku avec chrome-buildpack . Il y a des options suivantes

  1. Utilisez xvfb au lieu des options sans tête et installez l'extension
  2. Utilisez un redirecteur de proxy local qui transfère le trafic vers un proxy authentifié. nous pouvons utiliser Squid , mitProxy ou quelque chose comme proxy-login-automator

Au lieu de ces solutions de contournement, je suis passé à Firefox, où j'ai pu renseigner Pop-up Nom d'utilisateur et Mot de passe sur authentification proxy. Comme donné ci-dessous. Le code suivant est pour Ruby en utilisant Capybara. Vous devriez pouvoir faire quelque chose comme ça sur votre plateforme


page.driver.browser.switch_to.alert.send_keys('proxy-username' + Selenium::WebDriver::Keys::KEYS[:tab] + 'my-password')
page.driver.browser.switch_to.alert.accept
0
GS Shahid