You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

macOS环境下使用Selenium WebDriver调用Chrome获取地理位置失败咨询

macOS GitHub Actions Chrome地理定位失败解决方案

根因说明

macOS 10.15+的系统权限策略与Ubuntu、Windows不同,默认禁止无UI交互的自动化Chrome读取系统位置服务,同时Chrome默认的地理定位权限弹窗在CI无头模式下无法被手动触发允许,因此会出现获取不到坐标的问题。

可行方案

方案1:代码层面强制覆盖(兼容性最高,推荐)

直接通过Chrome参数和Selenium 4的CDP能力绕过系统位置服务依赖,无需修改CI配置,全平台通用:

  1. 初始化ChromeOptions时新增权限配置,默认授予地理定位权限:
ChromeOptions options = new ChromeOptions();
Map<String, Object> prefs = new HashMap<>();
// 1表示允许地理定位权限,2为拒绝,0为询问
prefs.put("profile.default_content_setting_values.geolocation", 1);
options.setExperimentalOption("prefs", prefs);
  1. 初始化Driver后调用CDP接口强制覆盖地理位置,无需依赖系统位置服务返回值:
DevTools devTools = ((ChromeDriver) driver).getDevTools();
devTools.createSession();
// 三个参数分别为自定义纬度、经度、定位精度,可按测试需求修改
devTools.send(Emulation.setGeolocationOverride(
    Optional.of(40.7128), 
    Optional.of(-74.0060), 
    Optional.of(100))
);

方案2:CI配置层面修改系统权限

如果不想修改测试代码,可以在GitHub Actions的macOS执行步骤中新增权限配置:
在对应job的steps中新增如下步骤:

- name: 配置macOS Chrome地理定位权限
  if: runner.os == 'macOS'
  run: |
    # 修改Chrome配置默认允许地理定位
    mkdir -p ~/Library/Application\ Support/Google/Chrome/Default/
    echo '{"profile": {"default_content_setting_values": {"geolocation": 1}}}' > ~/Library/Application\ Support/Google/Chrome/Default/Preferences
    # 开启系统位置服务对Chrome的授权
    sudo defaults write /Library/Preferences/com.apple.locationd.plist Authorized -bool true
    sudo defaults write com.apple.locationd ClientAuthorization -dict-add "com.google.Chrome" -int 2
    sudo killall locationd

额外注意

你当前使用的Selenium 4.0.0-rc-1预览版存在macOS Chrome CDP接口兼容性问题,配置后如果仍失败,建议将Selenium依赖升级到4.0.0正式版及以上,该版本已修复对应兼容缺陷。

内容的提问来源于stack exchange,提问作者Boni García

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 14:54:04