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. 嵌入式-c语言基础:冒泡排序实现从大到小排列

    #include<stdio.h> int main() { /*冒泡排序:从大到小*/ /*i=0 第1轮(i+1):需要比较9次(sizeArr-i-1)*/ /*i=1 第2轮(i+ ...

  2. perl遍历哈希的所有健和值

    my %h=("001",{name,"李白",age,"18",height,"185",weight,"6 ...

  3. Ueditor、FCKeditor、Kindeditor编辑器漏洞

    Ueditor.FCKeditor.Kindeditor编辑器漏洞 免责声明: Ueditor编辑器漏洞 文件上传漏洞 XSS漏洞 SSRF漏洞 FCKeditor编辑器漏洞 查看FCKeditor版 ...

  4. nacos的使用

    一:下载nacos 打开github搜索nacos,选择历史版本,建议下载1.4版本的,较稳定 https://github.com/alibaba/nacos 二:下载完后解压文件,两种方式打开 1 ...

  5. js 金钱3位格式化

    function formatCash(str) { return str.split('').reverse().reduce((prev, next, index) => { return ...

  6. C++动态链接MySQL库

    C++链接MySQL库 库安装目录 CMakeList cmake_minimum_required(VERSION 3.22) project(MySQLConnectionPool) includ ...

  7. Hadoop安装-分布式-Fully

    Hadoop安装-分布式-Fully 〇.所需资料 一.配置 1.基础配置 (1)系统安装 (2)hostname主机名配置 (3)ip地址.dns.hosts映射文件配置 (4)关闭防火墙与seli ...

  8. Burp Suite安装

    1.Burpsuite简介  Burp Suite是一款集成化的渗透测试工具,包含了很多功能,可以帮助我们高效地完成对Web应用程序的渗透测试和攻击. Burp Suite 由Java语言编写,基于J ...

  9. 记一次 .NET 某安全生产信息系统 CPU爆高分析

    一:背景 1.讲故事 今天是的第四天,头终于不巨疼了,写文章已经没什么问题,赶紧爬起来写. 这个月初有位朋友找到我,说他的程序出现了CPU爆高,让我帮忙看下怎么回事,简单分析了下有两点比较有意思. 这 ...

  10. Jmeter 之 jp@gc - Stepping Thread Group

    jp@gc - Stepping Thread Group 自定义线程组,根据业务需要进行设计用户增加间隔时间等 1.  下载jmeter-plugins-manager-1.3.jar插件放入lib ...