求助:使用Selenium Manager无法获取chromedriver.exe的报错问题
解决Selenium获取chromedriver失败的问题
核心问题分析
从错误路径/var/task/selenium/webdriver/common/linux/selenium-manager能看出,运行环境是Linux,但代码里指定了Windows平台的.exe后缀文件,手动指定路径的操作干扰了Selenium Manager的自动管理逻辑,同时Linux环境下运行无头Chrome还需要额外参数支持。
具体解决步骤
1. 移除手动指定的chromedriver路径
Selenium 4.6+版本内置了Selenium Manager,会自动匹配系统环境下载对应版本的chromedriver,完全不需要手动指定路径。修改代码中的Service初始化部分:
# 原代码 service = Service(executable_path=r'./chromedriver.exe') # 修改为 service = Service() # 甚至可以直接省略service参数,新版Selenium会自动处理
2. 添加Linux无头Chrome必需参数
Linux环境下运行无头Chrome需要添加两个关键参数,避免权限和内存问题:
options = webdriver.ChromeOptions() options.add_argument('--headless') options.add_argument('--no-sandbox') # 绕过沙箱模式,Linux环境必需 options.add_argument('--disable-dev-shm-usage') # 解决/dev/shm内存不足问题
3. 确保环境中安装了Chrome浏览器
Selenium Manager需要检测已安装的Chrome版本来匹配chromedriver,Linux下安装Chrome的命令:
- Debian/Ubuntu系:
apt-get update && apt-get install -y chromium-browser
- Amazon Linux/CentOS系:
yum install -y chromium
4. 升级Selenium到最新版本
如果你的Selenium版本低于4.6,没有内置Selenium Manager,需要升级:
pip install --upgrade selenium
修改后的完整代码:
from http.server import BaseHTTPRequestHandler from selenium import webdriver from selenium.webdriver.chrome.service import Service class Handler(BaseHTTPRequestHandler): def do_GET(self): self.send_response(200) self.send_header('Content-type', 'text/plain') self.end_headers() try: service = Service() options = webdriver.ChromeOptions() options.add_argument('--headless') options.add_argument('--no-sandbox') options.add_argument('--disable-dev-shm-usage') driver = webdriver.Chrome(service=service, options=options) driver.get('https://www.example.com/') driver.save_screenshot("screenshot_example.png") driver.quit() # 记得关闭浏览器释放资源 except Exception as e: self.wfile.write(f'{str(e)}'.encode('utf-8')) self.wfile.write('Hello, world!'.encode('utf-8')) return
内容的提问来源于stack exchange,提问作者Jojo Momo
相关产品推荐
相关产品推荐

