当前位置: 首页 > news >正文

python自动更新chromedriver

python自动化过程中,经常遇到脚本跑着跑着,就报错,一看,浏览器自动升级了。
共两张解决方案:
1、禁止浏览器自动升级
2、当脚本运行前先去检测当前的chromedriver与浏览器是否匹配,不匹配,就下载,然后将下载的chromedriver放置到指定位置。
本篇主要是记录方案2的实现,主要依靠webdriver_manager库来实现,代码如下:

import os
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
import shutil"""使用须知:1.安装webdriver_manager库pip install webdriver_manager -i https://pypi.tuna.tsinghua.edu.cn/simple
"""def update_chrome_driver(path) -> webdriver:""":param path: 下载后的chromedriver存放位置:return:"""try:wb = webdriver.Chrome()print("当前已是最新的chromedriver")wb.quit()except Exception as e:print("更新驱动中……")driver_path = ChromeDriverManager().install()start = driver_path.rindex('/')src_path = driver_path[:start + 1]print(f"下载的路径:{src_path}")copy_dirs(src_path, path)print("===========更新驱动完成============")def copy_dirs(src_path, target_path):''':param src_path::param target_path::return:'''file_count = 0source_path = os.path.abspath(src_path)target_path = os.path.abspath(target_path)if not os.path.exists(target_path):os.makedirs(target_path)if os.path.exists(source_path):for root, dirs, files in os.walk(source_path):for file in files:src_file = os.path.join(root, file)shutil.copy(src_file, target_path)file_count += 1print(f"=====移动的文件========>{src_file}")return int(file_count)if __name__ == '__main__':use_path = "你想要存放chromedriver的路径"update_chrome_driver(use_path)

以后每次执行脚本前,执行改文件即可,已经在mac和windows环境下验证过。
还有一点需要注意,use_path的路径是否有写入的权限!
mac电脑可以看一下这篇文章: macOs修改文件目录

相关文章:

  • swiper+fixed的错误,splice函数的使用,提取年月日substring
  • [每日一练]利用自连接实现数量查询
  • MySQL | excel数据输出insert语句
  • 第167天:应急响应-日志自动提取分析项目_ELK_Logkit_LogonTracer_Anolog等
  • 力扣随机一题——所有元音按顺序排序的最长字符串
  • 数据驱动农业——助力作物增产
  • 新书推荐——《Python贝叶斯深度学习》
  • 基于php的民宿预订管理系统
  • 计算机视觉学习---图像增强
  • 图像处理基础知识点简记
  • 什么是区块链桥?
  • 理解Python闭包概念
  • Windows下VScode快速配置OpenCV开发环境 【快乐篇】
  • Pytorch 学习手册
  • LeetCode 面试经典150题 69.x的平方根
  • [译]CSS 居中(Center)方法大合集
  • 4. 路由到控制器 - Laravel从零开始教程
  • Docker入门(二) - Dockerfile
  • ECMAScript6(0):ES6简明参考手册
  • java8-模拟hadoop
  • JS基础之数据类型、对象、原型、原型链、继承
  • js中的正则表达式入门
  • laravel5.5 视图共享数据
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • python_bomb----数据类型总结
  • React中的“虫洞”——Context
  • vue的全局变量和全局拦截请求器
  • 给初学者:JavaScript 中数组操作注意点
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 排序算法之--选择排序
  • 前端存储 - localStorage
  • 怎样选择前端框架
  • Java数据解析之JSON
  • 阿里云服务器如何修改远程端口?
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • # 详解 JS 中的事件循环、宏/微任务、Primise对象、定时器函数,以及其在工作中的应用和注意事项
  • #Linux(make工具和makefile文件以及makefile语法)
  • (152)时序收敛--->(02)时序收敛二
  • (C语言)字符分类函数
  • (done) 声音信号处理基础知识(4) (Understanding Audio Signals for ML)
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (六)c52学习之旅-独立按键
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (三) diretfbrc详解
  • (三)Kafka 监控之 Streams 监控(Streams Monitoring)和其他
  • (三)mysql_MYSQL(三)
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (原創) 物件導向與老子思想 (OO)
  • (转)Linux整合apache和tomcat构建Web服务器
  • (转)母版页和相对路径