Python: désactiver les images dans Google ChromeDriver

je passe beaucoup de temps à chercher à ce sujet. À la fin de la journée, j'ai combiné un certain nombre de réponses et ça fonctionne. Je partage ma réponse et j'apprécierai que quelqu'un la modifie ou nous offre un moyen plus facile de le faire.

1-la réponse dans images désactivées dans le sélénium Google ChromeDriver fonctionne en Java. Nous devrions donc faire la même chose en Python:

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

2 - Mais le téléchargement de "Bloc de image_v1.1.crx" est un peu difficile, car il n'y a pas de moyen direct de le faire. Dans ce but, au lieu d'aller à: https://chrome.google.com/webstore/detail/block-image/pehaalcefcjfccdpbckoablngfkfgfgj

vous pouvez aller à http://chrome-extension-downloader.com / et coller l'url d'extension là pour être en mesure de télécharger le fichier d'extension.

3-alors vous pourrez utiliser le code mentionné ci-dessus avec le chemin l'extension de fichier que vous avez téléchargé.

27
demandé sur Community 2015-01-21 18:01:20

2 réponses

Voici une autre façon de désactiver les images:

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)

Je l'ai trouvé ci-dessous:

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

52
répondu rocky qi 2018-10-02 15:05:40

il y a une autre façon qui vient probablement à l'esprit à tout le monde d'accéder à chrome://settings et puis passer par les paramètres avec le sélénium j'ai commencé de cette façon juste pour la curiosité didactique, mais ensuite j'ai frappé une forêt d'éléments shadow-roots maintenant quand vous rencontrez plus de 3 élément shadow root combiné avec du contenu dynamique est clairement une façon d'obscurcir et de rendre impossible d'automatiser, bien que pourrait sembler au moins théoriquement possible cette approche ressemble plus à un mort fin, je vais laisser cette réponse avec le code exemple, juste à des fins purement d'apprentissage pour annoncer les gens tentés d'aller au défi. . Non seulement était difficile de trouver juste les paramètres de contenu en raison de la shadowroots et le changement dynamique lorsque vous trouvez que le bouton n'est pas cliquable à ce point.

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
répondu Eduard Florinescu 2018-02-13 23:29:57