我正在尝试点击stackoverflow.com侧栏中的第一个收藏链接。
我找到了这个脚本,但问题是页面不断刷新。
有没有办法阻止这种行为?
public function update()
{
$account = $this->input->post('account');
$passwd = $this->input->post('passwd');
$this->model_site->UpdateTable('1', $account, $passwd);
}
答案 0 :(得分:2)
问题在于,当您“单击该按钮”时,会导致加载新页面,这会导致用户脚本再次运行,单击该按钮...并且循环不断重复。
(请注意,由于waitForKeyElements
的性质,每个脚本实例只执行一次。脚本会不断重新启动。)
所以,显然你并不是每次都想点击那个按钮 问题是:“如何确定点击按钮的页面加载以及哪些页面加载?”
然后,您需要将持久逻辑(在页面(重新)加载中存活)添加到您的脚本中以进行区分。
一种粗略的方法是假设如果你在最后一次,例如10秒内点击,你不想再次点击。
以下是Greasemonkey脚本中的逻辑:
// ==UserScript==
// @name _ChromeC
// @match *://stackoverflow.com/*
// @require https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js
// @require https://gist.github.com/raw/2625891/waitForKeyElements.js
// @grant GM_setValue
// @grant GM_getValue
// ==/UserScript==
const delayBetweenClicks = 10000; //-- 10000 = 10 seconds
var oldUnixTime = parseInt (GM_getValue ("Last_redirect", "0"), 10);
console.log ("oldUnixTime: ", oldUnixTime);
waitForKeyElements ("#interestingTags a", clickOnlyOccassionally);
function clickOnlyOccassionally (jNode) {
var currentTime = (new Date() ).getTime ();
// Only click if we haven't done so in a while...
if ( (currentTime - oldUnixTime) > delayBetweenClicks) {
GM_setValue ("Last_redirect", `${currentTime}`); // Must store as string.
var clickEvent = document.createEvent ('MouseEvents');
clickEvent.initEvent ('click', true, true);
jNode[0].dispatchEvent (clickEvent);
}
}