当前位置:网站首页>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)
边栏推荐
- 前置机是什么意思?主要作用是什么?与堡垒机有什么区别?
- Balanced Multimodal Learning via On-the-fly Gradient Modulation(CVPR2022 oral)
- Cloud native technology container knowledge points
- Dayu200 experience officer runs the intelligent drying system page based on arkui ETS on dayu200
- 浅谈网络安全之文件上传
- OpenSSL: a full-featured toolkit for TLS and SSL protocols, and a general encryption library
- Word2vec (skip gram and cbow) - pytorch
- asp读取oracle数据库问题
- CRMEB商城系统如何助力营销?
- UE4 blueprint learning chapter (IV) -- process control forloop and whileloop
猜你喜欢
MySQL中正则表达式(REGEXP)使用详解
MySQL实现字段分割一行转多行的示例代码
Matlab tips (27) grey prediction
Let's see through the network i/o model from beginning to end
Designed for decision tree, the National University of Singapore and Tsinghua University jointly proposed a fast and safe federal learning system
云原生(三十二) | Kubernetes篇之平台存储系统介绍
Thinkphp5 multi table associative query method join queries two database tables, and the query results are spliced and returned
Unified Focal loss: Generalising Dice and cross entropy-based losses to handle class imbalanced medi
(1)长安链学习笔记-启动长安链
Method of canceling automatic watermarking of uploaded pictures by CSDN
随机推荐
UVa 11732 – strcmp() Anyone?
动作捕捉用于蛇运动分析及蛇形机器人开发
Balanced Multimodal Learning via On-the-fly Gradient Modulation(CVPR2022 oral)
What can be done for traffic safety?
Children's pajamas (Australia) as/nzs 1249:2014 handling process
dockermysql修改root账号密码并赋予权限
three. JS gorgeous bubble effect
Is the more additives in food, the less safe it is?
Flutter life cycle
Les entreprises ne veulent pas remplacer un système vieux de dix ans
Matlab tips (27) grey prediction
Extern keyword
Aardio - does not declare the method of directly passing float values
面试题:AOF重写机制,redis面试必问!!!
CRMEB商城系统如何助力营销?
「小程序容器技术」,是噱头还是新风口?
Designed for decision tree, the National University of Singapore and Tsinghua University jointly proposed a fast and safe federal learning system
Is "applet container technology" a gimmick or a new outlet?
#DAYU200体验官# 在DAYU200运行基于ArkUI-eTS的智能晾晒系统页面
存币生息理财dapp系统开发案例演示