检测声音是不是在硒中播放
Posted
技术标签:
【中文标题】检测声音是不是在硒中播放【英文标题】:Detecting if sound is playing in selenium检测声音是否在硒中播放 【发布时间】:2014-09-25 15:21:43 【问题描述】:我在 iframe 中为我正在处理的项目加载了一些第 3 方网站,但我需要以某种方式检测这些网站是否正在播放任何声音。我没有看到任何使用 WebDriver 的方法来查看浏览器中是否正在播放声音,还有其他方法可以查询 VM 本身吗?
【问题讨论】:
至少相关:***.com/questions/17349345/… 你能解释一下“播放声音”吗?我的台式机连声卡都没有,能不能按照你的定义“播放声音”? 是的,比如说任何 Flash 应用程序、Java 小程序或任何启动对 OS 核心音频服务的系统调用的东西。即使您没有声卡,核心音频服务仍会收到该请求并尝试处理它,即使它是针对虚拟音频设备的。这就是 VM 的工作方式,然后主机连接到该虚拟音频设备以将其发送到真实音频设备。我想检测我要在 iframe 中加载的任何网页是否会以编程方式让我的用户感到厌烦,所以我不能在那里自动显示它。 您知道 Chrome 在标签中播放声音时如何在标签上放置一个小扬声器图标吗?这就是我想要的。有没有办法使用 selenium 查询 Chrome 的标签名称以检查该图标? Selenium 是一个处理浏览器 DOM 的库。对于其他任何事情,您都需要其他库。 【参考方案1】:在现代 html5 时代,对于任何检查音频是否正在播放的人,我们可以使用 html5 中的 audio
和 video
标签来使用 javascript 执行器检查声音播放。下面的代码在 java 和 selenium 中
boolean isPlaying = false;
// find all frames and iterate over it.
// This finds only the top level frames. Frames inside frames are not considered for this answer
for (WebElement iframe: driver.findElements(By.cssSelector('iframe')))
driver.switchTo().frame(iframe);
// find all the video and audio tags within the frame
for (WebElement player: driver.findElements(By.cssSelector('audio,video')))
// check if the argument paused is true or false.
// In case audio or video is playing, paused is false
String paused = (String) ((JavascriptExecutor) driver).executeScript('return arguments[0].paused', player);
if (paused.equals('false'))
isPlaying = true;
break;
// switch out from the frame
driver.switchTo().defaultContent();
if (isPlaying)
break;
上面的代码可以修改为跟踪帧内的帧,也可以通过将其更改为递归函数
【讨论】:
以上是关于检测声音是不是在硒中播放的主要内容,如果未能解决你的问题,请参考以下文章