web-dev-qa-db-fra.com

comment définir un proxy avec authentification en python Selenium chromedriver?

Je crée un script qui explore un site Web pour recueillir des données, mais le problème est qu'ils m'ont bloqué après trop de demandes, mais en utilisant un proxy, je peux envoyer plus de demandes que ce que je fais actuellement. J'ai intégré un proxy avec chrome option --proxy-server

options.add_argument('--proxy-server={}'.format('http://ip:port'))

mais j'utilise un proxy payant donc il nécessite une authentification et comme capture d'écran ci-dessous, il donne la boîte d'alerte pour le nom d'utilisateur et le mot de passe

Selenium proxy authentication alert box Ensuite, j'ai essayé de l'utiliser avec le nom d'utilisateur et le mot de passe

options.add_argument('--proxy-server={}'.format('http://username:password@ip:port'))

Mais cela ne semble pas non plus fonctionner. Je cherchais une solution et j'ai trouvé la solution ci-dessous et je l'ai utilisée avec l'extension chrome proxy auto auth et sans chrome extension

proxy = {'address': settings.PROXY,
             'username': settings.PROXY_USER,
             'password': settings.PROXY_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.add_extension(os.path.join(settings.DIR, "extension_2_0.crx")) # proxy auth extension

mais ni l'un ni l'autre n'a fonctionné correctement, il semble fonctionner car après le code ci-dessus, l'alerte d'authentification proxy a disparu et lorsque j'ai vérifié mon adresse IP en recherchant quelle est mon adresse IP et en confirmant que cela ne fonctionne pas.

plaire à tous ceux qui peuvent m'aider à authentifier le serveur proxy sur chromedriver.

6
itsmnthn

Voici une solution rapide et créative qui ne nécessite pas de modification des options de Selenium ou de téléchargement d'un fichier sur chromedriver. Il utilise pyautogui (peut utiliser n'importe quel python qui simule les pressions de touches) pour entrer les détails d'authentification du proxy. Il utilise également le threading pour prendre en compte chrome fenêtre qui autrement mettrait le script en pause.

import time
from threading import Thread
import pyautogui
from Selenium.webdriver.chrome.options import Options
from Selenium import webdriver

hostname = "Host_NAME"
port = "PORT"
proxy_username = "USERNAME"
proxy_password = "PASSWORD"

chrome_options = Options()
chrome_options.add_argument('--proxy-server={}'.format(hostname + ":" + port))
driver = webdriver.Chrome(options=chrome_options)


def enter_proxy_auth(proxy_username, proxy_password):
    time.sleep(1)
    pyautogui.typewrite(proxy_username)
    pyautogui.press('tab')
    pyautogui.typewrite(proxy_password)
    pyautogui.press('enter')


def open_a_page(driver, url):
    driver.get(url)


Thread(target=open_a_page, args=(driver, "http://www.example.com/")).start()
Thread(target=enter_proxy_auth, args=(proxy_username, proxy_password)).start()

REMARQUE: Pour tout projet sérieux ou suite de tests, je recommanderais d'opter pour une solution plus robuste. Cependant, si vous ne faites qu'expérimenter et que vous avez besoin d'une solution rapide et efficace, c'est une option.

1
Danny Blaker

En cours de route, dans les mises à jour, la solution utilisant l'extension ne fonctionne pas (Windows au moins), contrairement à Mac et Linux. Je pense que c'était chromedriver v2.44 la dernière version de travail avec des extensions

1
Virmagnus