【问题标题】:How can I launch Chrome with an unpacked extension?如何使用未打包的扩展程序启动 Chrome?
【发布时间】:2013-09-30 10:20:55
【问题描述】:

我正在使用 Selenium WebDriver 来测试我正在开发的 Google Chrome 扩展程序。我注意到ChromeDriver 可以自定义为它启动的Chrome 实例添加扩展。这可以使用ChromeOptions 类的AddExtensionAddExtensions 方法来实现。

这些方法的文档表明它们需要以 crx 文件的形式提供扩展名。由于 我正在 开发扩展,我没有 crx 文件。我希望能够加载解压后的扩展,但我找不到执行此操作的方法。

我尝试将扩展文件放在一个 zip 文件中并为 AddExtension 方法指定此文件,但这会导致发生异常,因为它不是 crx 文件。我也尝试传入包含解压文件的目录,但这产生了FileNotFoundException

我该怎么做?

【问题讨论】:

  • 我不知道这一切意味着什么,但我赞成你的回答,因为它确实看起来很有用。

标签: google-chrome selenium google-chrome-extension selenium-webdriver


【解决方案1】:

我能够通过使用AddArgument 方法将信息直接传递给Chrome 来实现这一点。这是它在 C# 中的样子:

options = new ChromeOptions();
options.AddArgument("--load-extension=" + unpackedExtensionPath);

【讨论】:

  • 如果我在客户端机器上有解压的扩展,RemoteWebDriver 也可以这样做吗?
【解决方案2】:

对于打包扩展(.crx 文件)

ChromeOptions options = new ChromeOptions();
options.addExtensions(new File("/path/to/extension.crx"));
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(ChromeOptions.CAPABILITY, options);
ChromeDriver driver = new ChromeDriver(capabilities);

对于解压的扩展(本地文件夹)

ChromeOptions options = new ChromeOptions();
options.addArguments("load-extension=/path/to/extension");
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(ChromeOptions.CAPABILITY, options);
ChromeDriver driver = new ChromeDriver(capabilities);

source

【讨论】:

  • 第二个选项仅适用于本地 Selenium,因为 /path/to/extension 无法远程使用。
  • 我的解压扩展在我手动加载时可以工作,但是当通过这种方法加载时,会出现“清单文件丢失或不可读”的错误
  • 您是否在第二行指定了正确的本地路径?
【解决方案3】:

可能会晚,但对于未来的用户:

https://sites.google.com/a/chromium.org/chromedriver/extensions

【讨论】:

    【解决方案4】:

    解压后的扩展错误弹出给我,我要求删除 chrome 中作为组织策略强制执行的限制。取消限制后,我就可以运行该程序而不会出现任何错误。 ChromeBrowser-GPO-Deny - 这是被删除的那个。您可以检查设置 - 扩展 - 检查开发人员模式,看看是否在移除限制后检查加载解压扩展。那你应该很好。以上所有内容仅在 chrome 不受限制时才有效。

    【讨论】:

      【解决方案5】:

      在 Python3 中可以这样做:

      from selenium.webdriver import Chrome, ChromeOptions
      
      options = ChromeOptions()
      options.add_argument("load-extension=/path/to/unpacked_ext")
      
      driver = Chrome("/path/to/chromedriver", options=options)
      
      # (optional) Look at the uploaded extension
      driver.get("chrome://extensions")
      
      

      【讨论】:

        【解决方案6】:

        这是使用webdriver_manager python 示例

        from selenium import webdriver
        from webdriver_manager.chrome import ChromeDriverManager
        
        
        options = webdriver.ChromeOptions()
        # loading the extension Edit-This-Cookie
        options.add_argument("--load-extension=./Edit-This-Cookie")
        driver = webdriver.Chrome(ChromeDriverManager().install(), chrome_options=options)
        
        driver.get("https://google.com")
        

        【讨论】:

          【解决方案7】:

          Selenium 文档有一个这样的示例,用于打包(非解包)扩展:

          capabilities.setCapability("platform", "Windows 8" );
          capabilities.setCapability("version", "10");
          capabilities.setCapability("name", testname);
          capabilities.setCapability("screen-resolution", "1280x1024");
          ChromeOptions options = new ChromeOptions();
          options.addExtensions(new File("/path/to/extension.crx"));
          capabilities.setCapability(ChromeOptions.CAPABILITY, options);
          if (isLocal) driver = new ChromeDriver(capabilities);
          

          【讨论】:

          • addExtensions 似乎需要一个 crx 文件,它代表一个打包的扩展而不是一个解压缩的扩展。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-04-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-19
          相关资源
          最近更新 更多