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é).
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")
Ç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")
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 )
Pour les gens qui demandent comment configurer un serveur proxy dans chrome qui nécessite une authentification doit suivre ces étapes.