用于选择 YouTube 上视频质量的 JavaScript

Len*_*non 2 javascript youtube sirishortcuts

我正在尝试在 iOS 上设置 Siri 快捷方式,以便轻松地将 YouTube 视频隔空播放到 Apple TV。作为该过程的一部分,我想选择视频的质量(大概使用 JavaScript),但我在实现这一点时遇到了困难。这是我到目前为止所得到的可在桌面/非 iOS 设备上查看的 imgur 链接)。它成功地使用 JavaScript 暂停视频,自 YouTube 自动播放以来将其倒回到开头,然后通过 AirPlay 连接到 Apple TV,等待电视打开,然后单击视频将其取消静音。然而,我尝试设置视频质量的所有方法都不起作用,我在这里抓狂了。有人知道这是否可能吗?是不是视频的参数可以设置?或者我可以使用 JavaScript 单击设置按钮并选择质量吗?我的 Javascript 非常弱,所以任何帮助我指明正确方向的帮助都将非常感激。

这是我到目前为止得到的 Javascript:

ytplayer = document.querySelector('video');

ytplayer.pause();

ytplayer.currentTime = 0;

ytplayer.click();

ytplayer.play();

completion();
Run Code Online (Sandbox Code Playgroud)

alj*_*gom 5

我不确定 Apple TV 上的 Siri 快捷方式如何工作,因此这可能不适用,但如果它的布局与计算机浏览器类似,则此代码适用于我单击设置按钮并在网络浏览器中选择分辨率

let sleep = ms => new Promise(r => setTimeout(r, ms));

async function waitForVideo() {
    let video = document.querySelector('video');
    while (!video) {
        console.log('waiting for video');
        await sleep(200);
        video = document.querySelector('video');
    }
}

/**
 * Sets the quality
 * options are: "Highest" and the options available in the menu ("720p", "480p", etc.)
 */
async function setQuality(quality) {
    await waitForVideo();
    await sleep(1000);

    let settingsButton = document.getElementsByClassName('ytp-settings-button')[0];
    settingsButton.click();
    await sleep(500);

    let qualityMenu = document.getElementsByClassName('ytp-panel-menu')[0].lastChild;
    qualityMenu.click();
    await sleep(500);

    let qualityOptions = [...document.getElementsByClassName('ytp-menuitem')];
    let selection;
    if (quality === 'Highest') selection = qualityOptions[0];
    else selection = qualityOptions.filter((el) => el.innerText == quality)[0];

    if (!selection) {
        let qualityTexts = qualityOptions.map((el) => el.innerText).join('\n');
        console.log('"' + quality + '" not found. Options are: \n\nmax\nmin\n' + qualityTexts);
        settingsButton.click(); // click menu button to close
        return;
    }

    selection.click();
}

setQuality('Highest');   
Run Code Online (Sandbox Code Playgroud)