我正在为一个调查网站制作一个小用户。每当我点击调查并且表明我没有收到它时,脚本应该刷新一定次数试图声明调查直到它放弃。 (如果您不知道用户是什么,请将其视为在特定网站上始终保持运行的内容,以便您可以使用javascript选择器和内容控制事物)
这是我的脚本到目前为止(javascript部分就是问题所在):
var elementExists = document.getElementsByClassName("message warning")[0];
if(elementExists)
{
var attempts = 0;
while(attempts<5)
{
attempts += 1;
location.reload();
if(elementExists)
{
//nothing
}
else
{
window.stop();
}
}
window.stop();
}
这实际上是我第一次使用Javascript,所以我认为这是错误的原因,但经过45分钟的调试后,我感到非常困惑。如果我删除最后一个“window.stop();”代码无限刷新网页。如果它停留在那里,那么代码甚至不会启动。如果“window.stop();”似乎几乎就像跳过了while循环一样。存在。这是Javascript的功能,还是其他地方的问题?
如果有人能引导我朝着正确的方向前进或帮我解决这个问题,我将非常感激!
(我还检查了选择器以查看是否存在问题,但我已正确完成)
更新:结果是location.reload();停止脚本,从而强制重新加载。由于我正在创建一个用户脚本,我意识到我可以使用Greasemonkey API(或者更像是偶然发现)。通过使用GM_setValue和GM_getValue,我能够解决此问题并且脚本成功重新加载了一定次数(取决于变量尝试)并在完成时停止。但是在稍微搞乱之后,然后将脚本恢复到旧版本,脚本就不会再执行了;由于某种原因,“反击&尝试”似乎是假的......有谁能找出原因?如果需要文档: https://wiki.greasespot.net/GM_getValue https://wiki.greasespot.net/GM_setValue
var tries = 5;
var elementExists = document.getElementsByClassName("message warning")[0];
var counter = GM_getValue('counter', 0);
if(elementExists && counter < tries)
{
GM_setValue('counter', ++counter);
location.reload();
}
(计数器和尝试似乎都是整数值..因此在比较它们时应该存在问题......)
同样正如@ yuriy636所建议的那样,我试图重置变量并创建类似这样的东西
var tries = 5;
var elementExists = document.getElementsByClassName("message warning")[0];
var counter1 = GM_getValue('counter1', 0);
if(elementExists && counter1 < tries)
{
GM_setValue('counter1', ++counter1);
location.reload();
}
if(elementExists && counter1 == tries)
{
GM_deleteValue('counter1');
window.close();
}
if(!!elementExists)
{
GM_deleteValue('counter1');
return;
alert("stops script while hidden");
}
但我再次被无限循环击中.. RIP
更新2:不是RIP后解决方案:
var tries = 50;
var elementExists = document.getElementsByClassName("message warning")[0];
var counter = GM_getValue('counter', 0);
if(elementExists && counter < tries)
{
GM_setValue("counter", counter + 1);
location.reload();
}
else
{
GM_deleteValue("counter");
}
if(elementExists && counter >= tries)
{
window.close();
}
100%工作,在指示尝试次数后,如果错误仍然存在,页面将关闭
答案 0 :(得分:1)
最可能的问题是你的while循环中有location.reload()
。这会导致页面在循环中发生任何有趣的事情之前刷新。在这个特定的代码中,我希望页面看起来无限刷新,因为每次页面刷新时,它都会再次刷新。
答案 1 :(得分:0)
通常这看起来更像是:
var elements = document.getElementsByClassName("message warning");
for (var i = 0; i < elements.length; i++) {
console.log (elements[i]);
}
.getElementsByClassName
返回一个包含类message
和/或warning
的元素数组,您只捕获第一个[0]
。希望有所帮助。