11

Jak można wyłączyć obrazy w Google Chrome podczas używania go przez Selenium i C#?Wyłączanie obrazów w Selenium Google ChromeDriver

Próbowałem 6 sposobów i żaden nie działał. Próbowałem nawet odpowiedzi na pytanie o StackOverflow this, jednak uważam, że informacje w nim zawarte są nieaktualne.

  • Chrome kierowcy: V2.2
  • Chrome wersja: V29.0.1547.66 m
  • Selen: V2.35

Wszystkie próby zrobiłem nie powodują wyjątki uruchom normalnie ale nadal wyświetlać obrazy:

próba 1:

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

Próba 2:

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

Próba 3:

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

Próba 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); 
} 

Próba 5:

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

Próba 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

Czy wypróbowałeś rozwiązanie w tym pytaniu? Z której wersji ChromeDriver korzystasz? Opublikuj sposoby (dokładny kod), które wypróbowałeś i jak one nie działały (jeśli po prostu nie wyłączyły obrazów lub jeśli wystąpił błąd). – Arran

+0

możliwy duplikat [Wyłącz obrazy w Selenium ChromeDriver] (http://stackoverflow.com/questions/9433109/disable-images-in-selenium-chromedriver) – jww

Odpowiedz

7

użytkowania http://chrome-extension-downloader.com/ aby pobrać "Block Obraz" rozszerzenie (https://chrome.google.com/webstore/detail/block-image/pehaalcefcjfccdpbckoablngfkfgfgj?hl=en-GB). Rozszerzenie zapobiega pobieraniu obrazu w pierwszej kolejności. Teraz to tylko kwestia ładowania go używając następującej klauzuli:

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

Czy masz podpowiedź, jak włączyć wtyczkę automatycznie? W mojej sytuacji przycisk musi zostać kliknięty przed załadowaniem strony !? – alfonx

+0

Haha tak, wpadłem na ten problem. Nie wiem, jak włączyć go automatycznie:/Po prostu wstawiam Console.ReadKey() w mojej aplikacji, aby dać mi szansę, aby włączyć ... ładne getto Wiem, – Fidel

7

Dla Twojej metody 1-3 nie widzę przełącznika Chrome o nazwie --disable-imageslisted here. Więc nawet jeśli fragmenty kodu są poprawne, nie będą działać bez względu na wszystko. Skąd masz ten przełącznik? Wszelkie referencje?

Dla metod 4-6, zakładam, że masz pomysł z this chromdriver issue. Nie wiem, czy ta {'profile.default_content_settings': {'images': 2}} jest nadal ważna, czy nie, ale możesz spróbować z następującym kodem (który był pierwotnie odpowiedzią na How to set Chrome preferences using Selenium Webdriver .NET binding?, odpowiedź dostarczona przez 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); 
} 
+0

Dzięki, że to zadziałało! Argument "--disable-images" pochodzi z wielu postów na forum, widocznie dość starych. Na przykład: http://productforums.google.com/forum/#!topic/chrome/wAbzmI0IoH8. – Fidel

+0

W rzeczywistości to rozwiązanie po prostu uniemożliwia wyświetlanie obrazów. Google Chrome nadal pobiera je ... – Fidel

+1

@Fidel: Dobrze wiedzieć, że zadziałało. Czy rzeczywiście chcesz uniemożliwić pobieranie obrazów przez Chrome zamiast wyłączać obrazy? –

1

I zaleca, aby utworzyć nowy profil, dostosować profil tak, że nie chce się załadować obrazy i korzystać z tego profilu jako chromeOption aby ustawić w górę sterownika.

Patrz: this article

2

I okazało się proste rozwiązanie.Ten pomysł, o którym mowa z 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

Dzięki Jemin, wygląda świetnie. Czy zapobiega pobieraniu pliku? Czy może uniemożliwić wyświetlanie pliku? – Fidel

+1

Pozdrawiam Fidel. Nie sprawdziłem jeszcze tego tematu. Właśnie znalazłem to rozwiązanie dzisiaj. Jednak sprawdziłem, czy czas ładowania był krótszy niż wcześniej. Sprawdzę później i powiem, jak to działa. –

+1

Przepraszamy za odpowiedź właśnie teraz, ale sprawdziłem z skrzypkiem i rzeczywiście NIE pobiera obrazów, świetnie! –

8

To jest moje rozwiązanie

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

Należy użyć --blink-settings zamiast --disable-images przez:

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

która również pracuje w trybie bez głowy. Profil ustawień nie działa w trybie bezgłosu. Można go zweryfikować przez zrzucie:

driver.get_screenshot_as_file('headless.png') 

Uwaga: używałem pytona z selenem, ale myślę, że to powinno być łatwe do przeniesienia na C#.

+0

To działa! Wielkie dzięki! –

+0

Działa to dla C#, jeśli ktoś potrzebuje potwierdzenia. – LogicDev

Powiązane problemy