我正在尝试检测网页上的视频是否有音频轨迹,但我无法让selenium加载视频。
以下是我正在做的事情:
const webdriver = require("selenium-webdriver");
const driver = new webdriver.Builder()
.forBrowser("firefox")
.usingServer(myGridURL)
.build();
const done = (result) => console.log(result);
driver.get(urlWithHTML5Video).then(() => {
driver.executeAsyncScript(() => {
const done = arguments[arguments.length - 1];
const video = document.getElementsByTagName("video")[0];
video.addEventListener("loadeddata", function() {
if (this.mozHasAudio > 0) {
done("audio track detected");
} else {
done("audio track not detected");
}
}, false);
video.load();
setTimeout(() => {
done("video did not load");
}, 10000);
});
}, [], done);
这总是打印“视频未加载”,即使我在等待几秒钟后检查状态时
readyState
总是
0
mozHasAudio
总是
false
. 我在Chrome上也试过这个,当我得到一个
readState
webkitAudioDecodedByteCount
它应该表示视频有音频轨迹(它确实有)。
这是我在Chrome上尝试的:
video.play().then(() =>
setTimeout(() => {
console.log(video.webkitAudioDecodedByteCount); // never reached
video.pause();
}, 100))
setTimeout(() => {
console.log(video.webkitAudioDecodedByteCount); // always 0
console.log("video did not load"); // always reached
}, 10000);
我使用的是一个共享的selenium网格,它应该访问真实(非headless)版本的Firefox和Chrome。我不太清楚这些机器是如何设置的,所以我可能需要向驱动程序发送额外的参数来启用视频,但我还无法确定这些是不是和什么。
编辑
为了确定,我拍了一张截图: