禁用Selenium Google ChromeDriver中的图像

20

当使用Selenium和C#通过Google Chrome时,如何禁用图像?

我已尝试了6种方法,但都没有起作用。我甚至尝试了this StackOverflow问题上的答案,但我认为其中的信息已经过时。

  • Chrome driver: V2.2
  • Chrome版本:V29.0.1547.66 m
  • Selenium: V2.35

我所做的所有尝试都没有引发异常,它们正常运行,但仍然显示图像:

尝试1:

ChromeOptions co = new ChromeOptions();
co.AddArgument("--disable-images");
IWebDriver driver = new ChromeDriver(co);

尝试 2:
DesiredCapabilities capabilities = DesiredCapabilities.Chrome();
capabilities.SetCapability("chrome.switches", new string[1] { "disable-images" });

尝试第3次:

ChromeOptions co = new ChromeOptions();
co.AddAdditionalCapability("chrome.switches", new string[1] { "disable-images" });

尝试 4:
var imageSetting = new Dictionary<string, object>();
imageSetting.Add("images", 2);
Dictionary<string, object> content = new Dictionary<string, object>();
content.Add("profile.default_content_settings", imageSetting);
var prefs = new Dictionary<string, object>();
prefs.Add("prefs", content);
var options = new ChromeOptions();
var field = options.GetType().GetField("additionalCapabilities", BindingFlags.Instance | BindingFlags.NonPublic);
if (field != null)
{
    var dict = field.GetValue(options) as IDictionary<string, object>;
    if (dict != null)
        dict.Add(ChromeOptions.Capability, prefs);
}

尝试 5:

ChromeOptions options = new ChromeOptions();
options.AddAdditionalCapability("profile.default_content_settings", 2);

尝试 6:
Dictionary<String, Object> contentSettings = new Dictionary<String, Object>();
contentSettings.Add("images", 2);
Dictionary<String, Object> preferences = new Dictionary<String, Object>();
preferences.Add("profile.default_content_settings", contentSettings);
DesiredCapabilities caps = DesiredCapabilities.Chrome();
caps.SetCapability("chrome.prefs", preferences);

1
你尝试过那个问题中的解决方案吗?另外,你使用的ChromeDriver版本是什么?请发布你尝试过的方法(确切的代码)以及它为何不起作用(如果它仅仅没有禁用图像或者抛出了一个错误)。 - Arran
可能是禁用Selenium ChromeDriver中的图像的重复问题。 - jww
7个回答

22

这是我的解决方案

IWebDriver driver;
ChromeOptions options = new ChromeOptions();
options.AddUserProfilePreference("profile.default_content_setting_values.images", 2);
driver = new ChromeDriver(options);

似乎在Chrome 94中无法正常工作(之前对我来说是可以的)。 - Tomi
在我的 Chromium v99 中可以正常工作,但图片根本没有加载。 - Heinrich Ulbricht

18

您应该使用--blink-settings而不是--disable-images,方法如下:

options.add_argument('--blink-settings=imagesEnabled=false')

这个功能在无头模式下也可使用。但是,在无头模式下,设置配置文件是行不通的。你可以通过截图进行验证:

driver.get_screenshot_as_file('headless.png')

注意:我使用的是Python和Selenium,但我认为将其转换为C#应该很容易。


2
注意:它只是不显示图像,但仍然获取它们。 - VitalyB
@ryan 这个还能获取图片吗,因为那样就失去了意义... - Asclepius
@A-B-B 我只确保图片不显示。但我没有验证它是否仍在获取图像。 - ryan
options.add_argument('--blink-settings=imagesEnabled=false') 对我有用。 :) - Kjensen

8
对于你的方法1-3,我没有看到一个名为--disable-images的Chrome开关在这里列出。因此,即使代码片段是正确的,它们也不会起作用。你从哪里得到了那个开关?有任何参考资料吗?
对于方法4-6,我假设你从这个chromdriver问题中得到了灵感。我不知道这个{'profile.default_content_settings': {'images': 2}}是否仍然有效,但你可以尝试使用以下代码(最初是回答如何使用Selenium Webdriver .NET绑定设置Chrome首选项?的答案,由Martin Devillers提供)。
public class ChromeOptionsWithPrefs: ChromeOptions {
    public Dictionary<string,object> prefs { get; set; }
}

public static void Initialize() {
    var options = new ChromeOptionsWithPrefs();
    options.prefs = new Dictionary<string, object> {
        { "profile.default_content_settings", new Dictionary<string, object>() { "images", 2 } }
    };
    var driver = new ChromeDriver(options);
}

谢谢用户,那个很好用!“--disable-images”参数来自一堆论坛帖子,显然相当古老。例如:http://productforums.google.com/forum/#!topic/chrome/wAbzmI0IoH8。 - Fidel
实际上,那个解决方案只是防止图像显示。Google Chrome 仍在下载它们... - Fidel
1
@Fidel:很高兴知道它起作用了。所以你实际上想要防止Chrome下载图片,而不是禁用图片? - Yi Zeng
1
是的,我认为通过说“禁用”,它就不会首先下载它们。 - Fidel

8

2
你有什么建议可以自动启用插件吗?在我的情况下,页面加载之前必须先点击按钮! - alfonx
哈哈,是啊,我也遇到了这个问题。我不知道如何自动启动它 :/ 我只是在我的应用程序中放了一个Console.ReadKey()来给我机会打开它...相当糟糕,我知道。 - Fidel

6
一个更简单的方法是仅仅这样:
ChromeOptions options = new ChromeOptions();
options.addArguments("headless","--blink-settings=imagesEnabled=false");

4

我找到了一个简单的解决方案。这个想法来自Python:Disable images in Selenium Google ChromeDriver

var service = ChromeDriverService.CreateDefaultService(@WebDriverPath);

var options = net ChromeOptions();
options.AddUserProfilePreference("profile.managed_default_content_settings.images", 2);
IWebDriver Driver = new ChromeDriver(service, options);

1
谢谢Jemin,看起来很棒。它是防止文件被下载吗?还是防止文件被显示? - Fidel
1
你好,Fidel。我还没有查看那个主题。今天我刚找到了这个解决方案。不过我已经检查过加载时间比以前短了。我稍后会再次检查并告诉你它的工作情况。 - Jemin Lee
1
很抱歉现在才回答您,但我使用 Fiddler 进行了检查,它确实不会下载图片,太好了! - Joao Vitor
2
你知道它是否能在无头模式下与Chrome驱动程序一起使用吗? - rodrigorf

1
我建议您创建一个新的配置文件,自定义此配置文件以使其不加载图像,并使用此配置文件作为chromeOption来设置驱动程序。
参见: this article

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