web-dev-qa-db-fra.com

comment définir un proxy pour chrome in 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)

définir le proxy pour FF dans python webdriver. Cela fonctionne pour FF. Comment définir un proxy comme celui-ci dans Chrome? J'ai trouvé cela exmaple mais ce n'est pas très utile. Quand j'exécute le script rien ne se passe (le navigateur Chrome n'est pas démarré).

36
sarbo
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(options=chrome_options)
chrome.get("http://whatismyipaddress.com")
70
Ivan

Ça marche 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")
8
arun

J'ai eu un problème avec la même chose. ChromeOptions est très bizarre car il n'est pas intégré avec les capacités souhaitées comme vous le pensez. J'oublie les détails exacts, mais en gros, ChromeOptions réinitialisera les valeurs par défaut selon que vous avez réussi ou non le dict des capacités souhaitées.

J'ai fait le patch de singe suivant qui me permet de spécifier mon propre dict sans se soucier des complications de ChromeOptions

changez le 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é, c'est le kwarg "skip_capabilities_update". Maintenant, je fais juste cela pour définir ma propre dictée:

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 )
5
user2426679

Pour les gens qui demandent comment configurer un serveur proxy dans chrome qui nécessite une authentification doit suivre ces étapes.

  1. Créez un fichier proxy.py dans votre projet, utilisez ceci code et appelez proxy_chrome depuis
    proxy.py chaque fois que vous en avez besoin. Vous devez transmettre des paramètres tels que le serveur proxy, le port et le mot de passe du nom d'utilisateur pour l'authentification.
2
Rajat Soni