想解决的问题:
跑selenium脚本时,会运行浏览器,浏览器会显示图片,而出于效率或者其他方面的考虑,我们并不希望显示图片。那这里怎么做呢?本文会向大家介绍方法,并且触类旁通,通过本文的办法,你会知道,怎么自定义浏览器的其他属性。
跑selenium脚本时,会运行浏览器,浏览器会显示图片,而出于效率或者其他方面的考虑,我们并不希望显示图片。那这里怎么做呢?本文会向大家介绍方法,并且触类旁通,通过本文的办法,你会知道,怎么自定义浏览器的其他属性。
一、chrome driver是否设置浏览器属性
chrome driver是否支持对浏览器属性的定义?答案当然是YES
通过chrome driver的官方文档(
http://code.google.com/p/chromedriver/wiki/CapabilitiesAndSwitches),可以看到,chrome driver可以支持的自定义属性,相当可观
注意到红框中的部分,这里说明,我们可以去定义chrome浏览器的原生属性,这些属性是保存在chrome的用户数据文件夹中的Preferences文件中的,只要是这个文件中定义的属性,我们都可以让chrome driver对其做重新设置。我们初步判断,“不加载图片“这一设置,是保存在这个文件中的,因此,接下来需要知道,在这个文件中,是怎么保存”不加载图片“这个属性的。
二、“不加载图片”对应preferences文件中哪个属性
1、找到Preferences
Preferences文件,一般位于用户文件夹\AppData\Local\Google\Chrome\User Data\Default,如下图所示
2、通过浏览器设置”不显示图片“
打开你的chrome浏览器,进入“设置”页面,选“显示高级设置”
3、对比设置前后Preferences的区别
做了这个修改后,会发现Preferences多了红框这几行,因此这几行配置,对应了“不显示图片”这个配置
三、初始化chrome driver(代码)
通过前面两个步骤,我们已经知道了,chrome是怎么在Preferences中保存配置的,下面就是将这个配置变成代码:在初始化WebDriver时,带上这个配置。
代码如下所示。要注意到,map中的值,是要和Preferences中的层级相对应的。
1、default_content_setting是在profile配置组中的,因此表达式是profile.default_content_settings
2、default_content_settings中imges是key值,2是value值
Map<String, Object> contentSettings = new HashMap<String, Object>();
contentSettings.put("images", 2);
Map<String, Object> preferences = new HashMap<String, Object>();
preferences.put("profile.default_content_settings", contentSettings);
DesiredCapabilities caps = DesiredCapabilities.chrome();
caps.setCapability("chrome.prefs", preferences);
WebDriver driver = new ChromeDriver(caps);
总结:本文虽然是介绍了“不显示图片”的方法,但chrome的其他属性,也可以通过同样的思路去设置。怎么样~!让我们更加灵活、自由地使用selenium把!
不同版本的chrome driver,使用上可能存在差异,这里提供我使用的chrome driver:
http://pan.baidu.com/share/link?shareid=2940223438&uk=1375814196
如果你对selenium不熟,欢迎查看旧文:《Selenium超简单入门》