通过脚本(在 JS 中)以编程方式将 YouTube 广告插播添加到自己的视频

问题描述 投票:0回答:1

我尝试通过在浏览器控制台中执行一个小脚本(用 Javascript 编写)来自动向我自己的 YouTube 视频添加一些广告插播。

我的方法如下:

const videoLengthInSeconds = 615;
const breakInterval = 15;
const desiredAmountOfBreaks = Math.round(videoLengthInSeconds / breakInterval);

const breakTimeStamps = Array(desiredAmountOfBreaks)
  .fill(0)
  .map((_, i) => {
    return (
      ("0" + ~~(i / 4) + ":0" + 60 * ((i / 4) % 1)).replace(/\d(\d\d)/g, "$1") +
      ":00"
    );
  })
  .slice(1);

function start() {
  breakTimeStamps.forEach(() => {
    document.querySelector("#add-ad-break").click();
  });
  doPolling();
}

let stopPolling = false;

function doPolling() {
  setTimeout(function() {
    if (!stopPolling) {
      const allAdsInDom = document.querySelectorAll(
        ".ytve-ad-breaks-editor-options-panel .ad-break-row"
      );

      if (allAdsInDom.length === desiredAmountOfBreaks - 1) {
        stopPolling = true;
        fillBreaksTimeStamps();
      }
      doPolling();
    }
  }, 2000);
}

function fillBreaksTimeStamps() {
  getAllAdsInDom().forEach((adsItem, i) => {
    const adBreakInput = adsItem.querySelector("#content-container input");
    const relatedBreakTimeStamp = breakTimeStamps[i];
    adBreakInput.value = relatedBreakTimeStamp;
  });
}

function getAllAdsInDom() {
  const allAds = Array.from(
    document.querySelectorAll(
      ".ytve-ad-breaks-editor-options-panel .ad-break-row"
    )
  );
  return allAds;
}

目前状态如下:

所以脚本似乎添加了中断并填充了时间戳。

问题是:时间戳输入字段不知何故未正确“触发”。 广告标记不会以某种方式添加。它们未被正确识别为新的广告插播时间。请看这里:

通常应该有这些标记:

所以没有真正添加广告插播。

因此,我尝试稍微改进函数 fillBreaksTimeStamps() 并尝试了以下方法:

adBreakInput.focus();
adBreakInput.value = relatedBreakTimeStamp;
adBreakInput.dispatchEvent(new Event("change"));

但同时触发 .focus() 或分派更改事件也没有帮助。

有什么建议吗?

javascript html dom
1个回答
0
投票

input
活动怎么样?

我猜如果你退格一个零并在脚本运行后替换它,它将触发你想要的。

© www.soinside.com 2019 - 2024. All rights reserved.