Greasemonkey脚本自动选择并单击值/选择器中包含非英文字符的特定按钮?

时间:2012-10-18 09:46:43

标签: javascript firefox character-encoding greasemonkey

我正在尝试使用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)”编码。 (也许是个错误?)

再次感谢!

2 个答案:

答案 0 :(得分:4)

有几件事:

  1. 语言编码可能是一个因素,更多信息如下。

  2. jQuery .click()无法在各种Greasemonkey脚本方案中运行。使用MouseEvents中的<input>

  3. 警惕AJAX。是waitForKeyElements是动态添加还是修改的?如果是,请使用this answer中的unsafeWindow.getCSVData();

  4. 由于输入实际上触发了javascript函数,而不是尝试单击,因此通常只需直接调用该函数即可。像这样:

    CSV保存

    另见the previously linked answer

  5. 而是依赖于像var targSubmit = $("form.foo div.bar input[type=submit]:eq(2)"); 这样的有问题的字符作为jQuery选择器,使用更多的页面周围结构(您的问题应该显示)。例如,也许:

    300000

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

  6. 如其他答案所述,这是5分钟的错误间隔。使用5 x 60 x 1000或click

  7. 不要将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 (); } ,具体取决于您的脚本注入。

  8. 不要忘记"Generate Click Events" in the GM docs


  9. 总而言之,这应该有效:

    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分钟发生一次(或者你指定的任何超时)