Mac M1环境下Capybara Selenium连接ChromeDriver失败求助
解决方案
一、指定兼容M1的ChromeDriver版本
你遇到的问题源于106.0.5249.61版本没有适配M1的安装包,从ChromeDriver 107版本开始,官方提供了专门的mac_arm64版本安装包,你可以通过以下方式指定兼容版本:
方法1:环境变量指定版本
启动测试前设置环境变量:
export WEBDRIVERS_CHROME_VERSION=107.0.5304.62
该版本及后续版本均包含M1对应的安装包。
方法2:代码中直接指定版本
在注册Driver的代码前添加版本指定逻辑:
Webdrivers::Chromedriver.required_version = '107.0.5304.62'
二、修复旧版webdrivers gem的下载路径问题
如果你的webdrivers gem版本较旧,可能会错误生成M1安装包的下载URL(比如用chromedriver_mac64_m1.zip而非官方标准的chromedriver_mac_arm64.zip),可以手动指定下载模板:
Webdrivers::Chromedriver.url = 'https://chromedriver.storage.googleapis.com/%{version}/chromedriver_mac_arm64.zip'
三、直接指定本地ChromeDriver路径
若已手动下载适配M1的ChromeDriver,可直接指定本地路径跳过自动下载流程:
Capybara.register_driver :headless_chrome do |app| options = Selenium::WebDriver::Chrome::Options.new options.add_argument("--disable-gpu") options.add_argument("--headless") options.add_argument("--no-sandbox") options.add_argument("--window-size=1920,1080") driver = Capybara::Selenium::Driver.new( app, browser: :chrome, options: options, driver_path: '/usr/local/bin/chromedriver' # 替换为你的本地ChromeDriver实际路径 ) # 保留原有的下载行为配置 bridge = driver.browser.send(:bridge) path = "/session/:session_id/chromium/send_command" path[":session_id"] = bridge.session_id bridge.http.call(:post, path, cmd: "Page.setDownloadBehavior", params: { behavior: "allow", downloadPath: "/tmp/downloads", }) driver end
注意:你的原代码缺少options = Selenium::WebDriver::Chrome::Options.new初始化语句,需补上否则会触发options未定义错误。
内容的提问来源于stack exchange,提问作者Bitwise
相关产品推荐
相关产品推荐

