2013-03-01 3 views
10

Ho cercato tutto questo giorno e sembra che non ci sia alcuna soluzione attualmente disponibile dall'implementazione di chromedriver per python.Set chrome.prefs con binding python per selenio in chromedriver

come si imposta chrome.prefs specifico (ad esempio impostazioni del profilo come profile.managed_default_content_settings.images = 2) utilizzando il metodo webdriver.Chrome()?

Ho già provato tramite webdriver.ChromeOptions() senza successo. In Java ci sono funzioni appropriate disponibili per raggiungere questo obiettivo.

Ma Python? Questo è quello che sto facendo attualmente ...

options = webdriver.ChromeOptions() 
    options.add_argument('--allow-running-insecure-content') 
    options.add_argument('--disable-web-security') 
    options.add_argument('--disk-cache-dir=/var/www/cake2.2.4/app/tmp/cache/selenium-chrome-cache') 
    options.add_argument('--no-referrers') 
    options.add_argument('--window-size=1003,719') 
    options.add_argument('--proxy-server=localhost:8118') 
    options.add_argument("'chrome.prefs': {'profile.managed_default_content_settings.images': 2}") 


    self.selenium = webdriver.Chrome(executable_path='/usr/local/bin/chromedriver',chrome_options=options) 

risposta

3

Fix:

C'è una soluzione, evitando le chromeoptions oggetto e ritornare di nuovo al dizionario desiredcapabilities (deprecato). Per qualche motivo webdriver.py nella libreria del selenio aggiunge un dizionario chromeoptions vuoto al dizionario desiderato, che lo rende inutilizzabile. Quindi è necessario rimuovere il commento la linea 54 in webdriver.py

desired_capabilities.update(options.to_capabilities()) 

quindi utilizzare questo codice per passare tutte le funzionalità desiderate per chromedriver

CHROME = { 
"browserName": "chrome", 
     "version": "", 
     "platform": "ANY", 
     "javascriptEnabled": True, 
     "chrome.prefs": {"profile.managed_default_content_settings.images": 2}, 
     "proxy": { 
      "httpProxy":"localhost:8118", 
      "ftpProxy":None, 
      "sslProxy":None, 
      "noProxy":None, 
      "proxyType":"MANUAL", 
      "class":"org.openqa.selenium.Proxy", 
      "autodetect":False 
      }, 
     "chrome.switches": ["window-size=1003,719", "allow-running-insecure-content", "disable-web-security", "disk-cache-dir=/var/www/cake2.2.4/app/tmp/cache/selenium-chrome-cache", "no-referrers"], 
     } 


    self.selenium = webdriver.Chrome(desired_capabilities=CHROME) 
+0

Problema simile qui (Sto tentando di cambiare la cartella di download di Chrome). Ho provato il tuo codice, ma in qualche modo non funziona per me. La riga 'desired_capabilities.update (options.to_capabilities())' sul mio file webdriver.py non è stata commentata. qualche idea? Hai incontrato altre soluzioni? – Parzival

+0

no, era solo quello. hai trovato questa linea? desired_capabilities.update (options.to_capabilities()) – Jabb

+0

L'ho fatto. Non è stato commentato, quindi avrebbe dovuto funzionare, ma in qualche modo no. Alla fine ho rinunciato del tutto a Chrome. – Parzival

3

Solo un piccolo aggiornamento per tutti gli altri inciampare su questa questione.

Per le versioni più recenti il ​​seguente codice funziona senza problemi:

options.add_experimental_option('prefs', {'download.default_directory':'C:\\temp'}) 
4

Per tutti coloro che vogliono disattivare le immagini in chromedriver, il seguente codice potrebbe aiutare.

from selenium.webdriver.chrome.options import Options 
chrome_options = Options() 
chrome_options.add_experimental_option("prefs", {'profile.default_content_settings.images': 2}) 
driver = webdriver.Chrome(chrome_options=chrome_options) 
4

Questo è ciò che funziona con le versioni più recenti chromedriver di almeno 2.15 alla versione corrente 2.20:

chrome_options = Options() 
chrome_options.add_experimental_option("prefs", {'profile.managed_default_content_settings.images': 2}) 
chrome = webdriver.Chrome('/path/to/chromedriver',chrome_options=chrome_options) 
chrome.get("https://google.com") 
1

Per tutti coloro che lottano con la sintassi di Python, ecco una, esempio di lavoro completo. Disattiva Chrome "Vuoi che Google Chrome salvi la password per questo sito?" richiesta. Vedi anche WebDriver Chrome Browser: Avoid 'Do you want chrome to save your password' pop up.

from selenium import webdriver 
from selenium.webdriver.chrome.options import Options 
chrome_options = Options() 
chrome_options.add_experimental_option('prefs', { 
    'credentials_enable_service': False, 
    'profile': { 
     'password_manager_enabled': False 
    } 
}) 
driver = webdriver.Chrome(chrome_options=chrome_options) 
driver.get('https://google.com')