我尝试通过在浏览器控制台中执行一个小脚本(用 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() 或分派更改事件也没有帮助。
有什么建议吗?
input
活动怎么样?
我猜如果你退格一个零并在脚本运行后替换它,它将触发你想要的。