注:以下浏览器举例皆为chrome
一、获取本机浏览器版本号
windows:通过注册表获取浏览器版本号,version为浏览器版本号
import winreg
string = r‘Software\Google\Update\Clients\{8A69D345-D564-463c-AFF1-A69D9E530F96}‘
handle = winreg.OpenKey(winreg.HKEY_CURRENT_USER, string, 0, (winreg.KEY_WOW64_64KEY + winreg.KEY_READ))
local_version, _type = winreg.QueryValueEx(handle, "pv")
mac:通过bash命令获取 version
cmd = ‘/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --version ‘
m = os.popen(cmd)
result = m.readlines()[0].split(‘ ‘)
local_version = result[2]
m.close()
二、获取driver的所有版本
国内镜像源地址:
home_url=http://npm.taobao.org/mirrors/chromedriver/
国外镜像源地址:
web页面地址为:http://chromedriver.storage.googleapis.com/index.html
abroad_url=http://chromedriver.storage.googleapis.com/?delimiter=/&prefix=
获取所有版本
response = requests.get(url) pattern = re.compile(‘<Prefix>(\d.*?)/</Prefix>‘)
raw_version_list = re.findall(pattern=pattern, string=response.text)
三、匹配版本
法一:只匹配前三位版本号,最后一个不匹配最接近的版本
version_re = re.compile(r‘^[1-9]\d*\.\d*.\d*‘) # 匹配前3位版本号的正则表达式
match_list = []
for i in raw_version_list:
raw_v = version_re.findall(i)[0] #前3位的版本号
local_v=version_re.findall(local_version)[0]
if local_v == raw_v:
match_list.append(i)
driver_version=match_list[-1] #取列表中的最后一个
法二:匹配本机浏览器版本与driver版本最接近的版本
chrome_major_version, chrome_minor_version = local_version.rsplit(‘.‘, 1)
for version in raw_version_list:
major_version, minor_version = version.rsplit(‘.‘, 1)
if chrome_major_version == major_version:
candidate_minor_version_list.append(minor_version)
target_minor_version = candidate_minor_version_list[0]
for current_minor_version in candidate_minor_version_list[1:]:
if abs(int(current_minor_version) - int(chrome_minor_version)) < abs(int(target_minor_version) - int(chrome_minor_version)):
target_minor_version = current_minor_version
driver_version = chrome_major_version + ‘.‘ + target_minor_version
?
四、下载driver
if platform_system == ‘windows‘:
remote_driver_path = "http://chromedriver.storage.googleapis.com/%s/chromedriver_win32.zip" % driver_version
local_driver_path = os.path.join(self._driver_save_path, "chromedriver.exe")
elif platform_system == ‘mac‘:
remote_driver_path = "http://chromedriver.storage.googleapis.com/%s/chromedriver_mac64.zip" % driver_version
local_driver_path = os.path.join(self._driver_save_path, "chromedriver")
else:
raise ValueError(‘platform {} is not supported‘.format(platform_system))
?
原文:https://www.cnblogs.com/felix-test/p/14813923.html