Tampermonkey waitForKeyElements 在点击后刷新页面并创建无限循环?
Tampermonkey waitForKeyElements refreshes page after click and creates endless loop?
我正在尝试自动点击 YouTube 上的“还在看吗?视频将很快暂停”按钮,这样我的视频就不会在 X 时间后停止。我已经使用 waitForKeyElements 创建了一个 Tampermonkey/Greasemonkey 脚本来在按钮出现时单击它。它似乎有效,因为它点击了弹出窗口。但有时它会进入无限循环,点击弹出按钮,然后刷新页面。刷新后按钮会再次弹出,然后按钮会再次被点击并无限重复。
我提供了我正在谈论的内容的屏幕截图。注意左下角的 YouTube 弹出窗口:
这是 Tampermonkey 脚本的代码:
// ==UserScript==
// @name YouTube Yes 4
// @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 (
".yt-button-renderer", click
);
function click (TargetLink) {
TargetLink = $("a:contains('Yes')")
if (TargetLink.length)
window.location.href = TargetLink[0].href
}
编辑:这是一个使用 .click()
的更新脚本
waitForKeyElements (
"tp-yt-paper-button#button.style-scope.yt-button-renderer.style-blue-text.size-default", clicks
);
function clicks () {
$("tp-yt-paper-button#button.style-scope.yt-button-renderer.style-blue-text.size-default:contains('Yes')").click();
}
我们将不胜感激任何帮助。节日快乐!
在另一个 Stack Overflow thread 和此处评论的帮助下,我能够使用带有 contains() 的选择器和出现在弹出按钮中的单词“是”来获得解决方案:
// ==UserScript==
// @name YouTube Yes
// @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);
}
我正在尝试自动点击 YouTube 上的“还在看吗?视频将很快暂停”按钮,这样我的视频就不会在 X 时间后停止。我已经使用 waitForKeyElements 创建了一个 Tampermonkey/Greasemonkey 脚本来在按钮出现时单击它。它似乎有效,因为它点击了弹出窗口。但有时它会进入无限循环,点击弹出按钮,然后刷新页面。刷新后按钮会再次弹出,然后按钮会再次被点击并无限重复。
我提供了我正在谈论的内容的屏幕截图。注意左下角的 YouTube 弹出窗口:
这是 Tampermonkey 脚本的代码:
// ==UserScript==
// @name YouTube Yes 4
// @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 (
".yt-button-renderer", click
);
function click (TargetLink) {
TargetLink = $("a:contains('Yes')")
if (TargetLink.length)
window.location.href = TargetLink[0].href
}
编辑:这是一个使用 .click()
的更新脚本waitForKeyElements (
"tp-yt-paper-button#button.style-scope.yt-button-renderer.style-blue-text.size-default", clicks
);
function clicks () {
$("tp-yt-paper-button#button.style-scope.yt-button-renderer.style-blue-text.size-default:contains('Yes')").click();
}
我们将不胜感激任何帮助。节日快乐!
在另一个 Stack Overflow thread 和此处评论的帮助下,我能够使用带有 contains() 的选择器和出现在弹出按钮中的单词“是”来获得解决方案:
// ==UserScript==
// @name YouTube Yes
// @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);
}