これを行う完全なスクリプトを次に示します。: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);
}
いくつかのこと:
getElementsByClassName()
要素のリストまたは「コレクション」を返します。.submit()
そのような結果だけではありません。.submit()
は単一要素用です。
これはリンクなので機能し.submit()
ません。.click()
多くの場合は機能しますが、リンクがイベントリスナーによって強化されている場合 (この質問の場合に該当する必要があります)、機能しないことがよくあります。
上記のclickEvent
コードは、ほとんどすべての場合に機能します。
あなたが指定したページ コードにはリンクがなくclass="simplebutton"
、テキストにはfind
!が含まれています。
どのブラウザを使用していますか? どのグリースモンキーのバージョン? で、OSは?
適切な JavaScript 参照と適切な DOM 参照を見つけて使用します。質問に記載されている参照は、標準ではなく、スクリプトに含まれていないライブラリに関するものです (ほとんどの場合)。
このような場合は、XPATH よりもはるかに簡単な CSS パスを使用してください。Firebug は、特定の要素の CSS パスを表示します。
jQuery は CSS セレクター/パスを使用しますdocument.querySelector()
(非 jQuery アプローチ)。