webentwicklung-frage-antwort-db.com.de

Python: Deaktivieren Sie Bilder in Selenium Google ChromeDriver

Ich verbringe viel Zeit damit, nach diesem Thema zu suchen ... Am Ende des Tages kombinierte ich einige Antworten und es funktioniert. Ich teile meine Antwort und werde es zu schätzen wissen, wenn jemand sie bearbeitet oder uns eine einfachere Möglichkeit bietet, dies zu tun.

1- Die Antwort in Deaktivieren Sie Bilder in Selenium Google ChromeDriver arbeitet in Java. Wir sollten also in Python dasselbe tun:

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

2- Das Herunterladen von "Block-image_v1.1.crx" ist jedoch etwas schwierig, da dies nicht direkt möglich ist. Zu diesem Zweck gehen Sie nicht zu: https://chrome.google.com/webstore/detail/block-image/pehaalcefcjfccdpbckoablngfkfgfgj

sie können nach http://chrome-extension-downloader.com/ gehen und dort die Erweiterungs-URL einfügen, um die Erweiterungsdatei herunterladen zu können.

3- Dann können Sie den oben genannten Code mit dem Pfad zu der Erweiterungsdatei verwenden, die Sie heruntergeladen haben.

31
1man

Hier ist eine weitere Möglichkeit, Bilder zu deaktivieren:

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)

Ich habe es unten gefunden:

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

61
rocky qi

Es gibt einen anderen Weg, an den sich jeder denken kann, um auf chrome://settings zuzugreifen und dann die Einstellungen mit Selenium durchzugehen Das mit dynamischen Inhalten kombinierte Root-Element ist eindeutig ein Weg zum Verschleiern und macht die Automatisierung unmöglich. Auch wenn dies zumindest theoretisch möglich klingen mag, sieht dieser Ansatz eher wie eine Sackgasse aus Lernzwecke, um die Menschen zu bewerben, die versucht sind, sich der Herausforderung zu stellen. . Es war nicht nur schwierig, nur die Inhaltseinstellungen aufgrund der Schattenwurzeln und der dynamischen Änderung zu finden, wenn Sie feststellen, dass die Schaltfläche an dieser Stelle nicht angeklickt werden kann. 

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: Mit diesem Chrome würde Firefox noch Bilder laden. Die Syntax ist unterschiedlich, aber die Zeichenfolgen in den Parametern sind gleich.

    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