AWS EC2 Ubuntu环境下Selenium调用Chrome报KeyError:'google-chrome'求助
解决AWS EC2 Ubuntu环境下Selenium代码的KeyError:'google-chrome'问题
需求目标
- 解决两段Selenium代码均出现的
KeyError:'google-chrome'错误 - 运行环境:AWS EC2 Ubuntu实例
- 用于基于Python、Selenium、BeautifulSoup的动态JS页面爬虫开发
代码示例
Selenium 3版本
# selenium 3 from selenium import webdriver from webdriver_manager.chrome import ChromeDriverManager driver = webdriver.Chrome(ChromeDriverManager().install())
Selenium 4版本
# selenium 4 from selenium import webdriver from selenium.webdriver.chrome.service import Service as ChromeService from webdriver_manager.chrome import ChromeDriverManager driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
报错信息
[WDM] - ====== WebDriver manager ====== 2022-07-11 15:49:01,250 INFO ====== WebDriver manager ====== --------------------------------------------------------------------------- KeyError Traceback (most recent call last) <ipython-input-18-0987a487086c> in <module> 2 from webdriver_manager.chrome import ChromeDriverManager 3 ----> 4 driver = webdriver.Chrome(ChromeDriverManager().install()) ~/.local/lib/python3.8/site-packages/webdriver_manager/chrome.py in install(self) 36 37 def install(self) -> str: ---> 38 driver_path = self._get_driver_path(self.driver) 39 os.chmod(driver_path, 0o755) 40 return driver_path ~/.local/lib/python3.8/site-packages/webdriver_manager/core/manager.py in _get_driver_path(self, driver) 27 28 def _get_driver_path(self, driver): ---> 29 binary_path = self.driver_cache.find_driver(driver) 30 if binary_path: 31 return binary_path ~/.local/lib/python3.8/site-packages/webdriver_manager/core/driver_cache.py in find_driver(self, driver) 93 os_type = driver.get_os_type() 94 driver_name = driver.get_name() ---> 95 driver_version = driver.get_version() 96 browser_version = driver.browser_version 97 ~/.local/lib/python3.8/site-packages/webdriver_manager/core/driver.py in get_version(self) 41 def get_version(self): 42 self._version = ( ---> 43 self.get_latest_release_version() 44 if self._version == "latest" 45 else self._version ~/.local/lib/python3.8/site-packages/webdriver_manager/drivers/chrome.py in get_latest_release_version(self) 35 36 def get_latest_release_version(self): ---> 37 self.browser_version = get_browser_version_from_os(self.chrome_type) 38 log(f"Get LATEST {self._name} version for {self.browser_version} {self.chrome_type}") 39 latest_release_url = ( ~/.local/lib/python3.8/site-packages/webdriver_manager/core/utils.py in get_browser_version_from_os(browser_type) 150 return get_browser_version(browser_type, metadata) 151 --> 152 cmd_mapping = { 153 ChromeType.BRAVE: { 154 OSType.LINUX: linux_browser_apps_to_cmd( KeyError: 'google-chrome'
已尝试的方法
- Windows下Chromium源码运行报KeyError:'WINDOWSSDKDIR'的解决方案(不适用当前Ubuntu环境)
- ChromeDriverManager安装报KeyError:'google-chrome'的相关方案
- Selenium Wire相关Issue中的内容
解决方案
错误核心原因是Ubuntu实例中未安装Google Chrome浏览器,或WebDriver Manager无法检测到已安装的Chrome。具体解决步骤如下:
1. 安装Google Chrome浏览器
在AWS EC2 Ubuntu终端执行以下命令:
# 更新包列表 sudo apt update # 安装依赖 sudo apt install -y wget gnupg2 # 添加Google Chrome官方源 wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | sudo apt-key add - echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" | sudo tee /etc/apt/sources.list.d/google-chrome.list # 安装Google Chrome稳定版 sudo apt update && sudo apt install -y google-chrome-stable
2. 指定ChromeDriver版本(可选,跳过自动检测)
若安装Chrome后仍报错,可手动指定ChromeDriver版本:
Selenium 3修改后代码
# selenium 3 指定版本示例 from selenium import webdriver from webdriver_manager.chrome import ChromeDriverManager # 替换为你安装的Chrome对应版本号,如"103.0.5060.134" driver = webdriver.Chrome(ChromeDriverManager(version="103.0.5060.134").install())
Selenium 4修改后代码
# selenium 4 指定版本示例 from selenium import webdriver from selenium.webdriver.chrome.service import Service as ChromeService from webdriver_manager.chrome import ChromeDriverManager # 替换为对应版本号 driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager(version="103.0.5060.134").install()))
3. 无头模式运行(适配服务器无GUI环境)
AWS EC2为无GUI环境,需添加Chrome无头参数避免报错:
Selenium 4示例代码
from selenium import webdriver from selenium.webdriver.chrome.service import Service as ChromeService from webdriver_manager.chrome import ChromeDriverManager options = webdriver.ChromeOptions() options.add_argument('--headless=new') # Selenium 4.10+推荐的无头模式 options.add_argument('--no-sandbox') options.add_argument('--disable-dev-shm-usage') driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()), options=options)
内容的提问来源于stack exchange,提问作者sogu
相关产品推荐
相关产品推荐

