当前位置:网站首页>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)
边栏推荐
- Redis persistence mechanism
- 同构+跨端,懂得小程序+kbone+finclip就够了!
- 室内LED显示屏应该怎么选择?这5点注意事项必须考虑在内
- OpenNMS separation database
- Puppeter connects to the existing Chrome browser
- (DART) usage supplement
- 【Unity】升级版·Excel数据解析,自动创建对应C#类,自动创建ScriptableObject生成类,自动序列化Asset文件
- #DAYU200体验官# 首页aito视频&Canvas绘制仪表盘(ets)
- A few suggestions for making rust library more beautiful! Have you learned?
- DockerMySQL无法被宿主机访问的问题解决
猜你喜欢
每人每年最高500万经费!选人不选项目,专注基础科研,科学家主导腾讯出资的「新基石」启动申报...
Unified Focal loss: Generalising Dice and cross entropy-based losses to handle class imbalanced medi
cuda 探索
Improving Multimodal Accuracy Through Modality Pre-training and Attention
NFTScan 开发者平台推出 Pro API 商业化服务
DR-Net: dual-rotation network with feature map enhancement for medical image segmentation
Introduction to network basics
View
[unity] upgraded version · Excel data analysis, automatically create corresponding C classes, automatically create scriptableobject generation classes, and automatically serialize asset files
DR-Net: dual-rotation network with feature map enhancement for medical image segmentation
随机推荐
Improving Multimodal Accuracy Through Modality Pre-training and Attention
Unified Focal loss: Generalising Dice and cross entropy-based losses to handle class imbalanced medi
(shuttle) navigation return interception: willpopscope
dockermysql修改root账号密码并赋予权限
On file uploading of network security
第十九章 使用工作队列管理器(二)
Children's pajamas (Australia) as/nzs 1249:2014 handling process
Why are some people still poor and living at the bottom of society even though they have been working hard?
食品里的添加剂品种越多,越不安全吗?
Windows auzre background operation interface of Microsoft's cloud computing products
Method of canceling automatic watermarking of uploaded pictures by CSDN
AcWing 4299. Delete point
服务器的系统怎么选者
Enterprises do not want to replace the old system that has been used for ten years
[unity] upgraded version · Excel data analysis, automatically create corresponding C classes, automatically create scriptableobject generation classes, and automatically serialize asset files
让 Rust 库更优美的几个建议!你学会了吗?
「小程序容器技术」,是噱头还是新风口?
同构+跨端,懂得小程序+kbone+finclip就够了!
MATLAB小技巧(27)灰色预测
[untitled]