赞
踩
使用环境: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也找不到,所以就会有第二个错误了…
解决的方法主要有两个:
这里,我们可以看到,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中设置即可。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。