您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Находим страницу протокола по дате
// ==UserScript== // @name HWM_Find_Protocol_Page_By_Date // @namespace Рианти // @description Находим страницу протокола по дате // @include http://www.heroeswm.ru/pl_transfers.php?id=* // @include http://www.heroeswm.ru/pl_warlog.php?id=* // @include http://www.heroeswm.ru/sklad_log.php?id=* // @version 1 // @grant GM_xmlhttpRequest // ==/UserScript== var URL_Template = document.location.href.split('&')[0].split('#')[0] + '&page='; var lookupProcess; function requestPage (url, onloadHandler){ console.log('loading: ', url); try{ GM_xmlhttpRequest({ overrideMimeType: 'text/plain; charset=windows-1251', synchronous: false, url: url, method: "GET", onload: function(response){ document.getElementById('HWM_Find_By_date').innerHTML = 'Страниц обработано: ' + ++lookupProcess.totalPagesLoaded; onloadHandler(new DOMParser().parseFromString(response.responseText, 'text/html').documentElement); } }); } catch (e) { console.log(e); } } function getPageId(dom){ return parseInt(dom.querySelector('center > b > font[color="red"]').innerHTML) - 1; } function getEarliestDateFromPage(dom){ var regexp = /(\d{2}-\d{2}-\d{2} \d{2}:\d{2})/g; var res, temp; while(res = regexp.exec(dom.innerHTML)) temp = res; return getDateFromHWMFormatString(temp[1]); } function findDateOnPage(dom, date){ var regexp = /(\d{2}-\d{2}-\d{2} \d{2}:\d{2})/g; var res; while(res = regexp.exec(dom.querySelector('body > center:nth-child(2) > table:nth-child(2) > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(1)').innerHTML)) if (getDateFromHWMFormatString(res[1]) == date) return 1; return 0; } function getDateFromHWMFormatString(string){ if(string.split(' ').length == 1) string = string + ' 00:00'; var t1 = string.split(' '), t2 = t1[0].split('-'); return new Date('20' + t2[2] + '-' + t2[1] + '-' + t2[0] + 'T' + t1[1] + ':00Z'); } function lookup(){ if (lookupProcess.stopLoading) return; if (lookupProcess.result){ loadResult(lookupProcess.lastPage - 1); } else if(lookupProcess.lastPage == -1){ requestPage (URL_Template + 100000, function(dom){ lookupProcess.lastPage = getPageId(dom); lookup(); }); } else if(lookupProcess.firstPage != lookupProcess.lastPage) { var midPage = Math.floor((lookupProcess.firstPage + lookupProcess.lastPage) / 2); requestPage (URL_Template + midPage, function(dom){ try { var dateOnPage = getEarliestDateFromPage(dom); if (dateOnPage > lookupProcess.lookedDate) { if (lookupProcess.firstPage == getPageId(dom)) lookupProcess.firstPage++; else lookupProcess.firstPage = getPageId(dom); } else if (dateOnPage < lookupProcess.lookedDate) { if (lookupProcess.lastPage == getPageId(dom)) lookupProcess.lastPage--; else lookupProcess.lastPage = getPageId(dom); } else { lookupProcess.lastPage = getPageId(dom); lookupProcess.firstPage = lookupProcess.lastPage } lookup(); } catch (e ){ console.log(e); } }); } else { lookupProcess.lastPage = lookupProcess.firstPage = lookupProcess.lastPage + 1; requestPage (URL_Template + lookupProcess.lastPage, function(dom){ try { if (!findDateOnPage(dom, lookupProcess.lookedDate)){ lookupProcess.result = 1; } lookup(); } catch (e ){ console.log(e); } }); } } function addQuickLink (label, id, action){ try{ var quickLinksTable = document.querySelector('body > center:nth-child(2) > center:nth-child(1)'); if (quickLinksTable) { quickLinksTable.innerHTML = quickLinksTable.innerHTML + ' | <a class="pi" id="' + id + '" href="#">' + label + '</a>'; } else { quickLinksTable = document.querySelector('body > center:nth-child(2) > table > tbody > tr'); quickLinksTable.innerHTML = quickLinksTable.innerHTML + '<td> | <a class="pi" id="' + id + '" href="#">' + label + '</a></td>'; } var elem = document.getElementById(id); elem.onclick = action; } catch (e) { console.log(e); } } addQuickLink ('Поиск по дате', 'HWM_Find_By_date', function(){ var el = document.getElementById('HWM_Find_By_date'); el.innerHTML = 'Страниц обработано: 0'; el.onclick = function(){ el.innerHTML = 'Остановлено'; lookupProcess.stopLoading = 1; }; main(); }); function main(){ lookupProcess = { firstPage: 0, lastPage: -1, result: 0, totalPagesLoaded: 0, stopLoading: 0, lookedDate: getDateFromHWMFormatString(prompt("Введите дату которую нужно найти в протоколе, в формате дд-мм-гг (например 19-04-15):")) }; console.log('performing lookup on date: ' + lookupProcess.lookedDate); lookup(); } function loadResult(pageId){ document.location.href = URL_Template + pageId; }