起因

使用环境: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()

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

......

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

查找原因

乍一看好像是他没能识别你刚刚下载的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也找不到,所以就会有第二个错误了…

解决方法

解决的方法主要有两个:

下载selenium-manager.exe到selenium指定的文件夹中,使程序可以调用这个来找到我们环境变量里面的webdriver。找到调用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)

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

推荐阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: