Selenium_博客已迁移selenium + python专题自动化测试

Selenium 之 操作 ChromeDriver 可配置项

2017-12-26  本文已影响118人  别摸我蒙哥

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 主要提供以下功能:

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

测试代码如下
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

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

过滤后结果
上一篇 下一篇

猜你喜欢

热点阅读