Selenium 之 操作 ChromeDriver 可配置项

WebDriver 是一个开源的工具,一般用于web应用的自动化测试,或者抓取浏览器中元素。

在使用 Selenium 过程中,我们需要对 Chrome 做一些初始化设置,以便浏览器完成我们期望的行为。

ChromeOptions 属性

ChromeOptions 可以在浏览器启动之前设置加载的选项,可以通过 Selenium 源码看到:

class Options(object):
    KEY = "goog:chromeOptions"

    def __init__(self):
        self._binary_location = ''
        self._arguments = []
        self._extension_files = []
        self._extensions = []
        self._experimental_options = {}
        self._debugger_address = None

ChromeOoptions 主要提供以下功能:

  • 设置 chrome 文件位置(binary_location)
  • 添加启动配置(arguments)
  • 添加插件(add_extension)
  • 添加设置参数(add_experimental_options)

下面就根据这几个参数展开描述:

测试代码如下
import time
from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_argument('lang=zh_CN.UTF-8')

# 最常见的场景是设置 user-argument 来模拟移动设备
# 比如下面模拟 iphone6
options.add_argument(
    'user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) '
    'AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 '
    'Mobile/13B143 Safari/601.1"')

# 禁止加载图片
prefs = {
    'profile.default_content_setting_values.images': 2
}
options.add_experimental_option('prefs', prefs)

driver = webdriver.Chrome(chrome_options=options)

urls = [
    'http://www.touxiangzhan.com/qinglvtouxiang/',
    'http://www.touxiangzhan.com/nanshengtouxiang/',
    'http://www.touxiangzhan.com/nvshengtouxiang/',
    'http://www.touxiangzhan.com/oumeitouxiang/',
    'http://www.touxiangzhan.com/daizitouxiang/',
    'http://www.touxiangzhan.com/katongtouxiang/',
    'http://www.touxiangzhan.com/gexingtouxiang/',
    'http://www.touxiangzhan.com/weixintouxiang/',
    'http://www.touxiangzhan.com/touxiang/',
    'http://www.touxiangzhan.com/qinglvtouxiang/daizi/',
    'http://www.touxiangzhan.com/qinglvtouxiang/katong/',
    'http://www.touxiangzhan.com/qinglvtouxiang/oumei/',
    'http://www.touxiangzhan.com/qinglvtouxiang/baqi/',
    'http://www.touxiangzhan.com/qinglvtouxiang/feizhuliu/',
    'http://www.touxiangzhan.com/qinglvtouxiang/yizuoyiyou/',
    'http://www.touxiangzhan.com/qinglvtouxiang/jiewen/',
    'http://www.touxiangzhan.com/qinglvtouxiang/weimei/',
    'http://www.touxiangzhan.com/qinglvtouxiang/heibai/',
    'http://www.touxiangzhan.com/qinglvtouxiang/haokan/',
    'http://www.touxiangzhan.com/qinglvtouxiang/xiaoqingxin/',
    'http://www.touxiangzhan.com/qinglvtouxiang/yinanyinv/',
    'http://www.touxiangzhan.com/qinglvtouxiang/keai/'
]
start_time = time.time()
for url in urls:
    try:
        driver.get(url)
    except Exception as e:
        print(e)
print(time.time() - start_time)

driver.quit()

修改 chrome 设置

一、禁止加载图片

在页面加载过程中,我们或许不需要图片相关信息,这个时候,就需要浏览器加载页面时屏蔽图片,可以使用下面这种方式:

options = webdriver.ChromeOptions()
prefs = {
    'profile.default_content_setting_values.images': 2
}
prefs = {
    'profile.default_content_setting_values':
        {'images': 2}
} # 这两行代码表达的意思相同,只要给prefs参数一个明确的json格式就可以
options.add_experimental_option('prefs', prefs)
二、添加chrome插件

在使用 ChromeDriver 过程中,经常会碰到这样的问题,我不想加载什么?除了上文说到的图片,我们第一反应就是广告了,这绝对不是我们想获取的有效信息,什么办法解决呢?
简单!日常过程中我们怎么使用 chrome屏蔽广告,现在也怎么做。

第一步,不用说,要下载离线版的 插件
Chrome 的插件都是crx格式,如果在应用商店直接安装插件,插件在安装完毕后会自动被Chrome 清理,所以需要下载离线版本的插件。(这里以屏蔽广告的 Adblock Plus 为例)


搜索并获取插件id

第二步:进入这个神奇的网站 https://yurl.sinaapp.com/crx.php,复制 插件ID ,按照提示另存为到当前文件某个目录下(这里涉及到文件的相对路径,所以要自己把控)

根据插件ID下载离线文件

目前为止已经有了插件,设置 crx 文件到插件选项

options = webdriver.ChromeOptions()
options.add_extension('../source/extension_1_13_4.crx')
# 特别申明,这里的相对路径是我本地代码的路径,如果有问题,修改为下载好 
# 的crx文件位置,如果不了解相对路径,可以先用绝对路径测试
driver = webdriver.Chrome(chrome_options=options)

启动后效果如下:


启动效果
三、巨无霸初始化方式

毋庸置疑,巨无霸方式可以把初始化的过程够囊括进来
这里的侧重点是如何设置浏览器代理

CHROME = {
"browserName": "chrome",
        "version": "",
        "platform": "ANY",
        "javascriptEnabled": True,
        "chrome.prefs": {"profile.managed_default_content_settings.images": 2},
        "proxy": {
            "httpProxy":"localhost:8118",
            "ftpProxy":None,
            "sslProxy":None,
            "noProxy":None,
            "proxyType":"MANUAL",
            "class":"org.openqa.selenium.Proxy",
            "autodetect":False
            },
        "chrome.switches": ["window-size=1003,719", "allow-running-insecure-content", "disable-web-security", "disk-cache-dir=/var/www/cake2.2.4/app/tmp/cache/selenium-chrome-cache", "no-referrers"],
        }
self.selenium = webdriver.Chrome(desired_capabilities=CHROME)
# 参考来源 https://stackoverflow.com/questions/15165593/set-chrome-prefs-with-python-binding-for-selenium-in-chromedriver
四、小结

总体来说,所有的 options 设置选项都是根据 ChromeDriver 暴露出来的配置项,塞入我们需要的 dict 格式文件,一旦格式正确,就可以获得期望的结果。这就是工具的使用,

光说不练假把式

最后我们来看看去除非有效信息后页面加载的效果:(效果相差两个数量级)

没有设置过滤信息前:
打开22个包含图片页面耗费时间 144.80
设置过滤信息后:
打开22个包含图片页面耗费时间 6.07

(这里针对的是图片较多网站做的测试,效果明显点)

过滤后结果
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容