chromedriver與chrome版本不匹配解決辦法


如果用selenium時間比較長的話,總會碰到chrome版本和chromedriver版本不匹配問題

這個報錯相信大家不少見,這個問題就是因為chromedriver現在和chrome大版本保持一致,否則就啟動不了,

而chrome又是常常更新,還是自動的。

 

 

 做好的腳本,發給客戶后,過一段時間客戶就會說跑不了,還得更換chromedriver,很是麻煩

有沒有啥辦法解決這個問題呢

首先過一下人工更換的流程,

1.首先是打開chrome,查看版本(結果查看版本的時候,他又更新了)

可以看到當前版本是89

 

 

 2.去chromedriver的淘寶鏡像網站去下載對應的版本 http://npm.taobao.org/mirrors/chromedriver/

有時候會出現多個大版本下面的小版本,隨便選一個大版本號一樣的就行

 

 

3. 進去下載壓縮包,按照不同系統進行選擇下載

 

 

 4.替換之前的chromedriver,到此完成更新流程

以上是人工操作流程,對於開發人員來說,應該是很快的,也就幾十秒的事情,對於客戶來說,卻是半小時都不一定能搞定

下面就是說把這個流程自動化,自動完成整個過程

1,首先是第一步,查看chrome版本

這里說一下,我這邊都是win平台,其他平台自行解決,思路都是一樣的

這里繞了一些彎路

之前思路是先通過where 命令來搜索chrome.exe,然后從exe中提取版本信息

命令是 where /r C:/ chrome.exe

這個命令也能執行,但是么,如果c盤比較大,搜索就很慢,或者裝在其他盤,就搜不到

后來網上找了方法,通過注冊表來搜索,提供的一個思路是注冊表的卸載軟件列表,里面又版本信息

 

 

路徑分32位系統和64位系統

\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Google Chrome

\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Google Chrome

通過這個路徑可以獲取到chrome的版本信息

python下面調用winreg

#64位
key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE,r"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Google Chrome")
#32位
key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE,r"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Google Chrome")
version = winreg.QueryValueEx(key,"version")[0]

 即可獲得版本信息

然后獲取chromedriver的信息

我這邊chromedriver都是放在項目下的,沒有放到path下面

通過這個命令可以獲取到版本信息 chromedriver.exe --version

 

 

 

 

 

然后通過匹配這2個的大版本號來判斷是否一致

如果不一致,或者不存在chromedriver,就去鏡像站下載

http://npm.taobao.org/mirrors/chromedriver/

先搜索這個網站的版本,然后下載chromedriver,解壓縮,就完成了自動更新

完整代碼如下

import zipfile
import winreg
import re
import requests

def download(link, file_name):
response = requests.get(link)
file = response.content
with open(file_name, 'wb') as f:
f.write(file)
def unzip(zip_file):
extracting = zipfile.ZipFile(zip_file)
extracting.extractall('.')
extracting.close()
os.remove(zip_file)
def re_all(rule, body):
rule_all = re.findall(re.compile(r'%s' % (rule)), body) if len(rule_all) > 0: return rule_all else: return False def get_chromedriver_list(): '''獲取驅動列表''' url = 'http://npm.taobao.org/mirrors/chromedriver/' r = requests.get(url).text return re_all(r'/mirrors/chromedriver/([0-9]+\.[0-9]+.[0-9]+.[0-9]+)/', r) def get_chromedriver(version): '''下載驅動''' link = 'http://npm.taobao.org/mirrors/chromedriver/%s/chromedriver_win32.zip' % version if os.path.exists('chromedriver.exe'): os.remove('chromedriver.exe') download(link, 'chromedriver.zip') unzip('chromedriver.zip') return True def get_chrome_version(): key = False if not key: #64位 try: key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, r"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Google Chrome") except: pass if not key: # 32位 try: key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, r"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Google Chrome") except: pass if not key: return False version = winreg.QueryValueEx(key, "version")[0] return version def get_driver_version(): info = os.popen('chromedriver.exe --version').read().strip() if info: return info.split(' ')[1] return False def check_driver_version(): logger.info('獲取 chromedriver 版本') if not os.path.exists('chromedriver.exe'): logger.info('沒有找到 chromedriver.exe') driver_version = '無' else: driver_version = get_driver_version().split('.')[0] chrome_version = get_chrome_version() if not chrome_version: logger.info('沒有按照chrome') return False chrome_version = chrome_version.split('.')[0] if driver_version != chrome_version.split('.')[0]: logger.info('瀏覽器(%s)和驅動版本(%s)不匹配' % (chrome_version, driver_version)) version_list = get_chromedriver_list() if not version_list: logger.info('獲取驅動列表失敗') return False for version in version_list: if chrome_version in version: if not get_chromedriver(version): logger.info('下載驅動失敗') return False else: logger.info('驅動更新成功') return True logger.info('沒有找到對應的驅動版本') return False else: logger.info('版本匹配通過') return True

 然后再啟動chrome之前,放入這個檢測,就能完成自動更新匹配了

 正好更新,測試下,效果如下,就1秒鍾完成了檢測,下載,替換,這樣就再也不用管這個版本匹配問題了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM