Отключить изображения в Selenium Google ChromeDriver
Как отключить изображения в Google Chrome при использовании через Selenium и С#?
Я попытался 6 способов, и никто не работал. Я даже попробовал ответить на этот вопрос StackOverflow, однако я думаю, что информация в нем устарела.
- Драйвер Chrome: V2.2
- версия Chrome: V29.0.1547.66 м
- 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
Используйте http://chrome-extension-downloader.com/, чтобы загрузить расширение "Block Image" (https://chrome.google.com/webstore/detail/block-image/pehaalcefcjfccdpbckoablngfkfgfgj?hl=en-GB). Расширение предотвращает загрузку изображения в первую очередь. Теперь просто загрузите его, используя следующую инструкцию:
var options = new ChromeOptions();
//use the block image extension to prevent images from downloading.
options.AddExtension("Block-image_v1.0.crx");
var driver = new ChromeDriver(options);
Ответ 2
Это мое решение
IWebDriver driver;
ChromeOptions options = new ChromeOptions();
options.AddUserProfilePreference("profile.default_content_setting_values.images", 2);
driver = new ChromeDriver(options);
Ответ 3
Для вашего метода 1-3 я не вижу переключатель Chrome, называемый --disable-images
указанный здесь. Поэтому, даже если фрагменты кода верны, они не будут работать ни на что. Откуда у вас этот переключатель? Любые ссылки?
Для методов 4-6 я предполагаю, что вы получили идею от этой проблемы с хромированием. Я не знаю, является ли этот {'profile.default_content_settings': {'images': 2}}
по-прежнему действительным или нет, но вы можете попробовать его с помощью следующего кода (который первоначально был ответом на Как установить настройки Chrome с помощью Selenium Webdriver.NET binding?, ответ предоставляется 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);
}
Ответ 4
Вместо --disable-images
вы должны использовать --blink-settings
:
options.add_argument('--blink-settings=imagesEnabled=false')
который также работает в режиме без звука. Настройка профиля не работает в режиме безглавых. Вы можете проверить его снимок экрана:
driver.get_screenshot_as_file('headless.png')
Примечание. Я использовал python с селеном, но я думаю, что его легко переносить на С#.
Ответ 5
Я нашел простое решение. Эта идея ссылается на Python: отключить изображения в 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);
Ответ 6
Я рекомендую вам создать новый профиль, настроить этот профиль, чтобы он не загружал изображения, и использовать этот профиль как chromeOption для настройки вашего драйвера.
Смотрите: эта статья
Ответ 7
Более простой подход был бы исключительно:
ChromeOptions options = new ChromeOptions();
options.addArguments("headless","--blink-settings=imagesEnabled=false");