如何使用无头镀铬在 Selenium 中启用闪存

Posted

技术标签:

【中文标题】如何使用无头镀铬在 Selenium 中启用闪存【英文标题】:How to enable flash in Selenium with headless chrome 【发布时间】:2018-10-11 20:39:32 【问题描述】:

作为 CI 流程的一部分,我正在尝试自动执行与 Flash 应用程序的一些交互。在使用 Selenium Standalone Server 无头运行 chrome(通过 xvfb-run)时,我在启用 flash 时遇到了麻烦。我做了很多搜索,但到目前为止还没有找到任何有用的东西。

我目前正在使用它,但如果某处有已知的工作配置,我愿意切换到不同的版本...

Selenium 独立服务器 3.11 Chromedriver 2.33 铬 65.0.3325.181 Java 8

当我第一次开始使用它时,我会在页面上收到一条警告,说我需要启用 Adob​​e Flash Player。我通过使用来自https://sqa.stackexchange.com/questions/30312/enable-flash-player-on-chrome-62-while-running-selenium-test 的以下内容“过去”了该消息:

    ChromeOptions options = new ChromeOptions();
    options.addArguments("headless");

    Map<String, Object> prefs = new HashMap<String, Object>();
    prefs.put("profile.default_content_setting_values.plugins", 1);
    prefs.put("profile.content_settings.plugin_whitelist.adobe-flash-player", 1);
    prefs.put("profile.content_settings.exceptions.plugins.*,*.per_resource.adobe-flash-player", 1);
    // Enable Flash for this site
    prefs.put("PluginsAllowedForUrls", "ourapp.com");
    options.setExperimentalOption("prefs", prefs);

    WebDriver driver = new ChromeDriver(options);
    driver.get("ourapp.com");

在加载我们的应用程序时,页面现在会给出一个稍微不同的消息,我无法理解。有没有办法解决这个问题,或者有没有其他方法可以默认启用 Flash?

Restart Chrome to enable Adobe Flash Player

提前感谢您的帮助!

【问题讨论】:

【参考方案1】:

感谢一位同事指出这篇文章指出插件在 headless chrome 中不起作用。 https://groups.google.com/a/chromium.org/forum/#!searchin/headless-dev/flash%7Csort:date/headless-dev/mC0REfsA7vo/rKAZdRrCCQAJ

幸运的是,我已经将 xvfb 用作虚拟显示器,因此我只需从 ChromeOptions 中删除“headless”参数即可让一切运行起来。

编辑*

虽然我确实不需要在使用 xvfb 时以无头模式运行,但我最终发现解决我的问题的真正“解决方案”(更多的是一种解决方法)是将自定义 chrome 配置文件上传到我的 docker 映像中。这样做允许我设置我需要的所有首选项,并且不需要原始帖子中发布的任何代码。更愿意以编程方式实现这一目标,但这至少让我得到了我现在需要的东西。我想我会发帖以防其他人将来遇到这种情况..

【讨论】:

以上是关于如何使用无头镀铬在 Selenium 中启用闪存的主要内容,如果未能解决你的问题,请参考以下文章

无法运行无头镀铬量角器角 2 窗口

使用 Kameleo 的无头模式的附加镀铬选项

在 Selenium 版本 3.7.0 无头驱动程序 phantomjs 版本 2.1 上启用 Cookie

如何使用selenium工具测试镀铬扩展?

使用JavaScript的Web自动化

如何在 Selenium 的无头 Firefox 中使用 --screenshot 和 python