Скрипт добавляет возможность сбора кадастровых номеров помещений с ЛК Росреестра без авторизации и пагинации. Кнопка “быстрый поиск” осуществляет именно быстрый поиск по адресу и используется чаще всего для выявления эталонного значения адреса. Кнопка “полный поиск” производит определенное количество запросов к Росреестру что в свою очередь позволяет получить более 100 объектов кадастрового учета поисковой выдаче. В таблицу не попадают погашенные кадастровые номера, только актуальные и уникальные значения номеров.
// ==UserScript== // @name Поиск КН Росреестр // @namespace http://tampermonkey.net/ // @version 0.1 // @description Скрипт добавляет возможность сбора кадастровых номеров помещений с ЛК Росреестра без авторизации и пагинации. Кнопка "быстрый поиск" осуществляет именно быстрый поиск по адресу и используется чаще всего для выявления эталонного значения адреса. Кнопка "полный поиск" производит определенное количество запросов к Росреестру что в свою очередь позволяет получить более 100 объектов кадастрового учета поисковой выдаче. В таблицу не попадают погашенные кадастровые номера, только актуальные и уникальные значения номеров. // @require https://code.jquery.com/jquery-3.7.1.min.js // @author besfamilnij // @match https://lk.rosreestr.ru/eservices/real-estate-objects-online // @icon https://www.google.com/s2/favicons?domain=rosreestr.ru // @grant none // ==/UserScript== var data = []; $(document).ready(function(){ $('head').append('<style>#cad-cus-table{text-align: left;font-size: 14px;width: 100%;} #cad-cus-table thead tr{background: #d3d3d3;} #cad-cus-table td,#cad-cus-table th{padding: 3px 0px 7px 3px;border-bottom: 1px solid #000;}</style>'); setTimeout(()=>{ $('#main-page-wrapper').after('<div id="cad-cus" style="padding: 30px 150px;background: #f1f1f1;">'+ '<input id="cad-cus-text" style="display: inline-block;width: 60%;height: 50px;" class="realestateobjects-wrapper__option_input rros-ui-lib-input rros-ui-lib-block--default rros-ui-lib-input--icon-left" placeholder="Введите адрес дома..."> '+ '<button style="display: inline-block;" class="rros-ui-lib-button rros-ui-lib-button--primary" id="cad-cus-start">Полный поиск</button>'+ '<button style="display: inline-block;margin-left: 20px;min-width: 100px;" class="rros-ui-lib-button rros-ui-lib-button--primary" id="cad-cus-faststart">Быстрый поиск</button>'+ '<div id="cad-cus-info" style="width: 100%;height: 50px;opacity:0;background: #69e069;padding: 10px;margin: 10px 0px;">Инфо</div>'+ '<button id="del-non-mod" style="height: 30px;width: 400px;">Удалить значения не соответствующие эталонному в поиске</button><button id="copy-table" style="float: right;width: 315px;height: 30px;">Скопировать данные таблицы в буфер обмена</button>'+ '<span id="row-counter" style="opacity:0;display: block;text-align: center;">Строк в таблице: 123</span>'+ '<table id="cad-cus-table"><thead></thead><tbody></tbody></table>'+ '<div>'); }, 1300); }); $(document).on('click', '#cad-cus-start', function(){ data = []; let address = $('#cad-cus-text').val().trim(); if(address.length > 10){ let counter = prompt('Укажите пожалуйста приблизительное количество квартир в доме. От этого числа зависит результативность поиска.') * 1; if(isFinite(counter) && counter > 0){ getAllReq(address, Math.ceil(counter / 1010 * 60)); }else{ alert('Значение должно быть числовым, повторите попытку.'); } }else{ $('#cad-cus-start').attr('disabled', false); } }); $(document).on('click', '#cad-cus-faststart', function(){ data = []; $('#cad-cus-faststart').attr('disabled', true); let address = $('#cad-cus-text').val().trim(); if(address.length > 10){ getReq(address); $('#cad-cus-faststart').attr('disabled', false); }else{ $('#cad-cus-faststart').attr('disabled', false); } }); $(document).on('click', '#del-non-mod', function(){ delNonMod(); }); $(document).on('click', '#copy-table', function(){ copyTable(); }); function getReq(str){ let req = new XMLHttpRequest(); let url = 'https://lk.rosreestr.ru/account-back/address/search?term=' + str + '&objType=002001003000'; req.open("GET", url, true); req.setRequestHeader('Accept', 'application/json, text/plain, */*'); req.addEventListener("load", function(e) { data = data.concat(JSON.parse(this.response)); renderData(data); }, false); req.send(); } function getAllReq(str, replays){ $('#cad-cus-info').text('Ожидайте завершения работы скрипта, это займет примерно ' + (replays * 1.2 / 60).toFixed(2) + ' минуты'); $('#cad-cus-start').attr('disabled', true); $('#cad-cus-faststart').attr('disabled', true); $('#cad-cus-info').css({'opacity':'1'}); for(let i=0; i<replays; i++){ setTimeout(()=>{ let req = new XMLHttpRequest(); let url = 'https://lk.rosreestr.ru/account-back/address/search?term=' + str + '&objType=002001003000'; req.open("GET", url, true); req.setRequestHeader('Accept', 'application/json, text/plain, */*'); req.addEventListener("load", function(e) { if(IsJsonString(this.response)){ data = data.concat(JSON.parse(this.response)); } if(i == replays-1){ renderData(data); $('#cad-cus-info').text('Работа скрипта завершена'); $('#cad-cus-start').attr('disabled', false); $('#cad-cus-faststart').attr('disabled', false); setTimeout(()=>{ $('#cad-cus-info').text(); $('#cad-cus-info').css({'opacity':'0'}); }, 3000); } }, false); req.send(); }, 1010 * i); } } function renderData(d){ d = uni(d); let tableHead = '<tr><th>Номер</th><th>Адрес</th><th>Тип</th></tr>'; let tableBody = ''; let type = ''; for(let i=0; i<d.length;i++){ if(d[i].actual !== false){ switch(d[i].type) { case 'FLAT': d[i].type = 'Помещение'; break; case 'OKS': d[i].type = 'Сооружение'; break; case 'PARCEL': d[i].type = 'Участок'; break; default: d[i].type = d[i].type; break; } tableBody += '<tr><td>' + d[i].cadnum + '</td><td>' + d[i].full_name + '</td><td>' + d[i].type + '</td></tr>'; } } $('#cad-cus-table thead').empty().append(tableHead); $('#cad-cus-table tbody').empty().append(tableBody); rowCount(); } function uni(obj){ let uni = data.reduce((o, i) => { if (!o.find(v => v.cadnum == i.cadnum)) { o.push(i); } return o; }, []); return uni; } function IsJsonString(str) { try { JSON.parse(str); } catch (e) { return false; } return true; } function delNonMod(){ let model = $('#cad-cus-text').val(); let rows = $('#cad-cus-table tbody tr'); for(let i=0; i<rows.length;i++){ if(!$(rows[i]).html().includes(model)){ $(rows[i]).remove(); } } $('#del-non-mod').text('Таблица очищена от не эталонных значений!'); setTimeout(()=>{ $('#del-non-mod').text('Удалить значения не соответствующие эталонному в поиске'); }, 1500); rowCount(); } function copyTable(){ let htmlcode = '<table><tbody>' + $('#cad-cus-table tbody').html() + '</tbody></table>'; let blob = new Blob([htmlcode], { type: "text/html" }); navigator.clipboard.write([new ClipboardItem({ [blob.type]: blob })]); $('#copy-table').text('Данные таблицы скопированы!'); setTimeout(()=>{ $('#copy-table').text('Скопировать данные таблицы в буфер обмена'); }, 1500); } function rowCount(){ let rows = $('#cad-cus-table tbody tr'); $('#row-counter').text('Строк в таблице: ' + rows.length); $('#row-counter').css({'opacity':'1'}); }
2 комментария. Оставить новый
Спасибо за Р(з)аботу ! Классно, что есть такие полезные фичи в открытом доступе)
Благодарю за оценку, рад что скрипт приносит пользу.