【发布时间】:2022-01-07 17:39:12
【问题描述】:
我有一个脚本,目前可以消除那些讨厌的“继续看?”使用 Tampermonkey 和 waitForKeyElements(在 Google Chrome 中)在 YouTube 上自动播放视频时的提示。如果您只是不间断地观看视频,它们会不时弹出。以下是我所指的:
这是消除它们的脚本:
// ==UserScript==
// @name YouTube Yes SJ3
// @include https://www.youtube.com/*
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js
// @require https://gist.github.com/raw/2625891/waitForKeyElements.js
// @grant GM_addStyle
// ==/UserScript==
waitForKeyElements ("a.yt-simple-endpoint.style-scope.yt-button-renderer:contains('Yes')", clicks);
function clicks (jNode) {
var clickEvent = document.createEvent ('MouseEvents');
clickEvent.initEvent ('click', true, true);
jNode[0].dispatchEvent (clickEvent);
console.log('SJ3');
waitForKeyElements ("a.yt-simple-endpoint.style-scope.yt-button-renderer:contains('Yes')", clicks);
}
虽然这个脚本似乎成功地点击了每个“继续观看?”提示,根据控制台,如果单击第二个提示(或除自动播放序列中的第一个以外的任何视频),脚本会一次又一次地快速且无限期地运行。然后,我的 CPU/RAM 使用率飙升。
现在我不确定原因,但可能是“继续观看?”除了第一个视频之外,任何视频上的提示在单击后都会被隐藏,这可能是脚本尝试无限触发的原因。
所以为了解决这个问题,我想我会尝试延迟函数中的最后一行代码,以便在单击后每 30 秒检查一次。所以我使用了setTimeout()。这是更新的代码:
// ==UserScript==
// @name YouTube Yes 10SJX
// @include https://www.youtube.com/*
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js
// @require https://gist.github.com/raw/2625891/waitForKeyElements.js
// @grant GM_addStyle
// ==/UserScript==
waitForKeyElements ("a.yt-simple-endpoint.style-scope.yt-button-renderer:contains('Yes')", clicks);
function clicks (jNode) {
var clickEvent = document.createEvent ('MouseEvents');
clickEvent.initEvent ('click', true, true);
jNode[0].dispatchEvent (clickEvent);
console.log('10Clicked');
setTimeout(() => { waitForKeyElements ("a.yt-simple-endpoint.style-scope.yt-button-renderer:contains('Yes')", clicks); }, 30000);
}
但它似乎没有执行setTimeout() 行。它会单击第一个提示,但不会单击出现的以下提示。如何在通过 waitForKeyElements 再次检查选择器之前成功让我的脚本等待 X 时间?
最终,我该如何消除反复出现的“继续观看”?在 YouTube 上使用 waitForKeyElements 提示?
【问题讨论】:
标签: javascript youtube userscripts