当前位置:   article > 正文

selenium4 “Unable to obtain working Selenium Manager binary”的错误解决方式之一

unable to obtain working selenium manager binary

起因

使用环境:python = 3.7 selenium = 4.11 浏览器:Edge

起因是想搞个脚本玩一玩,安装selenium的时候发现发现会报错。我是用conda安装的,第一次发现他给我安装的竟然是selenium3,然后就查阅了相关文档,发现py3.7是支持selenium4的,于是乎就升级到了最新的selenium4.11版本。

首先,是需要上一下Edge官方webdriver使用文档页面,并按照指示在这个网站下载对应的webdriver驱动,并添加path环境变量 (按照我的解决方法其实不用添加)。

然后按照网上的教程,简单的写了一个脚本,其中创建webdriver的Edge实例代码如下:

from selenium import webdriver
# 直接创建Edge实例
driver = webdriver.Edge()
  • 1
  • 2
  • 3

但是上面的代码会报错,其报错如下:

......
selenium.common.exceptions.WebDriverException: Message: Unable to obtain working Selenium Manager binary; ...\lib\site-packages\selenium\webdriver\common\windows\selenium-manager.exe

The above exception was the direct cause of the following exception:
......
selenium.common.exceptions.NoSuchDriverException: Message: Unable to obtain driver for MicrosoftEdge using Selenium Manager.; For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors/driver_location
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

查找原因

乍一看好像是他没能识别你刚刚下载的Edge的webdriver,好像是你的path没对之类的。但其实在你用cmd去直接调用这个msedgedriver.exe时是可以运行的。这一点很重要,说明不是下载的webdriver的问题。而后面附送的网址也没有指出这个问题的关键。

然后,我就开始注意到上面那个报错了,意思是Selenium Manager binary这个东西也找不到。那么Selenium Manager是啥?可以参考这篇文章。于是我顺着错误找到了这个文件夹,发现selenium\webdriver\common\windows文件夹里面,里面确实没有selenium-manager.exe。

那么,这个二级制文件真的那么重要吗?

其实这个文件的主要目的是定位你的webdriver位置,也就是msedgedriver.exe。但当他找不到这个exe的时候,就会觉得你的msedgedriver.exe也找不到,所以就会有第二个错误了…

解决方法

解决的方法主要有两个:

  1. 下载selenium-manager.exe到selenium指定的文件夹中,使程序可以调用这个来找到我们环境变量里面的webdriver。
  2. 找到调用selenium-manager.exe的方法,使其不要进入这个方法里面。
    在这里插入图片描述

这里,我们可以看到,Edge对象在初始化的时候会进入到一个DriverFinder的函数。此时,若你的service.path是none,则就会调用SeleniumManager().driver_location(options)方法,此时就会使用selenium-manager.exe了。那么,只要我们将service.path赋上值,就可以避免上面的那个报错了。

因此,解决方法代码如下:

from selenium import webdriver
# import Edge的Service
from selenium.webdriver.edge.service import Service

# 直接创建Service实例
ser = Service()
ser.path = 'E:/msedgedriver/msedgedriver.exe'
# 连接Edge浏览器
driver = webdriver.Edge(service=ser)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

上述方法对后续程序的影响几乎没有,Service也无需设置其他参数。其他参数只要在option中设置即可。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/123911
推荐阅读
相关标签
  

闽ICP备14008679号