如何使用无头镀铬在 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当我第一次开始使用它时,我会在页面上收到一条警告,说我需要启用 Adobe 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 中启用闪存的主要内容,如果未能解决你的问题,请参考以下文章