Selenium WebDriverException:消息:未知错误:无法根据未知错误确定加载状态:缺少或无效的“entry.level”

Posted

技术标签:

【中文标题】Selenium WebDriverException:消息:未知错误:无法根据未知错误确定加载状态:缺少或无效的“entry.level”【英文标题】:Selenium WebDriverException: Message: unknown error: cannot determine loading status from unknown error: missing or invalid 'entry.level' 【发布时间】:2022-01-05 17:31:58 【问题描述】:

我有一个使用 selenium 进行测试的脚本。现在甚至使用

打开一个谷歌页面
driver.get(url) # url = Google homepage url

给我下面的错误

driver.get("https://my.gumtree.com/login")
File "C:\Python34\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 245, in get
self.execute(Command.GET, 'url': url)
File "C:\Python34\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 233, in execute
self.error_handler.check_response(response)
File "C:\Python34\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 194, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: cannot determine loading status
from unknown error: missing or invalid 'entry.level'
(Session info: chrome=65.0.3315.3)
(Driver info: chromedriver=2.29.461591 (62ebf098771772160f391d75e589dc567915b233),platform=Windows NT 10.0.16299 x86_64)

我有 Google chrome 版本 65、Chromedriver 2.35 和 selenium 2.53.1

我根据其他类似问题中提到的解决方案尝试了不同的版本组合(在下表中提到),但没有任何效果。

Selenium      Chrome      Chromedriver
2.53.0        63           2.33
2.53.1        65(latest)   2.34
3.6.0                      2.35(latest)
3.7.0
3.8.0
3.8.1(latest)

编辑 1:JDK 版本

java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)

【问题讨论】:

selenium 2 已经过时了.. 继续 3.x 感谢您指出,这是一个拼写错误。我已经编辑了问题。 您的错误输出表明您仍在使用 chromedriver=2.29.461591。如果您选择将最新的浏览器版本与最新的 Selenium 一起使用,请确保您也使用最新的驱动程序版本。 【参考方案1】:

错误说明了一切:

selenium.common.exceptions.WebDriverException: Message: unknown error: cannot determine loading status
from unknown error: missing or invalid 'entry.level'

您的主要问题是您使用的二进制文件之间的版本兼容性,如下所示:

您正在使用 chromedriver=2.29.461591(根据日志,尽管您在问题中提到了 Chromedriver 2.35chromedriver=2.29.461591 的发行说明明确提及以下内容:

Supports Chrome v56-58

您正在使用 chrome=65.0.3315.3 chromedriver=2.35 的发行说明明确提及以下内容:

Supports Chrome v62-64

您正在使用 Selenium Version 2.53.1。 我们不知道您的 JDK version

解决方案

JDK 升级到最近的级别JDK Version 8 Update 151。 将ChromeDriver升级到ChromeDriver v2.35级别。 将Chrome 保持在Chrome v64.x 级别。 (as per ChromeDriver v2.35 release notes) 将Selenium 升级到当前级别Version 3.8.1。 从您的 IDE 中清理 Project Workspace全部重建。 运行CCleaner 工具以清除所有操作系统杂务。 如果您的 Chrome 基础版本太旧,请通过Revo Uninstaller 卸载 Chrome 并安装最新的 GA Release 版本的 Chrome。 进行系统重启。 执行您的Test

【讨论】:

JDK 根据您的建议是最新的。我下载了最新的 2.35 chromedriver,但脚本仍然显示为 2.29。它与脚本位于同一文件夹中。因此,我们可以确定脚本正在选择本地副本。 太棒了!!!请按照以下步骤操作:1) 从您的 IDE 和 Rebuild All 中清除 Project Workspace。 2) 运行CCleaner 工具以清除所有操作系统杂务。 3) 如果您的 Chrome 基础版本太旧,请卸载 ChromeRevo Uninstaller 并安装最新的 GA Release 版本的 Chrome。 4)采取System Reboot。 5) 执行你Tests. 不要太确定...这取决于 PATH @CoreyGoldberg 先生,我不依赖于任何 WebDriver 变体的 PATH 设置。我决定为我的Tests 选择哪个版本的WebDriver 变体,并使用参数executable_path 明确。你觉得我的方法有缺点吗? @DebanjanB,您对 chromedriver.exe 路径进行硬编码的解决方案对我有用。非常感谢【参考方案2】:

转到http://chromedriver.chromium.org/downloads

根据您的操作系统复制下载链接

wget -N paste_the_link_you_copied

使用下面的命令解压

unzip chromedriver_linux64.zip

通过以下命令授予权限

chmod +x chromedriver

然后按照以下命令,如果它说已经存在(可能是旧版本)然后转到该路径(/usr/local/bin/chromedriver 和 /usr/bin/chromedriver)并删除 chromedriver 并再次运行命令

sudo mv -f chromedriver /usr/local/share/chromedriver
sudo ln -s /usr/local/share/chromedriver /usr/local/bin/chromedriver
sudo ln -s /usr/local/share/chromedriver /usr/bin/chromedriver

希望这会有所帮助。谢谢

【讨论】:

【参考方案3】:

该错误是因为您的 chrome 浏览器与网络驱动程序不兼容而引发的。如果您使用的是 Linux,则只需执行以下命令。 sudo apt-get 更新

【讨论】:

【参考方案4】:

最近我遇到同样的问题,花了我太多时间弄清楚发生了什么,在我遇到问题的情况下,我使用它后没有关闭chrome进程,所以你应该检查进程退出与否当您退出应用程序时,这是我最后一次工作的 Python 3 代码演示,希望对其他人有所帮助:

    @staticmethod
    def fetch_music_download_url(music_name: str):
        chrome_driver_service = Service(ChromeDriverManager(chrome_type=ChromeType.GOOGLE).install())
        chrome_options = Options()
        chrome_options.add_argument("--no-sandbox")
        chrome_options.add_argument("--headless")
        chrome_options.add_argument("--disable-gpu")
        chrome_options.add_argument("--remote-debugging-port=9230")
        driver = webdriver.Chrome(service=chrome_driver_service,
                                  options=chrome_options,
                                  executable_path="/usr/local/bin/chromedriver")
        try:
            driver.maximize_window()
            driver.get('http://tool.example.cn/music/?page=audioPage&type=migu&name=' + music_name)
            driver.implicitly_wait(5)
            driver.find_element(By.CSS_SELECTOR, ".aplayer-list-download.iconfont.icon-xiazai").click()
            urls = [a.get_attribute('href') for a in
                    driver.execute_script('return document.querySelectorAll(".modal-body a[href*=\'http\']")')]
            for url in urls:
                if "listenSong.do" in url:
                    logger.info("fetched url:" + url)
                    FetchMusic.do_save_music_download_url(url)
        except Exception as e:
            logger.error("scrapy impl error", e)
        finally:
            driver.stop_client()
            driver.close()
            driver.quit()
            chrome_driver_service.stop()

【讨论】:

以上是关于Selenium WebDriverException:消息:未知错误:无法根据未知错误确定加载状态:缺少或无效的“entry.level”的主要内容,如果未能解决你的问题,请参考以下文章

Selenium-IDE,Selenium-RC ,Selenium grid以及 Selenium-Core

selenium是啥?

Python爬虫 Selenium -- Selenium元素定位Selenium访问元素信息Selenium交互

Selenium学习Selenium 总结

Selenium - 简介

java selenium selenium 介绍