WebDriver 是一個開源的工具距误,一般用于web應(yīng)用的自動化測試,或者抓取瀏覽器中元素仿野。
在使用 Selenium 過程中,我們需要對 Chrome 做一些初始化設(shè)置她君,以便瀏覽器完成我們期望的行為脚作。
ChromeOptions 屬性
ChromeOptions 可以在瀏覽器啟動之前設(shè)置加載的選項(xiàng),可以通過 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 主要提供以下功能:
- 設(shè)置 chrome 文件位置(binary_location)
- 添加啟動配置(arguments)
- 添加插件(add_extension)
- 添加設(shè)置參數(shù)(add_experimental_options)
下面就根據(jù)這幾個參數(shù)展開描述:
測試代碼如下
import time
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument('lang=zh_CN.UTF-8')
# 最常見的場景是設(shè)置 user-argument 來模擬移動設(shè)備
# 比如下面模擬 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 設(shè)置
一缔刹、禁止加載圖片
在頁面加載過程中球涛,我們或許不需要圖片相關(guān)信息,這個時候校镐,就需要瀏覽器加載頁面時屏蔽圖片亿扁,可以使用下面這種方式:
options = webdriver.ChromeOptions()
prefs = {
'profile.default_content_setting_values.images': 2
}
prefs = {
'profile.default_content_setting_values':
{'images': 2}
} # 這兩行代碼表達(dá)的意思相同,只要給prefs參數(shù)一個明確的json格式就可以
options.add_experimental_option('prefs', prefs)
二鸟廓、添加chrome插件
在使用 ChromeDriver 過程中从祝,經(jīng)常會碰到這樣的問題襟己,我不想加載什么?除了上文說到的圖片牍陌,我們第一反應(yīng)就是廣告了擎浴,這絕對不是我們想獲取的有效信息,什么辦法解決呢毒涧?
簡單贮预!日常過程中我們怎么使用 chrome屏蔽廣告,現(xiàn)在也怎么做链嘀。
第一步萌狂,不用說,要下載離線版的 插件
Chrome 的插件都是crx格式怀泊,如果在應(yīng)用商店直接安裝插件茫藏,插件在安裝完畢后會自動被Chrome 清理,所以需要下載離線版本的插件霹琼。(這里以屏蔽廣告的 Adblock Plus 為例)
第二步:進(jìn)入這個神奇的網(wǎng)站 https://yurl.sinaapp.com/crx.php务傲,復(fù)制 插件ID ,按照提示另存為到當(dāng)前文件某個目錄下(這里涉及到文件的相對路徑枣申,所以要自己把控)
目前為止已經(jīng)有了插件售葡,設(shè)置 crx 文件到插件選項(xiàng)
options = webdriver.ChromeOptions()
options.add_extension('../source/extension_1_13_4.crx')
# 特別申明,這里的相對路徑是我本地代碼的路徑忠藤,如果有問題挟伙,修改為下載好
# 的crx文件位置,如果不了解相對路徑模孩,可以先用絕對路徑測試
driver = webdriver.Chrome(chrome_options=options)
啟動后效果如下:
三尖阔、巨無霸初始化方式
毋庸置疑,巨無霸方式可以把初始化的過程夠囊括進(jìn)來
這里的側(cè)重點(diǎn)是如何設(shè)置瀏覽器代理
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
四榨咐、小結(jié)
總體來說介却,所有的 options 設(shè)置選項(xiàng)都是根據(jù) ChromeDriver 暴露出來的配置項(xiàng),塞入我們需要的 dict 格式文件块茁,一旦格式正確齿坷,就可以獲得期望的結(jié)果。這就是工具的使用数焊,
光說不練假把式
最后我們來看看去除非有效信息后頁面加載的效果:(效果相差兩個數(shù)量級)
沒有設(shè)置過濾信息前:
打開22個包含圖片頁面耗費(fèi)時間 144.80
設(shè)置過濾信息后:
打開22個包含圖片頁面耗費(fèi)時間 6.07
(這里針對的是圖片較多網(wǎng)站做的測試永淌,效果明顯點(diǎn))