0

シンプルな「Whois」ゲームページがあり、Greasemonkeyを使用してシンプルな自動応答スクリプトを作成したいと思います。どうすればそれを作ることができますか?

sid画像のに基づいてsrc

<img src="whois_picture.php?yid=123456&sid=3084" />

一致するリンクをクリックする必要があります...

  • の場合sid=3084、回答を選択しますd
  • の場合sid=3023、回答を選択しますa

モックアップ:http ://thedudu.com/auto_select/

主要なターゲットページのHTML:

<div id="whois_guestion">
    <img src="whois_picture.php?yid=123456&sid=3084" />
</div>
<div id="game_options">
    <a href="#" class="game_option">Mickey Mouse</a>
    <input type="hidden" value="a" name="secenekharf" />

    <a href="#" class="game_option">Bugs Bunny</a>
    <input type="hidden" value="b" name="secenekharf" />

    <a href="#" class="game_option">Gofy</a>
    <input type="hidden" value="c" name="secenekharf" />

    <a href="#" class="game_option">Mario</a>
    <input type="hidden" value="d" name="secenekharf" />
</div>
4

1 に答える 1

0
  1. sid次のように、sと回答のオブジェクトを作成します。

    var answerKey   = {
          3084: "d"
        , 3023: "a"
        //etc.
    };
    
  2. 次に、jQueryを使用して正解リンクを選択します。

  3. 最後に、リンクにクリックイベントを送信します。


完全なスクリプトは次のようになります。

// ==UserScript==
// @name     _Auto-answer script
// @include  http://thedudu.com/auto_select/*
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
// @grant    GM_addStyle
// ==/UserScript==
/*- The @grant directive is needed to work around a design change introduced
    in GM 1.0.   It restores the sandbox.
*/

var answerKey   = {
      3084: "d"
    , 3023: "a"
    //etc.
};

setTimeout (clickAnswerIfAny, 222); //-- 222 milliseconds

function clickAnswerIfAny () {
    var questImg    = $("#whois_guestion img");
    var questSid    = questImg.attr ("src").replace (/^.+?\bsid=(\d+).*$/i, "$1");
    var answerVal   = answerKey[questSid];
    if (typeof answerVal != "undefined") {
        console.log ("Ans found...");
        //-- Find the <input> with the answer value.
        var answerInp   = $("#game_options input[value='" + answerVal + "']");
        if (answerInp.length) {
            //-- In this case, the link is the previous sibling element.
            var answerLink  = answerInp.prev ();
            console.log (answerInp, answerLink);
            //-- Click the link.
            console.log ("Clicking...");
            var clickEvent  = document.createEvent ('MouseEvents');
            clickEvent.initEvent ('click', true, true);
            answerLink[0].dispatchEvent (clickEvent);
        }
    }
}


また、この回答を参照してください。

于 2012-10-04T06:36:58.473 に答える