前言
因為電腦google瀏覽器自動升級,還有就是其他同事使用的Google瀏覽器版本與自己的不一致,需要重復(fù)去下載,所有老是需要重新去下載驅(qū)動,很麻煩,所有寫了一個自動下載驅(qū)動的方法。
當(dāng)前方法只適配了Windows上的google驅(qū)動,其它系統(tǒng)和瀏覽器可以自己修改適配一下。文章來源:http://www.zghlxwxcb.cn/news/detail-508037.html
獲取谷歌版本(獲取google版本)
# __*__ coding:utf-8 __*__
import os
# 獲取瀏覽器版本,windows
chromeV = os.popen('reg query "HKEY_CURRENT_USER\Software\Google\Chrome\BLBeacon" /v version').read().strip().split(" ")[-1]
定義下載驅(qū)動方法
# __*__ coding:utf-8 __*__
import logging
import os
import xml
import zipfile
import requests
from xml.etree import ElementTree
import re
import win32api, win32con
PATH = lambda x: os.path.abspath(os.path.join(os.path.dirname(__file__), x))
def downloadChromeDriver(chrome_version, platform='win'):
"""
自動下載谷歌驅(qū)動
:param chrome_version: 谷歌瀏覽器版本, 如:106.0.5249.119
:param platform: 1.win 2.linux 3.mac
"""
xmlns = '{http://doc.s3.amazonaws.com/2006-03-01}'
url = 'http://chromedriver.storage.googleapis.com/?delimiter=/&prefix='
resp = requests.get(url=url)
# 讀取字符串格式xml數(shù)據(jù)
tree = xml.etree.ElementTree.fromstring(resp.text)
CommonPrefixes_list = tree.findall('{}CommonPrefixes'.format(xmlns))
for Prefix in CommonPrefixes_list:
# 獲取所有的驅(qū)動文件版本
prefix_ = Prefix.findall('{}Prefix'.format(xmlns))[0].text
if chrome_version[0:10] == prefix_[0:10]:
resp = requests.get('{}{}'.format(url, prefix_))
# 版本下各個系統(tǒng)版本谷歌驅(qū)動
root = xml.etree.ElementTree.fromstring(resp.text)
contents = root.findall('{}Contents'.format(xmlns))
for con in contents:
# print(con.tag)
headers = {
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.9'
}
# 下載驅(qū)動
# http://chromedriver.storage.googleapis.com/100.0.4896.20/chromedriver_win32.zip
if 'Key' in con[0].tag and platform in con[0].text:
resp_zip = requests.get(url='http://chromedriver.storage.googleapis.com/'+con[0].text, headers=headers)
zipfile_name = con[0].text.split('/')[1]
with open(PATH(zipfile_name), 'wb') as zip:
zip.write(resp_zip.content)
break
else:
return 0
# 解壓驅(qū)動文件并替換
zf = zipfile.ZipFile(zipfile_name, 'r')
name_list = [item for item in zf.namelist()]
for gz_item in name_list:
f_data = zf.read(gz_item)
with open(PATH("chromedriver.exe"), 'wb') as f:
# 保存解壓出來的文件
f.write(f_data)
logging.info('對應(yīng)谷歌瀏覽器驅(qū)動版本下載成功')
zf.close()
# 刪除zip壓縮包文件
os.remove(PATH('chromedriver_win32.zip'))
return 1
else:
logging.error('沒有找到 {} 版本的驅(qū)動。請手動前往下載:{}'.format(chrome_version, url))
return 0
下載邏輯判斷
1、本地不存在驅(qū)動,直接下載
2、存在且版本與瀏覽器版本匹配,則跳過
3、存在但版本跟瀏覽器匹配不上,則自動下載文章來源地址http://www.zghlxwxcb.cn/news/detail-508037.html
# 如果沒有谷歌驅(qū)動,自動下載驅(qū)動
if not os.path.isfile(PATH("chromedriver.exe")):
dret = downloadChromeDriver(chromeV)
logging.info('google驅(qū)動自動下載成功') if dret == 1 else logging.error('google驅(qū)動下載失??!')
# 啟動瀏覽器
s = Service(executable_path=PATH("chromedriver.exe"))
options = webdriver.ChromeOptions()
# 禁用日志--因為cmd運行的時候出現(xiàn)日志打印,且展示為亂碼
options.add_experimental_option('excludeSwitches', ['enable-logging'])
# 方法一:如果驅(qū)動有,則嘗試使用舊的驅(qū)動啟動,啟動失敗則自動下載更新驅(qū)動
try:
driver = webdriver.Chrome(service=s, options=options)
except Exception as e:
logging.info('啟動失敗當(dāng)前驅(qū)動可能與瀏覽器不匹配,更新一下驅(qū)動\n{}'.format(e))
downloadChromeDriver(chromeV)
driver = webdriver.Chrome(service=s, options=options)
# 方法二:獲取驅(qū)動的版本,和瀏覽器版本對比
# 獲取google驅(qū)動版本
chromedriver_version = os.popen(PATH('chromedriver.exe')).read().strip().split(' ')[2]
# 如果沒有谷歌驅(qū)動,自動下載驅(qū)動
if chromeV[0:10] != chromedriver_version[0:10]:
os.remove('chromedriver.exe')
dret = downloadChromeDriver(chromeV)
logging.info('當(dāng)前驅(qū)動可能與瀏覽器版本相差過大,更新驅(qū)動成功') if dret == 1 else logging.error('google驅(qū)動下載失敗!')
else:
logging.info('當(dāng)前驅(qū)動與瀏覽器版本匹配,無需更新驅(qū)動')
到了這里,關(guān)于selenium【自動下載谷歌驅(qū)動】自動獲取谷歌版本,并自動下載對應(yīng)版本的chromedriver.exe的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!