首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Python的webbot有关Selenium版本的错误

使用Python的webbot有关Selenium版本的错误
EN

Stack Overflow用户
提问于 2022-06-24 21:45:06
回答 1查看 801关注 0票数 1

我在macOS上使用Python3.9。我试图开始使用webbot,但每次尝试,我都会得到以下错误:

代码语言:javascript
复制
selenium.common.exceptions.SessionNotCreatedException: Message: session not created 
exception: Missing or invalid capabilities
  (Driver info: chromedriver=2.39.562713 
(dd642283e958a93ebf6891600db055f1f1b4f3b2),platform=Mac OS X 10.14.6 x86_64)

我使用的是macOS 10.4版本,因为我使用32位软件。chromedriver=2.39.562713说,真正让我困惑的是为什么。根据pip,司机的版本是103.0.5060.53。如果导入selenium并尝试命令help(selenium),在输出结束时,我会得到:

代码语言:javascript
复制
VERSION
    4.3.0

这个较低的版本从何而来?我很确定这就是为什么我有“缺失或无效的能力”。如果我以selenium开头:

代码语言:javascript
复制
from selenium import webdriver
driver = webdriver.Chrome()

它按预期启动Chrome。很明显我漏掉了什么。

我以前经常用以下内容来启动webbot:

代码语言:javascript
复制
from webbot import Browser
driver = Browser()

但是,为了确定,我把它改成了:

代码语言:javascript
复制
from webbot import Browser
driver = Browser(True, None, '/usr/local/bin/')

'/usr/local/bin/‘是显式版本103的brew安装的chrome的位置。没什么区别。

解决方案

批准的答复不是解决办法,但它使我找到了解决办法。

我的webbot版本是最新的,但是它有一个非常不同的__init__方法:

代码语言:javascript
复制
    def __init__(self, showWindow=True, proxy=None , downloadPath:str=None):

经过进一步的检查,我发现driverPath属性(我之前尝试使用的)已经完全被设计掉了。因此,我决定在driverpath方法中打印内部变量__init__的值。它返回了以下内容:

代码语言:javascript
复制
project_root/virtualenvironment/lib/python3.9/site-packages/webbot/drivers/chrome_mac

那是我的罪恶派对!我重新命名了该可执行文件,并将其替换为指向正确二进制文件的符号链接。起作用了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-29 05:03:36

代码语言:javascript
复制
driver = Browser(True, None, '/usr/local/bin/')

实际上设置的是downloadPath,而不是driverPath。显式使用参数名称

代码语言:javascript
复制
driver = Browser(driverPath='/usr/local/bin/')

来自webbot.py

代码语言:javascript
复制
class Browser:
    def __init__(self, showWindow=True, proxy=None , downloadPath:str=None, driverPath:str=None, arguments=["--disable-dev-shm-usage","--no-sandbox"]):

        if driverPath is not None and isinstance(driverPath,str):
            driverPath = os.path.abspath(driverPath)
            if(not os.path.isdir(driverPath)):
                raise FileNotFoundError(errno.ENOENT, os.strerror(errno.ENOENT), driverPath)

        if driverPath is None:
            driverfilename = ''
            if sys.platform == 'linux' or sys.platform == 'linux2':
                driverfilename = 'chrome_linux'
            elif sys.platform == 'win32':
                driverfilename = 'chrome_windows.exe'
            elif sys.platform == 'darwin':
                driverfilename = 'chrome_mac'
            driverPath = os.path.join(os.path.split(__file__)[0], 'drivers{0}{1}'.format(os.path.sep, driverfilename))
        
        self.driver = webdriver.Chrome(executable_path=driverPath, options=options)

如果driverPathNone,它将设置为/{parent_folder_abs_path}/drivers/chrome_mac/{parent_folder_abs_path}/drivers/,我猜您在那里有一个较旧的chromedriver版本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72749695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档