Я пытаюсь определить, есть ли у видео на веб-странице аудиодорожка, но я не могу получить селен для загрузки видео.
Вот примерно то, что я делаю:
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);
Я использую общую сетку селена, которая должна иметь доступ к реальным (не безголовым) версиям Firefox и Chrome. Я не совсем уверен, как настроены эти машины, поэтому возможно, что мне нужно отправить дополнительные параметры драйверу, чтобы включить видео, но я не смог определить, что это такое.
EDIT
Просто чтобы быть уверенным, я сделал скриншот: