首页 > 其他分享 >selenium驱动未随浏览器更新而同步更新的问题

selenium驱动未随浏览器更新而同步更新的问题

时间:2023-04-11 09:25:35浏览次数:34  
标签:webdriver exe selenium 更新 chromedriver 未随 path 驱动

基于selenium模拟谷歌浏览器登录时,依赖chromedriver.exe版本信息。但谷歌浏览器升级后,之前创建的脚本可能会出现因驱动版本过低,使得之前创建的脚本运行失败的问题。

下面针对该问题进行探索和解决。


selenium版本

import selenium

selenium.__version__
#'4.7.2'

获取谷歌浏览器版本信息

import platform
import subprocess

system = platform.system()

if system == 'Windows':
    cmd = r'reg query "HKEY_CURRENT_USER\Software\Google\Chrome\BLBeacon" /v version'
    output = subprocess.check_output(cmd, shell=True)
    version = output.split()[-1].decode()
elif system == 'Darwin':
    cmd = r'/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --version'
    output = subprocess.check_output(cmd, shell=True)
    version = output.split()[2].decode()
else:
    cmd = r'google-chrome --version'
    output = subprocess.check_output(cmd, shell=True)
    version = output.split()[2].decode()

print('当前谷歌浏览器版本为:', version)

image-20230410172406622

获取驱动的版本信息

image-20230410172624073

驱动下载镜像:

  1. 镜像1
  2. 镜像2

首先我们先查看电脑上有几个chromedriver.exe:

image-20230410181025980

运行结果信息:

# -*- coding=utf-8-*-
import os
from selenium import webdriver

# 获取chromedriver.exe的路径
driver_path = os.path.join(os.getcwd(), "chromedriver.exe")

# 初始化Chrome浏览器,注意需要将executable_path参数指向chromedriver.exe的路径
print(f"driver_path={driver_path}")
browser = webdriver.Chrome(executable_path=driver_path)

# 获取chromedriver.exe的版本信息
print("chromedriver.exe version:", browser.capabilities['chrome']['chromedriverVersion'])

# 关闭浏览器
browser.quit()

"""
driver_path=E:\python_scripts\python\Happy100\selenium\chromedriver.exe
chromedriver.exe version: 112.0.5615.49 (bd2a7bcb881c11e8cfe3078709382934e3916914-refs/branch-heads/5615@{#936})

"""

其与当前谷歌浏览器保持一致。这是为什么呢?我们重新查找chromedriver.exe:发现,在系统盘新增了一个临时文件,上述脚本访问的是该路径下的驱动。

可能原因是:当前Python环境下无对应的驱动,算法自动下载了最新版本的驱动。

进一步验证:我们先删除上述临时驱动,然后下载一个旧的驱动版本(70.0.3538.16,并将其移至anaconda路径下),然后重新运行脚本:

image-20230410182019402

jupyter中执行运行下述命令:

driver = webdriver.Chrome()

"""
SessionNotCreatedException: Message: session not created: Missing or invalid capabilities
  (Driver info: chromedriver=70.0.3538.16 (16ed95b41bb05e565b11fb66ac33c660b721f778),platform=Windows NT 10.0.22000 x86_64)

#和实际相符

"""

此时查询chromedriver.exe并未出现新增。

然后我们重新运行GPT提供的脚本:

image-20230410182435081

其输出仍然是[谷歌浏览器]的版本信息;未获取到真正的版本信息。

结论:

  1. 在python环境中配置驱动(chromedriver.exe放置在anaconda安装路径下)的方式,但浏览器更新时,驱动不会及时得到更新;

  2. 上述获取chromedriver.exe不能获取有效的驱动版本信息;

  3. 在不配置驱动(chromedriver.exe)的情况下,算法第一次调用时会自行下载对应的驱动文件(ps:早些版本貌似必须安装驱动)

官方帮助文档

image-20230410220653137

小结

未配置的情况下

安装第三方库:(Github传送门)

pip install webdriver-manager

在第一次调用是会自动下载对应的驱动文件;

from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium import webdriver


service = ChromeService(executable_path=ChromeDriverManager().install())
driver = webdriver.Chrome(service=service)
driver.quit()

已经配置的情况

下载最新的驱动,然后去目标路径下替换对应的驱动即可;

将最新驱动下载到指定的路径下

核心:添加path参数,用于控制最新驱动的缓存;

from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium import webdriver

try:
    driver = webdriver.Chrome()
except SessionNotCreatedException:
    #anacaonda安装路径
    service = ChromeService(executable_path=ChromeDriverManager(path=r"D:\software\Anaconda3").install())
    driver = webdriver.Chrome(service=service)    
    

标签:webdriver,exe,selenium,更新,chromedriver,未随,path,驱动
From: https://www.cnblogs.com/AzeHan/p/17305020.html

相关文章

  • python+selenium写自动化脚本遇到的坑
    1.定位不到元素网速不好定位的元素还没有刷新出来使用等待有三种强制等待,显式等待,隐式等待动态ID不要复制xpath,要手写。判断是动态ID的方法,多次关闭浏览器再打开网址,查看ID是否会发生变化下拉框,文件无法定位还没有解决......
  • ubuntu因为升级自动更新内核而重启无法进入图形界面问题解决
    ubuntu因为升级自动更新内核而重启无法进入图形界面问题解决。我使用的ubuntu版本是22.04LTS。经常因为系统更新软件而自动更新内核,又因为我的PC上安装了NVIDIA的显卡,这个卡对应的驱动是NVIDIA-Linux-x86_64-525.89.02.run。这个驱动要从官网上下载安装,而ubuntu系统自带的驱动是......
  • 分享(四):免费可用的 API 大全总结(持续更新中)
    写在前面随着互联网的发展,越来越多的API被开发出来,使得开发人员可以更快速地开发和部署应用程序,下面我将向大家推荐一些免费可用的API。 天气出行类天气预报查询:支持全国以及全球多个城市的天气查询,包含15天天气预报查询。尾号限行:提供已知所有执行限行政策的共计65个大城......
  • 天气预报查询 API + AI 等于王炸(一大波你未曾设想的天气预报查询 API 应用场景更新了)
    前言近年来,随着信息化进程的不断深入,人们对于信息的获取和处理需求越来越高。而其中,天气查询API是一个非常重要的服务,它能够帮助人们快速获取所在位置的天气情况,同时也为各类应用提供了必要的气象数据支持。本文将介绍天气查询API的技术原理、实际应用场景以及获取API的方法......
  • nginx更新静态页面客户端缓存不刷新问题
    问题描述:频繁部署静态资源,nginx自带缓存未刷新通过ftp/sftp上传到nginx的静态页(尤其是打包好的单页应用),有可能遇到客户端缓存不刷新的问题,即使重启nginx都无效客户端浏览器也有缓存,一般关闭进程(手机清理,注意某些app光按返回键退回桌面是不会结束进程的),强制刷新网页等方法可以......
  • Vue2异步更新及nextTick原理
    vue官网中是这样描述nextTick的在下次DOM更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,可以获取更新后的DOM。在学习nextTick是如何实现之前,我们要先了解下JavaScript的执行机制JavaScript执行机制浏览器是多线程的,例如GUI渲染线程、JS引擎线程......
  • 爬取BOSS直聘信息selenium+CSS及总结
    1、fromseleniumimportwebdriverfromselenium.webdriver.common.byimportByimporttimeimportcsvf=open(r'D:\Pyprogram\venv\从零开始学python网络爬虫\爬取BOOS直聘.csv','wt',newline='',encoding='utf-8')writer=csv.wri......
  • 爬虫最后一天,爬取到的数据存到mysql中,爬虫和下载中间件、加代理、cookie、header、se
    爬到的数据存到mysql中classFirstscrapyMySqlPipeline:defopen_spider(self,spider):print('我开了')self.conn=pymysql.connect(user='root',password="",host='127.0.0.1......
  • Python+Selenium.webdriver实现WEB端UI自动化测试
    本篇记录基于Python+Selenium.webdriver实现WEB端UI自动化测试,其中测试用例使用excel维护。 1.项目选取(登录页无验证码校验的项目)该示例选取的是登录页不需要输入验证码校验的基础页面(考虑到现在大部分项目都是需要进行验证码校验的,后面研究后再出一篇相关的分享。) 2.环境......
  • python Selenium自动化测试
    转载自https://blog.csdn.net/tangya3158613488/article/details/106902110 Selenium自动化测试什么是自动化测试自动化测试指软件测试的自动化,在预设状态下运行应用程序或者系统,预设条件包括正常和异常,最后评估运行结果。总的概括即:将人为驱动的测试行为转化为机器执行的......