我正在处理用户脚本,但它似乎仅适用于第一次比较:
(function() {
'use strict';
var noError = document.getElementsByClassName("noMistakeButton");
var next = document.getElementsByClassName("nextButton");
var wait = document.getElementsByClassName("understoodButton");
var okko = document.getElementsByClassName("buttonKo");
var exitOkko = document.getElementsByClassName("exitButton");
while(1)
{
if( noError !== null)
{
noError.click();
}
if( next !== null)
{
exit.click();
}
if( wait !== null)
{
wait.click();
}
sleep(2);
if( okko !== null)
{
exit.click();
}
if( exitOkko !== null)
{
exitOkko.click();
}
} })();
我的目标是在AFK时自由运行此脚本。 正如您所看到的,网页上有许多按钮,每个按钮都不能是:可见或隐藏。我的目标就是点击它们。
Here is the target page (static URL)
有些按钮只有类,没有ID。其他人都有他们两个。
控制台报告:
错误:执行脚本'AutoVoltair'失败! noError.click不是 功能
答案 0 :(得分:0)
目前还不清楚你希望实现什么目标。如果您尝试单步执行一系列控件,请使用Choosing and activating the right controls on an AJAX-driven site中所示的方法。
问题中显示的代码类型只会播放“Whac-A-Mole”,其下一个按钮“弹出”。 (并且只有删除了前面的按钮。)
无论如何,回答这个问题:“为什么这段代码只做第一个if?”。
这是因为用户脚本(和javascript)在第一个严重错误(除少数例外)时停止运行。此外:
noError.click
不是函数,因为noError is a collection of elements, not a button。getElementsByClassName
次来电只进行一次。如果它将继续循环,你需要在循环内重新检查。sleep()
这样的东西。while (1)
是一个非常糟糕的主意,可以冻结您的浏览器,甚至可以帮助您的PC崩溃。使用setInterval
进行页面轮询。以下是修正了这些错误的“Whac-A-Mole”代码:
setInterval ( () => {
var noError = document.getElementsByClassName ("noMistakeButton");
var next = document.getElementsByClassName ("nextButton");
var wait = document.getElementsByClassName ("understoodButton");
var okko = document.getElementsByClassName ("buttonKo");
var exitOkko = document.getElementsByClassName ("exitButton");
if (noError.length) {
noError[0].click ();
}
if (next.length) {
next[0].click ();
}
if (wait.length) {
wait[0].click ();
}
if (okko.length) {
okko[0].click ();
}
if (exitOkko.length) {
exitOkko[0].click ();
}
},
222 // Almost 5 times per second, plenty fast enough
);
如果您想对点击次数进行排序,请使用this answer中所示的链式waitForKeyElements()
来电。