使用Selenium时Google Chrome Native Messaging失效求助
解决Selenium启动Chrome时Native Messaging Host找不到的问题
核心原因
Selenium默认会创建临时用户数据目录,不会读取手动浏览时使用的~/.config/google-chrome-for-testing配置,导致Native Messaging主机配置无法被加载。
解决方法
1. 指定用户数据目录
让Selenium使用你已配置好Native Messaging的用户目录,修改Java代码:
ChromeOptions cOpt = new ChromeOptions(); cOpt.setBinary("/path/to/google-chrome-for-testing"); // 指定已配置Native Messaging的用户数据目录 cOpt.addArguments("--user-data-dir=~/.config/google-chrome-for-testing"); File extension = new File("/path/to/extension.crx"); cOpt.addExtensions(Arrays.asList(extension)); return new ChromeDriver(cOpt);
注意:如果担心影响日常浏览的配置,可以复制一份该目录到新路径,再指定给Selenium使用。
2. 检查权限设置
确保Native Messaging相关文件权限正确:
- 给主机可执行文件添加执行权限:
chmod +x /path/to/your-native-messaging-executable - 给配置.json文件设置可读权限:
chmod 644 ~/.config/google-chrome-for-testing/NativeMessagingHosts/your-host-config.json
3. 验证配置文件的绝对路径
检查Native Messaging主机的.json配置文件,path字段必须使用绝对路径,不能用相对路径:
{ "name": "com.your.host.name", "description": "Your Native Messaging Host", "path": "/usr/local/bin/your-native-host", // 必须是绝对路径 "type": "stdio", "allowed_origins": [ "chrome-extension://your-extension-id/" ] }
4. 直接传递Native Messaging主机配置(备选)
如果不想指定用户数据目录,可以通过Chrome参数直接传递主机配置:
ChromeOptions cOpt = new ChromeOptions(); cOpt.setBinary("/path/to/google-chrome-for-testing"); // 格式:--native-messaging-hosts=主机名称=配置文件绝对路径 cOpt.addArguments("--native-messaging-hosts=com.your.host.name=/path/to/your-host-config.json"); File extension = new File("/path/to/extension.crx"); cOpt.addExtensions(Arrays.asList(extension)); return new ChromeDriver(cOpt);
内容的提问来源于stack exchange,提问作者mardro
相关产品推荐
相关产品推荐

