您好,登錄后才能下訂單哦!
這篇文章主要介紹selenium+python如何配置chrome瀏覽器,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!
1. 背景
在使用selenium瀏覽器渲染技術(shù),爬取網(wǎng)站信息時,默認(rèn)情況下就是一個普通的純凈的chrome瀏覽器,而我們平時在使用瀏覽器時,經(jīng)常就添加一些插件,擴(kuò)展,代理之類的應(yīng)用。相對應(yīng)的,當(dāng)我們用chrome瀏覽器爬取網(wǎng)站時,可能需要對這個chrome做一些特殊的配置,以滿足爬蟲的行為。
常用的行為有:
禁止圖片和視頻的加載:提升網(wǎng)頁加載速度。
添加代理:用于翻墻訪問某些頁面,或者應(yīng)對IP訪問頻率限制的反爬技術(shù)。
使用移動頭:訪問移動端的站點(diǎn),一般這種站點(diǎn)的反爬技術(shù)比較薄弱。
添加擴(kuò)展:像正常使用瀏覽器一樣的功能。
設(shè)置編碼:應(yīng)對中文站,防止亂碼。
阻止JavaScript執(zhí)行。
………
2. 環(huán)境
python 3.6.1
系統(tǒng):win7
IDE:pycharm
安裝過chrome瀏覽器
配置好chromedriver
selenium 3.7.0
3. chromeOptions
chromeOptions 是一個配置 chrome 啟動是屬性的類。通過這個類,我們可以為chrome配置如下參數(shù)(這個部分可以通過selenium源碼看到):
設(shè)置 chrome 二進(jìn)制文件位置 (binary_location)
添加啟動參數(shù) (add_argument)
添加擴(kuò)展應(yīng)用 (add_extension, add_encoded_extension)
添加實(shí)驗(yàn)性質(zhì)的設(shè)置參數(shù) (add_experimental_option)
設(shè)置調(diào)試器地址 (debugger_address)
源代碼:
# .\Lib\site-packages\selenium\webdriver\chrome\options.py class Options(object): def __init__(self): # 設(shè)置 chrome 二進(jìn)制文件位置 self._binary_location = '' # 添加啟動參數(shù) self._arguments = [] # 添加擴(kuò)展應(yīng)用 self._extension_files = [] self._extensions = [] # 添加實(shí)驗(yàn)性質(zhì)的設(shè)置參數(shù) self._experimental_options = {} # 設(shè)置調(diào)試器地址 self._debugger_address = None
使用案例:
# 設(shè)置默認(rèn)編碼為 utf-8,也就是中文 from selenium import webdriver options = webdriver.ChromeOptions() options.add_argument('lang=zh_CN.UTF-8') driver = webdriver.Chrome(chrome_options = options)
4. 常用配置官方網(wǎng)站參考:https://sites.google.com/a/chromium.org/chromedriver/capabilities
4.1. 設(shè)置編碼格式
# 設(shè)置默認(rèn)編碼為 utf-8,也就是中文 from selenium import webdriver options = webdriver.ChromeOptions() options.add_argument('lang=zh_CN.UTF-8') driver = webdriver.Chrome(chrome_options = options)
4.2. 模擬移動設(shè)備
移動設(shè)備user-agent表格:http://www.fynas.com/ua
因?yàn)橐苿影婢W(wǎng)站的反爬蟲的能力比較弱
# 通過設(shè)置user-agent,用來模擬移動設(shè)備 # 比如模擬 android QQ瀏覽器 options.add_argument('user-agent="MQQBrowser/26 Mozilla/5.0 (Linux; U; Android 2.3.7; zh-cn; MB200 Build/GRJ22; CyanogenMod-7) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1"') # 模擬iPhone 6 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"')
4.3. 禁止圖片加載
不加載圖片的情況下,可以提升爬取速度。
# 禁止圖片的加載 from selenium import webdriver chrome_options = webdriver.ChromeOptions() prefs = {"profile.managed_default_content_settings.images": 2} chrome_options.add_experimental_option("prefs", prefs) # 啟動瀏覽器,并設(shè)置好wait browser = webdriver.Chrome(chrome_options=chrome_options) browser.set_window_size(configure.windowHeight, configure.windowWidth) # 根據(jù)桌面分辨率來定,主要是為了抓到驗(yàn)證碼的截屏 wait = WebDriverWait(browser, timeout = configure.timeoutMain)
4.4. 添加代理
為selenium爬蟲添加代理,這個地方尤其需要注意的是,在選擇代理時,盡量選擇靜態(tài)IP,才能提升爬取的穩(wěn)定性。因?yàn)槿绻x擇selenium來做爬蟲,說明網(wǎng)站的反爬能力比較高(要不然直接上scrapy了),對網(wǎng)頁之間的連貫性,cookies,用戶狀態(tài)等有較高的監(jiān)測。如果使用動態(tài)匿名IP,每個IP的存活時間是很短的(1~3分鐘)。
from selenium import webdriver # 靜態(tài)IP:102.23.1.105:2005 # 阿布云動態(tài)IP:http://D37EPSERV96VT4W2:CERU56DAEB345HU90@proxy.abuyun.com:9020 PROXY = "proxy_host:proxy:port" options = webdriver.ChromeOptions() desired_capabilities = options.to_capabilities() desired_capabilities['proxy'] = { "httpProxy": PROXY, "ftpProxy": PROXY, "sslProxy": PROXY, "noProxy": None, "proxyType": "MANUAL", "class": "org.openqa.selenium.Proxy", "autodetect": False } driver = webdriver.Chrome(desired_capabilities = desired_capabilities)
4.5. 瀏覽器選項(xiàng)設(shè)置
selenium一般打開的是不帶擴(kuò)展的純凈的瀏覽器,但是有時候我們想對瀏覽器進(jìn)行一些設(shè)置,比如 設(shè)置flash選項(xiàng)的默認(rèn)值為全局始終允許,清除cookies,清除緩存 之類。
想要實(shí)現(xiàn)這個目的,有一種思路,下面以chrome瀏覽器為例:
在selenium爬蟲啟動時,首先開一個窗口,在地址欄鍵入:chrome://settings/content 或 chrome://settings/privacy,然后由程序,像操作普通網(wǎng)頁一樣,進(jìn)行設(shè)置,保存。
4.6.添加瀏覽器擴(kuò)展應(yīng)用
selenium一般打開的是不帶擴(kuò)展的純凈的瀏覽器,但是有時候我們爬取數(shù)據(jù)時需要借助一些插件,比如解析類xpath helper,翻譯類,獲取額外信息(銷量)等。那我們怎么在啟動chromedriver時,帶上一些我們需要的插件呢?
下面以在chrome中加載Xpath Helper插件為例:
4.6.1. 下載相應(yīng)的插件Xpath Helper下載地址:https://www.jb51.net/softs/673040.html
如下,是一個 以 crx 為后綴的文件:
4.6.2.
將插件路徑填入代碼中
# 添加xpath helper應(yīng)用 from selenium import webdriver chrome_options = webdriver.ChromeOptions() # 設(shè)置好應(yīng)用擴(kuò)展 extension_path = 'D:/extension/XPath-Helper_v2.0.2.crx' chrome_options.add_extension(extension_path) # 啟動瀏覽器,并設(shè)置好wait browser = webdriver.Chrome(chrome_options=chrome_options)
4.6.3. 結(jié)果展示
4.6.4. 注意事項(xiàng)
第一,為了提高爬取速度,盡可能的少加載插件。
第二,有一種方案會加載用戶對chrome瀏覽器的所有配置信息,但是測試并無法使用,如下:
首先進(jìn)入C:\Users(用戶)\你的電腦名稱\AppData\Local\Google\Chrome\User Data\Default\Extensions,點(diǎn)開Extensions,里面的文件夾就是安裝過的擴(kuò)展,(記得先把電腦隱藏文件夾顯示出來,否則找不到) 但是名字是一堆我看不懂的無序的英文字母,我的辦法是一個一個點(diǎn)開找到對應(yīng)的插件版本號,版本號在chrome Extensions選項(xiàng)里找然后打包你需要的插件:打開chrome的設(shè)置,在里面點(diǎn)開擴(kuò)展程序,選中開發(fā)者模式,你安裝的插件的下面會出現(xiàn)一個ID,這個ID對應(yīng)的就是你要打包的插件,然后打包擴(kuò)展程序,找到對應(yīng)的文件夾(或者你也可以把這個文件夾復(fù)制到電腦任意地方)下面的版本號的文件夾,也就是ID名文件夾內(nèi)部的那個文件夾,然后點(diǎn)擊打包擴(kuò)展程序,就可以了,會相應(yīng)的在版本號的同一級地方出現(xiàn)后綴名是crx和pem的文件,這個crx的文件就是我們需要的(不過按照這種方式,在我的本地目錄是找不到這樣的crx文件,需要單獨(dú)下載…)。準(zhǔn)備工作完成,看代碼:
# 第一種方式 # chrome瀏覽器的擴(kuò)展程序都在:C:\Users\Administrator\AppData\Local\Google\Chrome\User Data\Profile 2\Extensions\下 chrome_options.add_argument("user-data-dir=C:/Users/Administrator/AppData/Local/Google/Chrome/User Data")
# 加載所有Chrome配置, 用Chrome地址欄輸入chrome://version/,查看自己的“個人資料路徑”,然后在瀏覽器啟動時,調(diào)用這個配置文件,代碼如下: from selenium import webdriver option = webdriver.ChromeOptions() option.add_argument('--user-data-dir=C:\Users\Administrator\AppData\Local\Google\Chrome\User Data') #設(shè)置成用戶自己的數(shù)據(jù)目錄 driver = webdriver.Chrome(chrome_options=option)
# 出現(xiàn)錯誤結(jié)果 第一,所有瀏覽器窗口,包括自己打開的都會被控制住。 第二,其他動作不起作用,而且會crash。 Traceback (most recent call last): File "E:/PyCharmCode/taobaoProductSelenium/taobaoSelenium.py", line 40, in <module> # 啟動瀏覽器,并設(shè)置好wait File "E:\Miniconda\lib\site-packages\selenium\webdriver\chrome\webdriver.py", line 69, in __init__ desired_capabilities=desired_capabilities) File "E:\Miniconda\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 151, in __init__ self.start_session(desired_capabilities, browser_profile) File "E:\Miniconda\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 240, in start_session response = self.execute(Command.NEW_SESSION, parameters) File "E:\Miniconda\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 308, in execute self.error_handler.check_response(response) File "E:\Miniconda\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 194, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: crashed (Driver info: chromedriver=2.32.498550 (9dec58e66c31bcc53a9ce3c7226f0c1c5810906a),platform=Windows NT 6.1.7601 SP1 x86_64)
4.7. 登錄時關(guān)閉彈出的密碼保存提示框
最近在使用chrome登錄網(wǎng)站的時候總有密碼保存提示框,并不是所有的都會有密碼保存提示框,其實(shí)只需要設(shè)置啟動chrome的相關(guān)參數(shù)就可以避免這種問題。
from time import sleep from selenium import webdriver from selenium.webdriver.common.by import By options = webdriver.ChromeOptions() prefs = {} # 設(shè)置這兩個參數(shù)就可以避免密碼提示框的彈出 prefs[“credentials_enable_service”] = False prefs[“profile.password_manager_enabled”] = False options.add_experimental_option(“prefs”, prefs) browser = webdriver.Chrome(chrome_options=options) browser.get('https://www.baidu.com/')
5. 其他參數(shù)
參考文章:https://www.jb51.net/article/182967.htm
5.1 chrome地址欄命令在Chrome的瀏覽器地址欄中輸入以下命令,就會返回相應(yīng)的結(jié)果。這些命令包括查看內(nèi)存狀態(tài),瀏覽器狀態(tài),網(wǎng)絡(luò)狀態(tài),DNS服務(wù)器狀態(tài),插件緩存等等。但是需要注意的是這些命令會不停的變動,所以不一定都是好用的。
about:version - 顯示當(dāng)前版本
about:memory - 顯示本機(jī)瀏覽器內(nèi)存使用狀況
about:plugins - 顯示已安裝插件
about:histograms - 顯示歷史記錄
about:dns - 顯示DNS狀態(tài)
about:cache - 顯示緩存頁面
about:gpu -是否有硬件加速
about:flags -開啟一些插件 //使用后彈出這么些東西:“請小心,這些實(shí)驗(yàn)可能有風(fēng)險”,不知會不會搞亂俺的配置啊!
chrome://extensions/ - 查看已經(jīng)安裝的擴(kuò)展
5.2. chrome實(shí)用參數(shù)
其他的一些關(guān)于Chrome的實(shí)用參數(shù)及簡要的中文說明,使用方法同上4.5.4,當(dāng)然也可以在shell中使用。
–user-data-dir=”[PATH]” 指定用戶文件夾User Data路徑,可以把書簽這樣的用戶數(shù)據(jù)保存在系統(tǒng)分區(qū)以外的分區(qū)。
–disk-cache-dir=”[PATH]“ 指定緩存Cache路徑
–disk-cache-size= 指定Cache大小,單位Byte
–first run 重置到初始狀態(tài),第一次運(yùn)行
–incognito 隱身模式啟動
–disable-javascript 禁用Javascript
--omnibox-popup-count=“num” 將地址欄彈出的提示菜單數(shù)量改為num個。我都改為15個了。
--user-agent=“xxxxxxxx” 修改HTTP請求頭部的Agent字符串,可以通過about:version頁面查看修改效果
--disable-plugins 禁止加載所有插件,可以增加速度??梢酝ㄟ^about:plugins頁面查看效果
--disable-javascript 禁用JavaScript,如果覺得速度慢在加上這個
--disable-java 禁用java
--start-maximized 啟動就最大化
--no-sandbox 取消沙盒模式
--single-process 單進(jìn)程運(yùn)行
--process-per-tab 每個標(biāo)簽使用單獨(dú)進(jìn)程
--process-per-site 每個站點(diǎn)使用單獨(dú)進(jìn)程
--in-process-plugins 插件不啟用單獨(dú)進(jìn)程
--disable-popup-blocking 禁用彈出攔截
--disable-plugins 禁用插件
--disable-images 禁用圖像
--incognito 啟動進(jìn)入隱身模式
--enable-udd-profiles 啟用賬戶切換菜單
--proxy-pac-url 使用pac代理 [via 1/2]
--lang=zh-CN 設(shè)置語言為簡體中文
--disk-cache-dir 自定義緩存目錄
--disk-cache-size 自定義緩存最大值(單位byte)
--media-cache-size 自定義多媒體緩存最大值(單位byte)
--bookmark-menu 在工具 欄增加一個書簽按鈕
--enable-sync 啟用書簽同步
–single-process 單進(jìn)程運(yùn)行Google Chrome
–start-maximized 啟動Google Chrome就最大化
–disable-java 禁止Java
–no-sandbox 非沙盒模式運(yùn)行
以上是“selenium+python如何配置chrome瀏覽器”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。