当前位置:网站首页>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)
边栏推荐
- The problem that dockermysql cannot be accessed by the host machine is solved
- mysql查看表结构的三种方法总结
- 华为云GaussDB(for Redis)揭秘第21期:使用高斯Redis实现二级索引
- #DAYU200体验官# 在DAYU200运行基于ArkUI-eTS的智能晾晒系统页面
- BasicVSR_ Plusplus master test videos and pictures
- Nftscan Developer Platform launches Pro API commercial services
- 石墨文档:4大对策解决企业文件信息安全问题
- 第十九章 使用工作队列管理器(二)
- 服务器的系统怎么选者
- Rust knowledge mind map XMIND
猜你喜欢
docker中mysql开启日志的实现步骤
专为决策树打造,新加坡国立大学&清华大学联合提出快速安全的联邦学习新系统
On the problems of born charge and non analytical correction in phonon and heat transport calculations
[launched in the whole network] redis series 3: high availability of master-slave architecture
Flutter life cycle
CUDA exploration
Dockermysql modifies the root account password and grants permissions
NFTScan 开发者平台推出 Pro API 商业化服务
[compilation principle] LR (0) analyzer half done
Modules that can be used by both the electron main process and the rendering process
随机推荐
MySQL authentication bypass vulnerability (cve-2012-2122)
2014 Alibaba web pre intern project analysis (1)
企业不想换掉用了十年的老系统
Devsecops software R & D security practice - release
Puppeter connects to the existing Chrome browser
[launched in the whole network] redis series 3: high availability of master-slave architecture
案例推荐丨安擎携手伙伴,保障“智慧法院”更加高效
食品里的添加剂品种越多,越不安全吗?
C three ways to realize socket data reception
What does security capability mean? What are the protection capabilities of different levels of ISO?
为了交通安全,可以做些什么?
Case recommendation: An Qing works with partners to ensure that the "smart court" is more efficient
Aardio - construct a multi button component with customplus library +plus
视图(view)
DR-Net: dual-rotation network with feature map enhancement for medical image segmentation
DevSecOps软件研发安全实践——发布篇
「小程序容器技术」,是噱头还是新风口?
Machine test question 1
华为云GaussDB(for Redis)揭秘第21期:使用高斯Redis实现二级索引
mysql连接vscode成功了,但是报这个错