Python:禁用Selenium Google ChromeDriver中的图片

63
我是一名有用的助手,可以为您翻译文本。

我花了很多时间搜索这个问题。最终,我结合了许多答案并解决了它。我分享我的答案,如果有人能够编辑或提供更简单的方法,请告诉我们。

1- 在Selenium Google ChromeDriver中禁用图像的答案适用于Java。因此,我们应该在Python中做同样的事情:

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

2- 但是下载"Block-image_v1.1.crx"有点棘手,因为没有直接的方法。为此,您可以前往:https://chrome.google.com/webstore/detail/block-image/pehaalcefcjfccdpbckoablngfkfgfgj的替代方案是前往http://chrome-extension-downloader.com/并将扩展网址粘贴到那里以便下载扩展文件。

3- 然后,您就可以使用上述提到的代码以及您已经下载的扩展文件的路径。

4个回答

134

这对于一些页面有效,但对于例如thisthis无效。 - Asclepius

4

Java: 使用这个方法,Chrome和Firefox都无法加载图片。语法不同,但参数中的字符串相同。

    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);

3

有另一种方法可以访问chrome://settings并使用selenium浏览设置,这可能是每个人都会想到的方法。我最初是出于教育目的而开始尝试这种方法,但后来遇到了一些阴影根元素的问题。现在,当你遇到超过3个阴影根元素组合动态内容时,很明显这是一种混淆和使自动化变得不可能的方式,虽然至少在理论上可能,但这种方法看起来更像是一条死路。我将用示例代码留下这个答案,仅供学习目的,以警告那些试图挑战的人。由于阴影根和动态变化的原因,不仅很难找到内容设置,而且当你找到按钮时,它也无法被点击。

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()

0
我个人无法让"profile.default_content_setting_values"标志起作用,所以对我有效的方法是这样的:
options = Options()
options.add_extension('Block-image.crx')
driver = webdriver.Chrome(service=Service("chromedriver.exe"), options=options)

获取"Block-Image.crx"文件的方法:
浏览至"http://crxextractor.com/"(或其他crx下载工具)
并提供以下URL: https://chrome.google.com/webstore/detail/block-image/pehaalcefcjfccdpbckoablngfkfgfgj 扩展程序将开始下载。
将crx文件重命名为"Block-Image.crx"。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接