我正在尝试使用Greasemonkey脚本每XY秒单击一个特定按钮。 我想点击的按钮有这个HTML:
<input value="CSV保存" onclick="getCSVData()" type="submit">
我搜索了一个解决方案并找到了:
setInterval(click, 5000);
function click()
{
$("#button id").click();
}
但这里的“按钮ID”是什么?
该脚本基本上应该每隔5分钟下载一个的CSV文件。
修改:我尝试过的最新代码:
// ==UserScript==
// @name autoclick
// @namespace yy
// @description yy
// @include http://...
// @version 1
// ==/UserScript==
setInterval(click, 1000);
function click()
{
$("[value = 'CSV保存']").click();
}
由于中国的象形文字,我还使用了notepad ++和“Big5(traditonal)”编码。 (也许是个错误?)
再次感谢!
答案 0 :(得分:4)
有几件事:
语言编码可能是一个因素,更多信息如下。
jQuery .click()
无法在各种Greasemonkey脚本方案中运行。使用MouseEvents
中的<input>
。
警惕AJAX。是waitForKeyElements
是动态添加还是修改的?如果是,请使用this answer中的unsafeWindow.getCSVData();
。
由于输入实际上触发了javascript函数,而不是尝试单击,因此通常只需直接调用该函数即可。像这样:
CSV保存
而是依赖于像var targSubmit = $("form.foo div.bar input[type=submit]:eq(2)");
这样的有问题的字符作为jQuery选择器,使用更多的页面周围结构(您的问题应该显示)。例如,也许:
300000
链接到目标页面和/或提供实际的HTML以帮助选择选择器。
如其他答案所述,这是5分钟的错误间隔。使用5 x 60 x 1000或click
。
不要将common或keywords用作函数或全局变量名。 function click(){...
过于通用,window.click
可能会覆盖// ==UserScript==
// @name autoclick
// @namespace yy
// @description yy
// @include http://...
// @version 1
// @grant none
// ==/UserScript==
setInterval (clickSpecialSubmit, 5 * 60 * 1000); // 5 minutes
function clickSpecialSubmit () {
unsafeWindow.getCSVData ();
}
,具体取决于您的脚本注入。
总而言之,这应该有效:
clickSpecialSubmit
或者可能用以下内容替换function clickSpecialSubmit () {
// THIS NEXT LINE MUST BE TUNED TO MATCH YOUR ACTUAL PAGE!
var targSubmit = $("form.foo div.bar input[type=submit]:eq(2)");
var clickEvent = document.createEvent ('MouseEvents');
clickEvent.initEvent ('click', true, true);
targSubmit[0].dispatchEvent (clickEvent);
}
:
Big5(traditonal)
我无法使用error.scriptCharset=Error reading script: All Greasemonkey scripts MUST be encoded with UTF-8.
生成Greasemonkey脚本并包含这些字符。 Firefox在错误控制台中报告“非法字符”。
它可能只是我的测试系统,但请注意Greasemonkey脚本必须是有效的UTF-8。来自the @grant
directive:
{{1}}
答案 1 :(得分:0)
setInterval
电话绝对是您基础设施的基础。它设置了一个每隔 n 毫秒重复调用的函数,所以这正是你想要做的事情(虽然你希望在持续时间内传递300000 - 每五个传递5000个秒)。
您给出的示例使用了jQuery,并假设相关的HTML元素将有一个方便的id
属性来标识它,而您的标记却没有。因此,根据页面的布局以及识别您感兴趣的元素的独特而稳定的方式,您需要使用an appropriate selector指向它。
可能$("[value = 'CSV保存']")
取决于这是否足够独特,并且不会随着时间而改变。
选择后,.click()
来电会按预期点击它。如果在一个间隔内运行,这将每5分钟发生一次(或者你指定的任何超时)