web-dev-qa-db-fra.com

Python: Désactiver les images dans Selenium Google ChromeDriver

Je passe beaucoup de temps à chercher à ce sujet… .. À la fin de la journée, j'ai combiné plusieurs réponses et cela fonctionne. Je partage ma réponse et je l'apprécierai si quelqu'un la modifie ou nous fournit un moyen plus simple de le faire.

1- La réponse dans Désactiver les images dans Selenium 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 télécharger "Block-image_v1.1.crx" est un peu délicat, car il n’existe aucun moyen direct de le faire. Pour cela, 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 ici pour pouvoir télécharger le fichier d'extension.

3- Ensuite, vous pourrez utiliser le code mentionné ci-dessus avec le chemin du fichier d'extension que vous avez téléchargé.

31
1man

Voici un autre moyen 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@[email protected]/56/Selenium.webdriver.ChromeOptions.add_experimental_option

61
rocky qi

Il existe un autre moyen qui vient probablement à l'esprit pour tout le monde d'accéder à chrome://settings, puis de passer en revue les paramètres avec Selenium. J'ai commencé de cette façon juste pour la curiosité didactique, mais je me suis heurté à une forêt d'éléments d'ombres lorsque vous rencontrez plus de 3 ombres. L'élément racine associé à un contenu dynamique est clairement un moyen de masquer et d'empêcher l'automatisation, bien que cela puisse sembler théoriquement possible au moins théoriquement, cette approche ressemble davantage à une impasse, je laisserai cette réponse avec l'exemple de code, uniquement pour à des fins d’apprentissage pour faire connaître les personnes tentées de relever le défi. . Non seulement il était difficile de trouver uniquement les paramètres de contenu en raison des changements rapides et dynamiques lorsque vous trouvez que le bouton n'est pas cliquable à ce stade. 

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
Eduard Florinescu

Java: Avec ce Chrome, ni Firefox ne chargerait des images. La syntaxe est différente mais les chaînes de paramètres sont les mêmes.

    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