当前位置:网站首页>Automatically update selenium driver chromedriver
Automatically update selenium driver chromedriver
2022-07-06 23:11:00 【Xiaoming - code entity】
Due to frequent automatic updates of Google viewer selenium The driver fails and needs to be downloaded again , How to make code update automatically selenium What about the driving method ?
selenium When the connection Google viewer throws an exception , Will display the current version of Google Explorer , We can go to selenium Drive the download website to get all version information , Then find a matching version to download and unzip .
For faster download speed , Here I choose the domestic mirror station :http://npm.taobao.org/mirrors/chromedriver/
It will redirect to :https://registry.npmmirror.com/binary.html?path=chromedriver/
Checked by developer tools , You can find the interface to get all the latest version information :https://registry.npmmirror.com/-/binary/chromedriver/
I match according to the first three numbers , Download the driver with the largest version number .
The final complete code is :
from selenium import webdriver
from selenium.common.exceptions import SessionNotCreatedException
import re
import os
import requests
import zipfile
import itertools
def getChromeDriver(options=None):
""" Code author : Xiaoming - Code entities xxmdmst.blog.csdn.net"""
try:
driver = webdriver.Chrome(options=options)
return driver
except SessionNotCreatedException as e:
driver_version = re.search(
"Chrome version ([\d.]+)", str(e)).group(1)
chrome_version = re.search(
"Current browser version is ([\d.]+) with", str(e)).group(1)
print(f" Driver version :{
driver_version}, Google Explorer version :{
chrome_version}, Are not compatible \n Start updating the driver ...")
res = requests.get(
"https://registry.npmmirror.com/-/binary/chromedriver/")
versions = [obj["name"][:-1] for obj in res.json() if re.match("\d+",
obj["name"]) and obj["name"].count(".") == 3]
versions = {
key: max(versions_split, key=lambda x: int(x[x.rfind(".")+1:]))
for key, versions_split in itertools.groupby(versions, key=lambda x: x[:x.rfind(".")])}
dest_version = versions[chrome_version[:chrome_version.rfind(".")]]
print(" The driver will be updated to ", dest_version)
file = f"chromedriver_{
dest_version}_win32.zip"
if not os.path.exists(file):
url = f"https://registry.npmmirror.com/-/binary/chromedriver/{
dest_version}/chromedriver_win32.zip"
print(" Driver download address :", url)
res = requests.get(url)
with open(file, 'wb') as f:
f.write(res.content)
else:
print(file, " The file has been downloaded to the current directory , Next, directly use cache decompression to overwrite ...")
with zipfile.ZipFile(file) as zf:
zf.extract("chromedriver.exe", ".")
driver = webdriver.Chrome(options=options)
return driver
options = webdriver.ChromeOptions()
options.add_experimental_option(
'excludeSwitches', ['enable-logging', 'enable-automation'])
driver = getChromeDriver(options)
driver.get("https://www.baidu.com/")
Printing example when the driver is incompatible :
Driver version :100, Google Explorer version :102.0.5005.115, Are not compatible
Start updating the driver ...
The driver will be updated to 102.0.5005.61
Driver download address : https://registry.npmmirror.com/-/binary/chromedriver/102.0.5005.61/chromedriver_win32.zip
The download method developed above is relatively fast , If the code is too long , have access to webdriver_manager This library , adopt pip It can be installed directly :
pip install webdriver_manager
Then execute the following code from https://chromedriver.storage.googleapis.com Automatically download the matching driver , And return to the download location :
from webdriver_manager.chrome import ChromeDriverManager
ChromeDriverManager().install()
Print examples :
[WDM] - ====== WebDriver manager ======
[WDM] - Current google-chrome version is 102.0.5005
[WDM] - Get LATEST chromedriver version for 102.0.5005 google-chrome
[WDM] - There is no [win32] chromedriver for browser 102.0.5005 in cache
[WDM] - About to download new driver from https://chromedriver.storage.googleapis.com/102.0.5005.61/chromedriver_win32.zip
[WDM] - Driver has been saved in cache [C:\Users\ASUS\.wdm\drivers\chromedriver\win32\102.0.5005.61]
'C:\\Users\\ASUS\\.wdm\\drivers\\chromedriver\\win32\\102.0.5005.61\\chromedriver.exe'
In this way, we can directly set the position of the driver through the returned string :
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(ChromeDriverManager().install(), options=None)
边栏推荐
猜你喜欢

欧洲生物信息研究所2021亮点报告发布:采用AlphaFold已预测出近1百万个蛋白质

mysql连接vscode成功了,但是报这个错
Dockermysql modifies the root account password and grants permissions

How to choose indoor LED display? These five considerations must be taken into account

How to confirm the storage mode of the current system by program?

Motion capture for snake motion analysis and snake robot development
MySQL中正则表达式(REGEXP)使用详解

Traversal of a tree in first order, middle order, and then order
mysql拆分字符串作为查询条件的示例代码
Docker starts MySQL and -emysql_ ROOT_ Password = my secret PW problem solving
随机推荐
使用MitmProxy离线缓存360度全景网页
Unified Focal loss: Generalising Dice and cross entropy-based losses to handle class imbalanced medi
Redis 持久化机制
Cloud native technology container knowledge points
[launched in the whole network] redis series 3: high availability of master-slave architecture
儿童睡衣(澳大利亚)AS/NZS 1249:2014办理流程
Matlab tips (27) grey prediction
允许全表扫描 那个语句好像不生效set odps.sql.allow.fullscan=true;我
NPM cannot install sharp
AcWing 4300. Two operations (minimum number of BFS searches)
asp读取oracle数据库问题
Volatile keyword
让我们,从头到尾,通透网络I/O模型
Const keyword
BasicVSR_ Plusplus master test videos and pictures
Use ECs to set up an agent
Dayu200 experience officer homepage AITO video & Canvas drawing dashboard (ETS)
DR-Net: dual-rotation network with feature map enhancement for medical image segmentation
DR-Net: dual-rotation network with feature map enhancement for medical image segmentation
The application of machine learning in software testing