0


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 #githubhttps://pypi.org/project/webdriver-manager/#pypi
  • 简介- 支持多种浏览器 - ChromeDriver- GeckoDriver- IEDriver- OperaDriver- EdgeChromiumDriver- 兼容selenium4.0及以下版本

实例

官方的DEMO

  • chromefrom selenium import webdriverfrom selenium.webdriver.chrome.service import Service as ChromeServicefrom webdriver_manager.chrome import ChromeDriverManagerdriver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))driver.get('https://www.baidu.com')
  • firefoxfrom selenium import webdriverfrom selenium.webdriver.firefox.service import Service as FirefoxServicefrom webdriver_manager.firefox import GeckoDriverManagerdriver = webdriver.Firefox(service=FirefoxService(GeckoDriverManager().install()))
  • 执行效果:控制台会打印如下信息(以chrome为例);浏览器在打开后自动退出====== WebDriver manager ======Current google-chrome version is 103.0.5060Get LATEST chromedriver version for 103.0.5060 google-chromeTrying to download new driver from https://chromedriver.storage.googleapis.com/103.0.5060.134/chromedriver_win32.zipDriver has been saved in cache [C:\Users\songqin008\.wdm\drivers\chromedriver\win32\103.0.5060.134]
  • 注意driver的保存位置

webdriver_manager 提供的配置项

  • 指定下载路径from webdriver_manager.chrome import ChromeDriverManagerChromeDriverManager(path =r".\\Drivers").install()
  • 取消日志打印import loggingimport osos.environ['WDM_LOG']=str(logging.NOTSET)
  • 指定版本下载from webdriver_manager.chrome import ChromeDriverManagerChromeDriverManager(version="2.26").install()

改良版本

  • 基于官方的版本,主要有2个问题- 1:下载位置无法二次利用(一般不在path中) - 参考目录结构:D:\chrome_driver\drivers\chromedriver\win32\103.0.5060.134,下面会有一个chromedriver.exe和driver.zip(前者是后者解压出来的)- 2:输出日志没有必要
  • 改进版本defget_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()#新建目录ifnot 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 webdriverget_driver()driver = webdriver.Chrome()driver.get('https://www.baidu.com')

本文转载自: https://blog.csdn.net/Mantou023/article/details/134904233
版权归原作者 wuxianfeng023 所有, 如有侵权,请联系我们删除。

“Selenium Webdriver驱动自管理”的评论:

还没有评论