Selenium驱动的ChromeDriver无法找到Chrome二进制文件

jckbn6z7  于 2023-08-01  发布在  Go
关注(0)|答案(3)|浏览(223)

我刚刚卸载了Chrome,因为它表现得很奇怪(现在已修复),在此之后,Python中的Selenium无法识别Chrome驱动程序二进制文件,这非常奇怪,因为它应该完全不受影响,并且它位于不同的位置,并且与我在桌面上使用的Chrome版本不同,代码如下,并且已经工作了多年。

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--load-extension='+exension_path)
driver = webdriver.Chrome(executable_path=chrome_driver_folder,options=chrome_options)

字符串
有人知道到底发生了什么吗?我得到以下错误:

WebDriverException: Message: unknown error: cannot find Chrome binary
  (Driver info: chromedriver=2.40.565498 (ea082db3280dd6843ebfb08a625e3eb905c4f5ab),platform=Windows NT 10.0.18362 x86_64)

5jdjgkvh

5jdjgkvh1#

此错误消息...

WebDriverException: Message: unknown error: cannot find Chrome binary (Driver info: chromedriver=2.40.565498 (ea082db3280dd6843ebfb08a625e3eb905c4f5ab),platform=Windows NT 10.0.18362 x86_64)

字符串
...意味着 ChromeDriver 无法启动/产生新的 Browsing Context,即 *Chrome浏览器 * 会话。
您的主要问题是您正在使用的二进制文件版本之间的不兼容,如下所示:

  • 您正在使用 chromedriver=2.40
  • chromedriver=2.40的发行说明中明确提到了以下内容:

支持Chrome v66-68

  • 由于您已经卸载了Chrome并重新安装,因此您可能正在使用最新的 chrome=85.0
  • ChromeDriver v85.0的发行说明中明确提到了以下内容:

支持Chrome版本85
因此,ChromeDriver v2.40Chrome Browser v85.0 之间存在明显的不匹配

解决方案

确保:

  • Selenium 已升级到当前发布的Version 3.141.59
  • ChromeDriver 已更新为当前ChromeDriver v85.0级别。
  • Chrome 已更新至当前 Chrome版本85.0 级别。(根据ChromeDriver v85.0 release notes
  • 如果您的基础 Web Client 版本太旧,请卸载它并安装最新的GA和发布版本的 Web Client
    • 通过 IDE 清理 * 您的 * 项目工作区 *,并仅使用所需的依赖项 * 重建 * 您的项目。
  • 非root用户身份执行@Test
  • 始终在tearDown(){}方法中调用driver.quit(),以优雅地关闭和销毁 WebDriverWeb Client 示例。
smdnsysy

smdnsysy2#

根据您的操作系统自动获取chrome二进制文件路径:
此函数使用platform.system()检查当前操作系统,并返回Chrome二进制文件的预期路径。
它处理以下位置上的默认Chrome位置:

  • 达尔文(Mac OS)
  • 操作系统
  • windows

如果操作系统不是上述操作系统之一,则会引发异常。
该返回值可用于设置Selenium的ChromeOptions中的binary_location。

import platform

def get_chrome_binary():
  # Check the operating system and set the Chrome binary path accordingly
  if platform.system() == "Darwin":  # macOS
      binary_location = '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome'
  elif platform.system() == "Linux":  # Linux-based system (e.g., Ubuntu Docker container)
      binary_location = '/usr/bin/google-chrome'
  elif platform.system() == "Windows":  # Windows
      # Provide the path to the Chrome executable on Windows
      binary_location = 'C:/Program Files (x86)/Google/Chrome/Application/chrome.exe'  # Adjust the path as needed
  else:
      raise Exception("Unsupported operating system")  # You can handle other OSes based on your requirements
  
  return binary_location

字符串

xpszyzbs

xpszyzbs3#

为了有一个干净的代码和停止跟踪chrome路径/版本,我建议你使用webdriver_manager
安装它

pip install webdriver_manager

字符串
像这样使用它

from webdriver_manager.chrome import ChromeDriverManager

options = webdriver.ChromeOptions()
chrome_options.add_argument('--load-extension='+exension_path)
driver = webdriver.Chrome(executable_path=ChromeDriverManager().install(), options=options)


但如果不想使用它这里是本地浏览器的代码

chrome_options = Options()  
chrome_options.add_argument('--load-extension='+exension_path)
chrome_options.binary_location = 'YOUR_PATH'  
driver = webdriver.Chrome(executable_path=os.path.abspath(“chromedriver"),   chrome_options=chrome_options)


但我完全推荐使用第一个版本。

相关问题