Использование Greasemonkey и jQuery для перехвата данных JSON / AJAX со страницы и их обработки - PullRequest
1 голос
/ 23 мая 2011

Правильно, я частично получил ответ на мой предыдущий вопрос .Но я все еще сталкиваюсь с проблемой указания GM, куда идти и получать данные для помещения в массив ...

На веб-странице http://www.trada.net/p_home.aspx, если я запускаю консоль firebug, я получаюданные из вышеупомянутого вопроса, но он постоянно меняется, обновляя каждую секунду.

Эти данные у меня есть идея, как поместить их в массив, и оттуда я скажу GM, что с ними делать.Я не могу запустить консоль Firebug все время, и я не знаю, как заставить GM получать запросы данных, отправленные сайтом, которые выглядят так: http://www.trada.net/REST_Service/REST_Auction.svc/GetAuctionData?_=1306009003654 - где последняя часть изменяется при каждом обновлении.

В основном Gm будет извлекать данные каждую секунду, проверять, есть ли необходимость делать ставки на каком-либо из аукционов, а затем, если выиграется 1, нажать всплывающее окно, чтобы продолжить.

1 Ответ

1 голос
/ 23 мая 2011

Поскольку целевая страница использует jQuery, вы можете легко подслушивать данные JSON, используя ajaxSuccess().

Тогда возникает проблема с получением данных из области страницы в изолированную программную среду GM ... Это можно сделать, поместив данные в специальный узел страницы.

Оттуда, это просто вопрос использования моего другого (блестяще: D) ответа .

Сложив все это, вы должны начать следующее:

Обновление почти через 4 года: Приведенный ниже код устарел из-за множества изменений в Firefox и Greasemonkey. Я не планирую его переделывать из-за отсутствия интереса, а также потому, что это не лучший подход для большинства задач RL. Для большинства случаев; самым надежным, портативным и надежным методом остается интеллектуальный опрос. См. пример удобной утилиты для этого .

// ==UserScript==
// @name            _Fun with JSON
// @include         http://www.trada.net/*
// @require         http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js
// ==/UserScript==


//--- Create a cell for transmitting the date from page scope to GM scope.
$('body'). prepend ('<div id="LatestJSON_Data"></div>');

var J_DataCell          = $('#LatestJSON_Data');


//--- Evesdrop on the page's AJAX calls and paste the data into our special div.
unsafeWindow.$('body').ajaxSuccess (
    function (event, requestData)
    {
        J_DataCell.text (requestData.responseText);
    }
);


//--- Listen for changes to the special div and parse the data.
J_DataCell.bind ('DOMSubtreeModified', ParseJSON_Data);


function ParseJSON_Data ()
{
    //--- Get the latest data from the special cell and parse it.
    var myJson              = J_DataCell.text ();
    var jsonObj             = $.parseJSON (myJson);

    //--- The JSON should return a 2-D array, named "d".
    var AuctionDataArray    = jsonObj.d;

    //--- Loop over each row in the array.
    $.each (
        AuctionDataArray,
        function (rowIndex, singleAuctionData) {

            //--- Print the 7th column.
            console.log ('Row: ' + (parseInt (rowIndex) + 1) + ' Column: 7  Value: ' + singleAuctionData[6]);
        }
    );
}


//--- Format our special cell with CSS.  Add "visibility: hidden;" or "display: none;", if desired.
GM_addStyle ( (<><![CDATA[
    #LatestJSON_Data
    {
        background:         gold;
        border:             3px ridge #0000DD;
        font-size:          10px;
        margin:             0 2em;
        padding:            1ex 1em;
        width:              94%;
        opacity:            0.8;
        overflow:           hidden;
        z-index:            666;
        position:           absolute;
        color:              black;
    }
]]></>).toString () );


Обратите внимание, что предложение вопроса может нарушать Условия использования сайта и / или сайт может принимать контрмеры. (Они уже запутывают свои JS.)

...