it-swarm.dev

Python: disabilita le immagini in Selenium Google ChromeDriver

Trascorro molto tempo alla ricerca di questo . Alla fine della giornata ho combinato un numero di risposte e funziona. Condivido la mia risposta e la apprezzerò se qualcuno la modifica o ci fornisce un modo più semplice per farlo.

1- La risposta in Disabilita le immagini in Selenium Google ChromeDriver funziona in Java. Quindi dovremmo fare la stessa cosa in Python:

opt = webdriver.ChromeOptions()
opt.add_extension("Block-image_v1.1.crx")
browser = webdriver.Chrome(chrome_options=opt)

2- Ma scaricare "Block-image_v1.1.crx" è un po 'complicato, perché non esiste un modo diretto per farlo. A tale scopo, anziché andare a: https://chrome.google.com/webstore/detail/block-image/pehaalcefcjfccdpbckoablngfkfgfgj

puoi andare su http://chrome-extension-downloader.com/ e incollare l'url dell'est qui per poter scaricare il file di estensione.

3- In questo modo sarà possibile utilizzare il codice sopra indicato con il percorso del file di estensione scaricato.

31
1man

Ecco un altro modo per disabilitare le immagini:

from Selenium import webdriver

chrome_options = webdriver.ChromeOptions()
prefs = {"profile.managed_default_content_settings.images": 2}
chrome_options.add_experimental_option("prefs", prefs)
driver = webdriver.Chrome(chrome_options=chrome_options)

L'ho trovato di seguito:

http://nullege.com/codes/show/[email protected]@[email protected]@fbstalker1.py/56/Selenium.webdriver.ChromeOptions.add_experimental_option

61
rocky qi

C'è un altro modo che probabilmente viene in mente a tutti di accedere a chrome://settings e quindi passare attraverso le impostazioni con Selenium ho iniziato in questo modo solo per curiosità didattica, ma poi ho colpito una foresta di elementi shadow-roots ora quando si incontrano più di 3 shadow l'elemento radice combinato con il contenuto dinamico è chiaramente un modo per offuscare e rendere impossibile l'automazione, anche se potrebbe sembrare almeno teoricamente possibile che questo approccio assomigli a un vicolo cieco, lascerò questa risposta con il codice di esempio, solo per puro scopi di apprendimento per pubblicizzare le persone tentate di andare alla sfida. . Non solo è stato difficile trovare solo le impostazioni del contenuto a causa degli shadowroot e delle modifiche dinamiche quando trovi che il pulsante non è cliccabile a questo punto. 

driver = webdriver.Chrome()


def expand_shadow_element(element):
  shadow_root = driver.execute_script('return arguments[0].shadowRoot', element)
  return shadow_root

driver.get("chrome://settings")
root1 = driver.find_element_by_tag_name('settings-ui')
shadow_root1 = expand_shadow_element(root1)

root2 = shadow_root1.find_element_by_css_selector('[page-name="Settings"]')
shadow_root2 = expand_shadow_element(root2)

root3 = shadow_root2.find_element_by_id('search')
shadow_root3 = expand_shadow_element(root3)

search_button = shadow_root3.find_element_by_id("searchTerm")
search_button.click()

text_area = shadow_root3.find_element_by_id('searchInput')
text_area.send_keys("content settings")

root0 = shadow_root1.find_element_by_id('main')
shadow_root0_s = expand_shadow_element(root0)


root1_p = shadow_root0_s.find_element_by_css_selector('settings-basic-page')
shadow_root1_p = expand_shadow_element(root1_p)


root1_s = shadow_root1_p.find_element_by_css_selector('settings-privacy-page')
shadow_root1_s = expand_shadow_element(root1_s)

content_settings_div = shadow_root1_s.find_element_by_css_selector('#site-settings-subpage-trigger')
content_settings = content_settings_div.find_element_by_css_selector("button")
content_settings.click()
1

Java: Con questo Chrome o Firefox caricare le immagini. La sintassi è diversa ma le stringhe sui parametri sono le stesse.

    chromeOptions = new ChromeOptions();
    HashMap<String, Object> images = new HashMap<String, Object>();
    images.put("images", 2);
    HashMap<String, Object> prefs = new HashMap<String, Object>();
    prefs.put("profile.default_content_setting_values", images);
    chromeOptions.setExperimentalOption("prefs", prefs);
    driver=new ChromeDriver(chromeOptions);

    firefoxOpt = new FirefoxOptions();
    FirefoxProfile profile = new FirefoxProfile();
    profile.setPreference("permissions.default.image", 2);
    firefoxOpt.setProfile(profile);
1
user3453444