Использование Greasemonkey и jQuery для перехвата данных JSON/AJAX со страницы и их обработки
Правильно, я частично получил ответ на свой предыдущий вопрос. Но я все еще сталкиваюсь с проблемой указания 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 ответ
Поскольку целевая страница использует 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.)