Python: Deshabilita imágenes en Selenium Google ChromeDriver

Paso mucho tiempo buscando esto. Al final del día combiné varias respuestas y funcionó. Comparto mi respuesta y la apreciaré si alguien la edita o nos proporciona una forma más fácil de hacerlo.

1- La respuesta en Deshabilitar imágenes en Selenium Google ChromeDriver funciona en Java. Así que deberíamos hacer lo mismo en Python:

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

2- Pero descargar “Block-image_v1.1.crx” es un poco complicado, porque no hay una forma directa de hacerlo. Para este propósito, en lugar de ir a: https://chrome.google.com/webstore/detail/block-image/pehaalcefcjfccdpbckoablngfkfgfgj

puede ir a http://chrome-extension-downloader.com/ y pegar la url de la extensión allí para poder descargar el archivo de la extensión.

3- Luego podrá usar el código mencionado anteriormente con la ruta al archivo de extensión que ha descargado.

Aquí hay otra forma de deshabilitar imágenes:

 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) 

Lo encontré a continuación:

http://nullege.com/codes/show/src@o@sintstalker-HEAD@fbstalker1.py/56/selenium.webdriver.ChromeOptions.add_experimental_option

Java: Con este Chrome ni Firefox cargaría imágenes. La syntax es diferente pero las cadenas en los parámetros son las mismas.

  chromeOptions = new ChromeOptions(); HashMap images = new HashMap(); images.put("images", 2); HashMap prefs = new HashMap(); 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); 

Es probable que todos chrome://settings otra manera de acceder a chrome://settings y luego a través de selenium. Comencé de esta manera solo por curiosidad didáctica, pero luego me encuentro en un bosque de elementos de raíces de sombra ahora. más de 3 elementos de raíz sombreada combinados con contenido dynamic es claramente una manera de ofuscar y hacer que sea imposible de automatizar, aunque podría parecer al menos teóricamente posible que este enfoque se parece más a un callejón sin salida, dejaré esta respuesta con el código de ejemplo Con fines puramente de aprendizaje para anunciar a las personas tentadas de ir al desafío. . No solo era difícil encontrar la configuración del contenido debido a las sombras y el cambio dynamic cuando se encuentra que el botón no se puede hacer clic en este 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()