Selenium Webdriver驱动自管理
Webdriver驱动自管理
背景
在selenium自动化中,驱动和浏览器有一定的对应关系,以最常见的chrome和firefox为例。
chrome
要求比较严格。
比如在地址栏输入chrome://version/,得到版本信息如下:
Google Chrome 103.0.5060.106 (正式版本) (64 位) (cohort: Stable)
去驱动下载站:https://registry.npmmirror.com/binary.html?path=chromedriver/ (如下图),你可能找不到完全匹配上的版本,你只能103.0.5060.三个中找一个接近的试试(一般应该选择134)。这个给自动下载带来了麻烦。
还有很大的一个问题就是浏览器往往是自动更新的,你的驱动可能在一段时间后就匹配不到了,需要重新下载。
firefox
- 向下兼容性比较好。你就选择下载最新的版本即可(更新时间最新的)
- 向下兼容性比较好。你就选择下载最新的版本即可(更新时间最新的)
第三方库 webdriver-manager
这是官方推荐的一个库,用于管理webdriver这些二进制文件
https://www.selenium.dev/zh-cn/documentation/webdriver/getting_started/install_drivers/
安装
pip install webdriver-manager
官网
https://github.com/SergeyPirogov/webdriver_manager #github
https://pypi.org/project/webdriver-manager/ #pypi
简介
- 支持多种浏览器
- ChromeDriver
- GeckoDriver
- IEDriver
- OperaDriver
- EdgeChromiumDriver
- 兼容selenium4.0及以下版本
- 支持多种浏览器
实例
官方的DEMO
chrome
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
driver.get('https://www.baidu.com')
firefox
from selenium import webdriver
from selenium.webdriver.firefox.service import Service as FirefoxService
from webdriver_manager.firefox import GeckoDriverManager driver = webdriver.Firefox(service=FirefoxService(GeckoDriverManager().install()))
执行效果:控制台会打印如下信息(以chrome为例);浏览器在打开后自动退出
====== WebDriver manager ======
Current google-chrome version is 103.0.5060
Get LATEST chromedriver version for 103.0.5060 google-chrome
Trying to download new driver from https://chromedriver.storage.googleapis.com/103.0.5060.134/chromedriver_win32.zip
Driver has been saved in cache [C:\Users\songqin008\.wdm\drivers\chromedriver\win32\103.0.5060.134]
注意driver的保存位置
webdriver_manager 提供的配置项
指定下载路径
from webdriver_manager.chrome import ChromeDriverManager ChromeDriverManager(path = r".\\Drivers").install()
取消日志打印
import logging
import os os.environ['WDM_LOG'] = str(logging.NOTSET)
指定版本下载
from webdriver_manager.chrome import ChromeDriverManager ChromeDriverManager(version="2.26").install()
改良版本
基于官方的版本,主要有2个问题
- 1:下载位置无法二次利用(一般不在path中)
- 参考目录结构:D:\chrome_driver\drivers\chromedriver\win32\103.0.5060.134,下面会有一个chromedriver.exe和driver.zip(前者是后者解压出来的)
- 2:输出日志没有必要
- 1:下载位置无法二次利用(一般不在path中)
改进版本
def get_driver(tmp_driver_store_dir=r'd:\chrome_driver',
delete_tmp_file=True,
show_log=False):
""" :param tmp_driver_store_dir: 驱动临时存储位置
:param delete_tmp_file: 是否要删除临时文件,默认要删除
:param show_log: 是否显示安装驱动的过程,默认为不显示
:return: None
"""
import os
from shutil import rmtree
import sys
from pathlib import Path
from time import strftime
from webdriver_manager.chrome import ChromeDriverManager
import logging
python_dir = os.path.dirname(sys.executable) #获取当前python解释器所在的位置
tmp_driver_store_dir = tmp_driver_store_dir+strftime('%Y%m%d%H%M%S') #定义一个临时存放驱动的位置
if Path(tmp_driver_store_dir).exists(): #如果存在
rmtree(tmp_driver_store_dir) #删除该目录
Path(tmp_driver_store_dir).mkdir() #新建目录
if not show_log:
os.environ['WDM_LOG'] = str(logging.NOTSET)
ChromeDriverManager(path=tmp_driver_store_dir).install()
for _ in Path(tmp_driver_store_dir).rglob('*.exe'):
Path(_).replace(Path(python_dir) / Path(_).name) #移动到python解释器主目录下
if delete_tmp_file:
rmtree(tmp_driver_store_dir) from selenium import webdriver
get_driver()
driver = webdriver.Chrome()
driver.get('https://www.baidu.com')
Selenium Webdriver驱动自管理的更多相关文章
- python3 使用selenium +webdriver打开chrome失败,报错:FileNotFoundError: [Errno 2] No such file or directory: 'chromedriver': 'chromedriver'
提示chrome driver没有放置在正确的路径下 解决方法: 1.chromedriver与chrome各版本及下载地址 驱动的下载地址如下: http://chromedriver.storag ...
- IE11,Chrome65.0.3325.146,Firefox58的webdriver驱动下载,并用selenium驱动来实现自动化测试
各浏览器版本: python版本: selenium版本: IE11的Webdriver下载: http://dl.pconline.com.cn/download/771640-1.html ...
- Selenium学习之==>WebDriver驱动对照表
转自www.imdsx.cn 1.Chrome 对于chrome浏览器,有时候会有闪退的情况,也许是版本冲突的问题,我们要对照着这个表来对照查看是不是webdriver和chrome版本不对. chr ...
- Selenium的PO模式(Page Object Model)|(Selenium Webdriver For Python)
研究Selenium + python 自动化测试有近两个月了,不能说非常熟练,起码对selenium自动化的执行有了深入的认识. 从最初无结构的代码,到类的使用,方法封装,从原始函数 ...
- Selenium WebDriver + Python 环境配置
1. 下载必要工具及安装包 1.1.[Python开发环境] 下载并安装Python 2.7.x版本(当前支持2.x版本,不要下载最新的3.X的版本因为python3并非完全兼容python2) ...
- Selenium WebDriver TestNg Maven Eclipse java 简单实例
环境准备 前提条件Eclipse 已经安装过 TestNg ,Maven 插件 新建一个普通的java项目 点击右键 configure->convert to Maven Project 之后 ...
- selenium webdriver (python)的基本用法一
阅在线 AIP 文档:http://selenium.googlecode.com/git/docs/api/py/index.html目录一.selenium+python 环境搭建........ ...
- selenium webdriver (python)大全
webdriver的简介 硒2.0的主要新功能是集成的webdriver的API.webdriver的设计除了解决一些seleniumr-RC API的一些限制,与webdriver 的整合,将提供一 ...
- Linux环境下搭建python+selenium+webdriver环境
1.下载并安装python,一般安装linux系统,自带有python,则python不用安装.要下载可以在官网上下载: 或者使用下面命令安装: sudo apt-get install python ...
- 使用python selenium webdriver模拟浏览器
selenium是进行web自动化测试的一个工具,支持C,C++,Python,Java等语言,他能够实现模拟手工操作浏览器,进行自动化,通过webdriver驱动浏览器操作,我使用的是chrome浏 ...
随机推荐
- 幂次方表达:p1010
1 题目ID: P1010 [NOIP1998 普及组] 幂次方 2 题目描述: 任何一个正整数都可以用 22 的幂次方表示.例如 137=2^7+2^3+2^0137=27+23+20. 同时约定方 ...
- [leetcode] 713. Subarray Product Less Than K
题目 Given an array of integers nums and an integer k, return the number of contiguous subarrays where ...
- 核磁共振成像学习笔记——从FID信号到K空间
在理想磁场环境下(没有不存在场不均匀性),对于一个没有梯度场的方块. 此时,RF pulse的两路正交信号(相位差为90°)对此方块进行激发,然后收取信号,我们可以得到由此方块产生的FID信号. 设此 ...
- Web Api出现500 Internal Server Error 错误
在测试环境一切正常,但是部署到了生产环境发现一直报错.查询网上的方法设置了权限等等.都没有解决 原来发现是数据库连接字符串的问题.只需要把数据库连接字符串修改正确即可!
- .net如何优雅的使用EFCore
EFCore是微软官方的一款ORM框架,主要是用于实体和数据库对象之间的操作.功能非常强大,在老版本的时候叫做EF,后来.net core问世,EFCore也随之问世. 本文我们将用一个控制台项目Ho ...
- 《浅谈亚 log 数据结构在 OI 中的应用》阅读随笔
这篇又长长长了! \(8435\to 8375\to 9729\) 早就馋这篇了!终于学了( 压位 Trie 确实很好写啊 但是总感觉使用范围不是很广的样子 似乎是见的题少 原文里都在用 \(\log ...
- 使用 BenchmarkDotNet 比较指定容量的 List 的性能
我们之前提到 List 是 .NET 中常用的数据结构,其在存储大量数据时,如果能够指定它的初始化容量,就会有性能提升.这个优化的方法并不是很明显,因此本文将使用 BenchmarkDotNet 库, ...
- RocketMQ Schema——让消息成为流动的结构化数据
本文作者:许奕斌,阿里云智能高级研发工程师. Why we need schema RocketMQ 目前对于消息体没有任何数据格式的约束,可以是 JSON ,可以是对象 toString ,也可以只 ...
- PKUSC2022 润摆寄
Day 0 模拟赛的题目竟是 寄 摆 润!预示着我的 PKUSC. Day 1 猜中主角(指九条可怜)原来都是芳文厨 看错时间以为考 \(5h\),于是告诉自己 优势在我可以慢慢做. T1 很显然的 ...
- 原生js实现rsa加密
原生js实现rsa加密 示例 createNewUserKey().then(function(keyPairs) { encrypt("this is origin text", ...