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:输出日志没有必要
  • 改进版本

    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驱动自管理的更多相关文章

  1. python3 使用selenium +webdriver打开chrome失败,报错:FileNotFoundError: [Errno 2] No such file or directory: 'chromedriver': 'chromedriver'

    提示chrome driver没有放置在正确的路径下 解决方法: 1.chromedriver与chrome各版本及下载地址 驱动的下载地址如下: http://chromedriver.storag ...

  2. IE11,Chrome65.0.3325.146,Firefox58的webdriver驱动下载,并用selenium驱动来实现自动化测试

    各浏览器版本:    python版本: selenium版本: IE11的Webdriver下载: http://dl.pconline.com.cn/download/771640-1.html ...

  3. Selenium学习之==>WebDriver驱动对照表

    转自www.imdsx.cn 1.Chrome 对于chrome浏览器,有时候会有闪退的情况,也许是版本冲突的问题,我们要对照着这个表来对照查看是不是webdriver和chrome版本不对. chr ...

  4. Selenium的PO模式(Page Object Model)|(Selenium Webdriver For Python)

            研究Selenium + python 自动化测试有近两个月了,不能说非常熟练,起码对selenium自动化的执行有了深入的认识. 从最初无结构的代码,到类的使用,方法封装,从原始函数 ...

  5. Selenium WebDriver + Python 环境配置

    1.   下载必要工具及安装包 1.1.[Python开发环境] 下载并安装Python 2.7.x版本(当前支持2.x版本,不要下载最新的3.X的版本因为python3并非完全兼容python2) ...

  6. Selenium WebDriver TestNg Maven Eclipse java 简单实例

    环境准备 前提条件Eclipse 已经安装过 TestNg ,Maven 插件 新建一个普通的java项目 点击右键 configure->convert to Maven Project 之后 ...

  7. selenium webdriver (python)的基本用法一

    阅在线 AIP 文档:http://selenium.googlecode.com/git/docs/api/py/index.html目录一.selenium+python 环境搭建........ ...

  8. selenium webdriver (python)大全

    webdriver的简介 硒2.0的主要新功能是集成的webdriver的API.webdriver的设计除了解决一些seleniumr-RC API的一些限制,与webdriver 的整合,将提供一 ...

  9. Linux环境下搭建python+selenium+webdriver环境

    1.下载并安装python,一般安装linux系统,自带有python,则python不用安装.要下载可以在官网上下载: 或者使用下面命令安装: sudo apt-get install python ...

  10. 使用python selenium webdriver模拟浏览器

    selenium是进行web自动化测试的一个工具,支持C,C++,Python,Java等语言,他能够实现模拟手工操作浏览器,进行自动化,通过webdriver驱动浏览器操作,我使用的是chrome浏 ...

随机推荐

  1. 幂次方表达:p1010

    1 题目ID: P1010 [NOIP1998 普及组] 幂次方 2 题目描述: 任何一个正整数都可以用 22 的幂次方表示.例如 137=2^7+2^3+2^0137=27+23+20. 同时约定方 ...

  2. [leetcode] 713. Subarray Product Less Than K

    题目 Given an array of integers nums and an integer k, return the number of contiguous subarrays where ...

  3. 核磁共振成像学习笔记——从FID信号到K空间

    在理想磁场环境下(没有不存在场不均匀性),对于一个没有梯度场的方块. 此时,RF pulse的两路正交信号(相位差为90°)对此方块进行激发,然后收取信号,我们可以得到由此方块产生的FID信号. 设此 ...

  4. Web Api出现500 Internal Server Error 错误

    在测试环境一切正常,但是部署到了生产环境发现一直报错.查询网上的方法设置了权限等等.都没有解决 原来发现是数据库连接字符串的问题.只需要把数据库连接字符串修改正确即可!

  5. .net如何优雅的使用EFCore

    EFCore是微软官方的一款ORM框架,主要是用于实体和数据库对象之间的操作.功能非常强大,在老版本的时候叫做EF,后来.net core问世,EFCore也随之问世. 本文我们将用一个控制台项目Ho ...

  6. 《浅谈亚 log 数据结构在 OI 中的应用》阅读随笔

    这篇又长长长了! \(8435\to 8375\to 9729\) 早就馋这篇了!终于学了( 压位 Trie 确实很好写啊 但是总感觉使用范围不是很广的样子 似乎是见的题少 原文里都在用 \(\log ...

  7. 使用 BenchmarkDotNet 比较指定容量的 List 的性能

    我们之前提到 List 是 .NET 中常用的数据结构,其在存储大量数据时,如果能够指定它的初始化容量,就会有性能提升.这个优化的方法并不是很明显,因此本文将使用 BenchmarkDotNet 库, ...

  8. RocketMQ Schema——让消息成为流动的结构化数据

    本文作者:许奕斌,阿里云智能高级研发工程师. Why we need schema RocketMQ 目前对于消息体没有任何数据格式的约束,可以是 JSON ,可以是对象 toString ,也可以只 ...

  9. PKUSC2022 润摆寄

    Day 0 模拟赛的题目竟是 寄 摆 润!预示着我的 PKUSC. Day 1 猜中主角(指九条可怜)原来都是芳文厨 看错时间以为考 \(5h\),于是告诉自己 优势在我可以慢慢做. T1 很显然的 ...

  10. 原生js实现rsa加密

    原生js实现rsa加密 示例 createNewUserKey().then(function(keyPairs) { encrypt("this is origin text", ...