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

Selenium控制Chrome协议处理:解决Linux下xdg-open弹窗问题

Linux下Selenium自动化遇到xdg-open弹窗的问题与解决方案

问题背景

在Linux系统下使用Selenium编写Web自动化代码时,遭遇xdg-open弹窗无法通过Selenium API关闭的问题。该弹窗仅提供“始终允许”选项,无拒绝选项,严重干扰自动化流程执行。

尝试过的无效方案

方案1:通过Chrome Preferences配置自动启动协议

在Chrome 129.0版本中,使用以下配置启动Chrome WebDriver:

prefs = {'protocol_handler.policy.auto_launch_protocols_from_origins':[
    {
        'protocol': 'protocol-name',
        'allowed_origins':['https://domain-allowed-calling-this-protocol/']
    }
]}
ops.add_experimental_option("prefs", prefs)

补充说明:自定义协议名称前无需添加部分网站提及的web+前缀

问题点:虽能阻止带复选框的自定义协议弹窗,但会自动打开新的空白Chrome窗口,且执行webdriver.quit()后该窗口仍残留。

方案2:禁用网站协议处理功能

在Chrome 129.0图形界面中设置默认行为为Don't allow sites to handle protocols(不允许网站处理协议),对应Chrome的Preferences文件会生成如下配置:

"custom_handlers":{"enabled":false,"ignored_protocol_handlers":[],"registered_protocol_handlers":[]}

问题点:无论通过图形界面手动设置,还是通过Selenium传入该配置,均无法生效,xdg-open弹窗依旧出现。

相关疑问

  • 是否有方法在Linux下关闭xdg?
  • Chrome的协议处理功能具体如何运作?
  • 是否存在其他解决xdg-open弹窗问题的方法?

最终可行解决方案

基于selenium/standalone-chrome:129.0-chromedriver-129.0镜像的Docker容器环境,执行以下步骤:

  1. 在初始为空的/etc/opt/目录下创建层级子目录:chrome/policies/managed/
  2. 在该目录下创建blocklist.json文件,写入以下内容:
{ "URLBlocklist": ["third-party-protocol-name-1://*", "third-party-protocol-name-2://*"] }
  1. 重启Chrome后,xdg-open弹窗不再弹出。

内容的提问来源于stack exchange,提问作者YouCL

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 09:51:16