4

私はJSの初心者で、このボタンをクリックしようとしています:

<a class="simplebutton" href="javascript:void(0);">find</a>


このボタンの XPath は:であり、この Fiddle/html/body/div[5]/div/span[2]/aでターゲット ページのスナップショットを確認できます。

これは私が試したものですが、うまくいきません。( http://code.google.com/p/getelementsbyclassname/getElementsByClassNameから取得した関数を使用しています):

document.getElementsByClassName('simplebutton').submit();
4

2 に答える 2

6

これを行う完全なスクリプトを次に示します。:contains() セレクターにjQuery を使用します。

更新:報告された AJAX を考慮してスクリプトを修正しました。

// ==UserScript==
// @name     _Click on a specific link
// @include  http://YOUR_SERVER.COM/YOUR_PATH/*
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
// @require  https://gist.github.com/raw/2625891/waitForKeyElements.js
// @grant    GM_addStyle
// ==/UserScript==
/*- The @grant directive is needed to work around a major design change
    introduced in GM 1.0.
    It restores the sandbox.
*/

//--- Note that contains() is CASE-SENSITIVE.
waitForKeyElements ("a.simplebutton:contains('follow')", clickOnFollowButton);

function clickOnFollowButton (jNode) {
    var clickEvent  = document.createEvent ('MouseEvents');
    clickEvent.initEvent ('click', true, true);
    jNode[0].dispatchEvent (clickEvent);
}

contains()注:用語が誤ってトリガーされる場合があります。たとえば、<a class="simplebutton">unfollow</a>ボタンがある場合。
誤クリックを防ぐ方法の 1 つを次に示します。clickOnFollowButton関数を次のように変更します。

function clickOnFollowButton (jNode) {
    if ( ! /^\s*follow\s*$/i.test (jNode.text() ) ) {
        /*--- If the node contains anything but "follow" (surrounded by 
            optional whitespace), don't click it.
        */
        return false;
    }
    var clickEvent  = document.createEvent ('MouseEvents');
    clickEvent.initEvent ('click', true, true);
    jNode[0].dispatchEvent (clickEvent);
}

いくつかのこと:

  1. getElementsByClassName()要素のリストまたは「コレクション」を返します。.submit()そのような結果だけではありません。.submit()は単一要素用です。

  2. これはリンクなので機能し.submit()ません。.click()多くの場合は機能しますが、リンクがイベントリスナーによって強化されている場合 (この質問の場合に該当する必要があります)、機能しないことがよくあります。

    上記のclickEventコードは、ほとんどすべての場合に機能します。

  3. あなたが指定したページ コードにはリンクがなくclass="simplebutton"、テキストにはfind!が含まれています。

  4. どのブラウザを使用していますか? どのグリースモンキーのバージョン? で、OSは?

  5. 適切な JavaScript 参照と適切な DOM 参照を見つけて使用します。質問に記載されている参照は、標準ではなく、スクリプトに含まれていないライブラリに関するものです (ほとんどの場合)。

  6. このような場合は、XPATH よりもはるかに簡単な CSS パスを使用してください。Firebug は、特定の要素の CSS パスを表示します。
    jQuery は CSS セレクター/パスを使用しますdocument.querySelector()(非 jQuery アプローチ)。

于 2012-09-04T04:32:06.053 に答える
2

clickではなくメソッドを使用する必要がありますsubmitsubmitフォームを送信したい場合に使用できます。

getElementsByClassNameも要素の配列を返します。必要なものを取得してから呼び出す必要がありますclick

document.getElementsByClassName('simplebutton')[0].click();​

http://jsfiddle.net/kLDde/

于 2012-09-03T18:47:24.240 に答える