3

XY秒ごとに特定のボタンをクリックするGreasemonkeyスクリプトを取得しようとしています。クリックしたいボタンの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(traditonal)」コーディングで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. 関数名またはグローバル変数名としてcommonまたはkeywordsを使用しないでください。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);
}




Big5(traditonal)これらの文字を使用して含むGreasemonkeyスクリプトを機能させることができません。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は5ごとです)。

与えた例ではjQueryを使用しており、問題のHTML要素にはidそれを識別する便利な属性がありますが、タグにはありません。したがって、ページのレイアウトと、関心のある要素を識別するための独自の安定した方法に応じて、適切なセレクターを使用してその要素を指す必要があります。

たぶん$("[value = 'CSV保存']")、これが十分にユニークであり、時間の経過とともに変化しないかどうかに依存します。

選択すると、.click()呼び出しは期待どおりにクリックします。そして、これが一定の間隔で実行されると、これは5分ごと(または指定したタイムアウト)に発生します

于 2012-10-18T09:51:18.510 に答える