comment définir proxy pour chrome en python webdriver

j'utilise ce code:

profile = webdriver.FirefoxProfile()
profile.set_preference("network.proxy.type", 1)
profile.set_preference("network.proxy.http", "proxy.server.address")
profile.set_preference("network.proxy.http_port", "port_number")
profile.update_preferences()
driver = webdriver.Firefox(firefox_profile=profile)

pour définir le proxy pour FF en Python webdriver. Cela fonctionne pour FF. Comment définir proxy comme ceci dans Chrome? J'ai trouvé ce exemple mais n'est pas très utile. Quand j'exécute le script, rien ne se passe (le navigateur Chrome n'est pas démarré).

25
demandé sur sarbo 2012-07-12 14:44:59

5 réponses

from selenium import webdriver

PROXY = "23.23.23.23:3128" # IP:PORT or HOST:PORT

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--proxy-server=%s' % PROXY)

chrome = webdriver.Chrome(chrome_options=chrome_options)
chrome.get("http://whatismyipaddress.com")
51
répondu Ivan 2012-08-06 02:00:23

Son travail pour moi...

from selenium import webdriver

PROXY = "23.23.23.23:3128" # IP:PORT or HOST:PORT

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--proxy-server=http://%s' % PROXY)

chrome = webdriver.Chrome(chrome_options=chrome_options)
chrome.get("http://whatismyipaddress.com")
5
répondu arun 2014-06-12 11:30:40

j'ai eu un problème avec la même chose. ChromeOptions est très bizarre parce qu'il n'est pas intégré avec les capacités désirées comme vous le pensez. J'oublie les détails exacts, mais fondamentalement ChromeOptions va réinitialiser par défaut certaines valeurs basées sur le fait que vous avez passé ou non un dict de capacités désirées.

j'ai fait le patch suivant qui me permet de spécifier mon propre dict sans me soucier des complications des Chroméoptions

modifier la code suivant dans /selenium/webdriver/chrome/webdriver.py:

def __init__(self, executable_path="chromedriver", port=0,
             chrome_options=None, service_args=None,
             desired_capabilities=None, service_log_path=None, skip_capabilities_update=False):
    """
    Creates a new instance of the chrome driver.

    Starts the service and then creates new instance of chrome driver.

    :Args:
     - executable_path - path to the executable. If the default is used it assumes the executable is in the $PATH
     - port - port you would like the service to run, if left as 0, a free port will be found.
     - desired_capabilities: Dictionary object with non-browser specific
       capabilities only, such as "proxy" or "loggingPref".
     - chrome_options: this takes an instance of ChromeOptions
    """
    if chrome_options is None:
        options = Options()
    else:
        options = chrome_options

    if skip_capabilities_update:
        pass
    elif desired_capabilities is not None:
        desired_capabilities.update(options.to_capabilities())
    else:
        desired_capabilities = options.to_capabilities()

    self.service = Service(executable_path, port=port,
        service_args=service_args, log_path=service_log_path)
    self.service.start()

    try:
        RemoteWebDriver.__init__(self,
            command_executor=self.service.service_url,
            desired_capabilities=desired_capabilities)
    except:
        self.quit()
        raise 
    self._is_remote = False

tout ce qui a changé est le "skip_capabilities_update" kwarg. Maintenant je le fais juste pour mettre ma propre dict:

capabilities = dict( DesiredCapabilities.CHROME )

if not "chromeOptions" in capabilities:
    capabilities['chromeOptions'] = {
        'args' : [],
        'binary' : "",
        'extensions' : [],
        'prefs' : {}
    }

capabilities['proxy'] = {
    'httpProxy' : "%s:%i" %(proxy_address, proxy_port),
    'ftpProxy' : "%s:%i" %(proxy_address, proxy_port),
    'sslProxy' : "%s:%i" %(proxy_address, proxy_port),
    'noProxy' : None,
    'proxyType' : "MANUAL",
    'class' : "org.openqa.selenium.Proxy",
    'autodetect' : False
}

driver = webdriver.Chrome( executable_path="path_to_chrome", desired_capabilities=capabilities, skip_capabilities_update=True )
4
répondu user2426679 2014-06-16 05:38:00

pour les personnes qui demandent comment configurer le serveur proxy dans chrome qui a besoin d'authentification doivent suivre ces étapes.

  1. Créer un proxy.py fichier dans votre projet, utilisez ce code et appelez proxy_chrome de

    proxy.py chaque fois que tu en as besoin. Vous devez passer des paramètres comme le serveur mandataire, le port et le mot de passe du nom d'utilisateur pour l'authentification.
0
répondu Rajat Soni 2018-07-12 06:15:53
from selenium import webdriver
from selenium.webdriver.common.proxy import *

myProxy = "86.111.144.194:3128"
proxy = Proxy({
    'proxyType': ProxyType.MANUAL,
    'httpProxy': myProxy,
    'ftpProxy': myProxy,
    'sslProxy': myProxy,
    'noProxy':''})

driver = webdriver.Firefox(proxy=proxy)
driver.set_page_load_timeout(30)
driver.get('http://whatismyip.com')
-4
répondu Perfect Wave 2013-12-03 19:58:19