11

Làm cách nào để vô hiệu hóa hình ảnh trong Google chrome khi sử dụng hình ảnh thông qua Selenium và C#?Tắt hình ảnh trong Selenium Google ChromeDriver

Tôi đã thử 6 cách và không có cách nào hoạt động. Tôi thậm chí đã thử câu trả lời trên câu hỏi this StackOverflow, tuy nhiên tôi nghĩ rằng thông tin trong đó đã lỗi thời.

  • Chrome tài xế: V2.2
  • Chrome phiên bản: V29.0.1547.66 m
  • Selenium: V2.35

Tất cả những nỗ lực tôi đã thực hiện không gây ra trường hợp ngoại lệ , họ chạy bình thường nhưng vẫn hiển thị hình ảnh:

Cố gắng 1:

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

Cố gắng 2:

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

Nỗ lực 3:

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

Nỗ lực 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); 
} 

Nỗ lực 5:

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

Cố 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

Bạn đã thử giải pháp trong câu hỏi đó chưa? Bạn đang sử dụng phiên bản ChromeDriver nào? Xin vui lòng gửi các cách (mã chính xác) mà bạn đã thử và cách nó không hoạt động (nếu nó chỉ đơn giản là không vô hiệu hóa các hình ảnh hoặc nếu nó đã ném một lỗi). – Arran

+0

có thể trùng lặp của [Tắt hình ảnh trong Selenium ChromeDriver] (http://stackoverflow.com/questions/9433109/disable-images-in-selenium-chromedriver) – jww

Trả lời

7

Sử dụng http://chrome-extension-downloader.com/ để tải về "Block Image" mở rộng (https://chrome.google.com/webstore/detail/block-image/pehaalcefcjfccdpbckoablngfkfgfgj?hl=en-GB). Tiện ích này ngăn không cho tải xuống hình ảnh ngay từ đầu. Bây giờ nó chỉ là một vấn đề tải nó sử dụng câu lệnh sau:

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

Bạn có mẹo để tự động bật plugin không? Trong tình huống của tôi, nút phải được nhấp trước khi trang được tải !? – alfonx

+0

Haha yeah Tôi cũng gặp phải vấn đề này. Tôi không biết làm thế nào để bật nó tự động:/Tôi chỉ cần đặt một Console.ReadKey() trong ứng dụng của tôi để cho tôi cơ hội để biến nó trên ... khá ghetto Tôi biết – Fidel

7

Đối với phương pháp 1-3 của bạn, tôi không thấy nút chuyển đổi Chrome được gọi là --disable-imageslisted here. Vì vậy, ngay cả khi các đoạn mã là chính xác, họ sẽ không làm việc không có vấn đề gì. Bạn lấy công tắc đó ở đâu? Bất kỳ tài liệu tham khảo?

Đối với các phương pháp 4-6, tôi giả sử bạn có ý tưởng từ this chromdriver issue. Tôi không biết nếu điều này {'profile.default_content_settings': {'images': 2}} vẫn còn hợp lệ hay không, nhưng bạn có thể dùng thử với mã sau (ban đầu là câu trả lời cho How to set Chrome preferences using Selenium Webdriver .NET binding?, câu trả lời được cung cấp bởi 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

Cảm ơn người dùng, hoạt động tốt! Đối số '--disable-images' xuất phát từ một loạt các bài đăng trên diễn đàn, rõ ràng là khá cũ. Ví dụ: http://productforums.google.com/forum/#!topic/chrome/wAbzmI0IoH8. – Fidel

+0

Thực ra, giải pháp đó chỉ ngăn hình ảnh hiển thị. Google chrome vẫn đang tải xuống chúng ... – Fidel

+1

@Fidel: Tốt để biết nó hoạt động. Vì vậy, bạn thực sự muốn ngăn Chrome tải xuống hình ảnh, thay vì tắt hình ảnh? –

1

tôi khuyên bạn nên tạo một hồ sơ mới, tùy chỉnh hồ sơ này để nó không tải các hình ảnh, và sử dụng hồ sơ này như một chromeOption để thiết lập lên trình điều khiển của bạn.

Xem: this article

2

Tôi đã tìm ra giải pháp đơn giản.Ý tưởng này được gọi từ 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

Cảm ơn Jemin, trông rất tuyệt. Nó có ngăn chặn tệp được tải xuống không? Hoặc nó có ngăn chặn các tập tin được hiển thị? – Fidel

+1

Fidel chào mừng bạn. Tôi chưa kiểm tra về chủ đề đó. Tôi vừa tìm ra giải pháp hôm nay. Tuy nhiên tôi đã kiểm tra thời gian tải ít hơn trước. Tôi sẽ kiểm tra sau và cho bạn biết nó hoạt động như thế nào. –

+1

Xin lỗi vì đã trả lời câu hỏi này ngay bây giờ, nhưng tôi đã kiểm tra với người chơi và nó thực sự KHÔNG tải hình ảnh, tuyệt vời! –

8

Đây là giải pháp của tôi

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

Bạn nên sử dụng --blink-settings thay vì --disable-images bởi:

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

mà cũng làm việc trong chế độ không đầu. Đặt hồ sơ không hoạt động ở chế độ không đầu. Bạn có thể xác minh nó bằng cách chụp màn hình:

driver.get_screenshot_as_file('headless.png') 

Lưu ý: Tôi đã sử dụng python với selen, nhưng tôi nghĩ rằng nó sẽ được dễ dàng chuyển sang C#.

+0

Nó hoạt động! Cảm ơn nhiều! –

+0

Điều này làm việc cho C# nếu có ai cần xác nhận. – LogicDev