3

我正在尝试让 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();
}

由于中文表意文字,我还使用带有“Big5(繁体)”编码的notepad ++。(也许是一个错误?)

再次感谢!

4

2 回答 2

4

几件事:

  1. 语言编码可能是一个因素,下面会详细介绍。

  2. jQuery.click()无法在各种 Greasemonkey 脚本场景中工作。MouseEvents这个答案中使用。

  3. 警惕 AJAX。这是<input>动态添加或修改的吗?如果是这样,请使用waitForKeyElements之前链接的答案

  4. 由于输入实际上触发了一个javascript函数,而不是试图点击,通常直接调用该函数就足够了。像这样:

    unsafeWindow.getCSVData();
    

    另请参阅GM 文档中的“生成点击事件”

  5. 而不是依赖像CSV保存您的 jQuery 选择器这样的有问题的字符,而是使用更多页面的周围结构(您的问题应该显示)。例如,也许:

    var targSubmit  = $("form.foo div.bar input[type=submit]:eq(2)");
    

    链接到目标页面和/或提供实际的 HTML 以帮助选择选择器。

  6. 正如其他答案中提到的,这是 5 分钟的错误间隔。使用 5 x 60 x 1000,或300000.

  7. 不要使用通用或关键字作为函数或全局变量名。click太通用了,function click(){...可能会window.click根据您的脚本注入而覆盖。

  8. 不要忘记指令@grant


把它们放在一起,这应该可以工作:

// ==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);
}




我无法让 Greasemonkey 脚本使用Big5(traditonal)和包含这些字符。Firefox 在错误控制台中报告“非法字符”。

它可能只是我的测试系统,但请注意 Greasemonkey 脚本必须是有效的 UTF-8。从源代码

error.scriptCharset=Error reading script: All Greasemonkey scripts MUST be encoded with UTF-8.
于 2012-10-18T19:23:59.017 回答
0

setInterval电话绝对是您的基础设施的基础。它设置了一个函数,每n毫秒重复调用一次,所以这正是您想要做的(尽管您想在持续时间内传递 300000 - 5000 是每五秒一次)。

您给出的示例使用 jQuery,并假设所讨论的 HTML 元素将有一个方便的id属性来标识它,而您的标签没有。因此,根据页面的布局以及识别您感兴趣的元素的独特而稳定的方式,您需要使用适当的选择器来指向它。

也许$("[value = 'CSV保存']")取决于这是否足够独特,并且不会随着时间而改变。

选择它后,.click()呼叫将按预期单击它。并且以间隔运行,这将每 5 分钟发生一次(或您指定的任何超时)

于 2012-10-18T09:51:18.510 回答