Дешевые выписки, что может быть лучше ?
У Романа Андреевича Карцева есть неплохой монолог про раков вчерашних по 5 руб. и сегодняшних по 3-и. Будем считать, что прошлый пост был про раков по 5 руб. Так как выписка из ЕГРН по 300 руб., хоть и автоматизированная не каждому по карману, если речь идет о массовых запросах.
В этот раз рассмотрим как получить тот же результат, потратив 400 руб. за 100 выписок из ЕГРН. Наша программа будет выполнять нехитрые манипуляции, заходить на сайт, заполнять за нас все необходимые поля при подаче запроса в Росреестр. Как и в прошлый раз мы не будет использовать api Росреестра.
Примерно так это будет выглядеть:
Портал Росреестра предполагает, что при работе с ФГИС вы получите на портале ключ — символьно-цифровую строку. Данный ключ вводится одноразово при работе с ФГИС для входа в рабочую область и содержится в разделе «Мои ключи»:
Будем считать, что ключ вы получили самостоятельно. Процедура его получения не сложная.
Теперь напишем программу, которая автоматизирует подачу запросов.
Начнем с простой программы, которая подаст один запрос в систему.
Запросы в ЕГРН – версия 2.0
Импортируем модули:
import webbrowser,time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import NoSuchElementException
import os
Заходим на сайт ФГИС ЕГРН:
browser = webdriver.Firefox()
browser.implicitly_wait(40)
browser.get ('https://rosreestr.ru/wps/portal/p/cc_present/ir_egrn')
Нас встретит дружелюбное окно для ввода ключа РОсреестра, о котором шла речь выше:
Определяем CSS-селектор окна, куда надо внести ключ, вводим свой ключ и заходим во ФГИС ЕГРН, нажав кнопку «Войти»:
act = browser.find_element_by_css_selector('.v-panel-content > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > input:nth-child(1)')
for i in '---------':
act.send_keys(i)
time.sleep(2)
act = browser.find_element_by_css_selector('.v-panel-content > div:nth-child(1) > div:nth-child(1) > div:nth-child(3) > div:nth-child(1) > input:nth-child(1)')
for i in '----':
act.send_keys(i)
time.sleep(2)
act = browser.find_element_by_css_selector('.v-panel-content > div:nth-child(1) > div:nth-child(1) > div:nth-child(5) > div:nth-child(1) > input:nth-child(1)')
for i in '----':
act.send_keys(i)
time.sleep(2)
act = browser.find_element_by_css_selector('.v-panel-content > div:nth-child(1) > div:nth-child(1) > div:nth-child(7) > div:nth-child(1) > input:nth-child(1)')
for i in '----':
act.send_keys(i)
time.sleep(2)
act = browser.find_element_by_css_selector('.v-panel-content > div:nth-child(1) > div:nth-child(1) > div:nth-child(9) > div:nth-child(1) > input:nth-child(1)')
for i in '--------':
act.send_keys(i)
time.sleep(2)
act = browser.find_element_by_css_selector('.v-button-normalButton > span:nth-child(1) > span:nth-child(1)')
act.click()
time.sleep(2)
Здесь надо вписать в поля с символами "-" части своего ключа, так как программа будет его вносить на сайте частями, перепрыгивая по полям.
Если все отработает успешно, то мы попадем в окно системы:
Так как мы будем искать объекты недвижимости, программа должна нажать соответственно «Поиск объектов недвижимости»:
act = browser.find_element_by_css_selector('.v-gridlayout-margin > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > span:nth-child(1) > span:nth-child(2)')
act.click()
time.sleep(1)
Теперь в соответствующие поля мы введем кадастровый номер и укажем область для поиска. Без внесения данных об области, перейти к следующему шагу нельзя:
act = browser.find_element_by_css_selector('.v-verticallayout-searchFormOuter > div:nth-child(1) > div:nth-child(2) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > input:nth-child(1)')
act.click()
for i in '66:36:2801001:223':
act.send_keys(i)
act = browser.find_element_by_css_selector('.v-filterselect-error > input:nth-child(1)')
act.click()
for i in 'Свердловская область':
act.send_keys(i)
time.sleep(5)
act.send_keys(Keys.ENTER)
act = browser.find_element_by_css_selector('.v-horizontallayout-borderTop > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > span:nth-child(1) > span:nth-child(1)')
act.click()
Наше следующее окно:
Здесь необходимо нажать на сформированный внизу страницы объект, сделаем это:
act = browser.find_element_by_css_selector('.v-table-table')
act.click()
И мы попадаем на финальный шаг, где нас снова встречает капча. Также нам надо нажать на кнопку отправить запрос:
Введем капчу с помощью интерпретатора вручную. Пока такой способ «обхода» капчи используем:
act = browser.find_element_by_css_selector('.v-textfield')
act.click()
i=input("Введите капчу здесь и нажмите ENTER: ")
for a in i:
act.send_keys(a)
time.sleep(1)
act.send_keys(Keys.ENTER)
*То есть программа будет ждать пока пользователь руками введет капчу в окне с программой и нажмет «enter».
И, далее, программа сама отправляет запрос во ФГИС ЕГРН:
act = browser.find_element_by_css_selector('.v-horizontallayout-blockNotTall > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > span:nth-child(1) > span:nth-child(1)')
act.click()
time.sleep(3)
И нажимает на «Продолжить работу»:
Мы успешно подали запрос по одному объекту.
Проверить то, что запрос действительно успешно направлен во ФГИС можно в разделе «Мои заявки», о чем нам и сообщают.
Теперь нам надо запустить программный цикл по всем объектам в таблице excel и… как-то победить капчу. Впрочем, это совсем уже другая история. Хотя подсказка осталась в коде программы, залитой на обменник.
Скачать программу – здесь.
Комментарии (7)
aborouhin
23.07.2019 21:281. regulation.gov.ru/projects?#npa=90942 — минимальный тариф на доступ к ФГИС ЕГРН станет 2,25 млн.? (!) Это за 50 000 выписок, меньше нельзя. Даже для тестирования, никак. Но и без этого рост кратный.
2. regulation.gov.ru/projects?#npa=88067 — любая информационная система, использующая данные из ЕГРН, де факто становится незаконной.
P.S. Безотносительно описанного выше апокалипсиса — у ФГИС ЕГРН же (пока ещё) API есть, зачем парсить сайт и обходить капчу?namata
24.07.2019 07:50Апи требует какого-то нереального криптошифрования без объяснения подробностей...
zoldaten Автор
24.07.2019 14:42На самом деле подробностей там хоть отбавляй. Ранее упоминал этот документ rosreestr.ru/wps/portal/cc_ib_documents?documentId=1521
Очень надеюсь, также, что вышеуказанные тарифы и штраф не пойдут в работу. Хотя, согласитесь, оригинальный метод законодателя снизить нагрузку на сервера Росреестра — все запретить.
puyol_dev2
24.07.2019 08:05Конечно интересно, но полезность этого околонулевая. Через браузер намного удобнее + если дизайн поменяют на сайте росреестра, то скрипт сломается
zoldaten Автор
24.07.2019 14:38Так программа и делает все наглядно, через браузер. Все трудозатраты — вбить капчу и все.
egor_gruzdev
400 руб. = 100 выписок для физ. лица
800 руб. = 100 выписок для юр. лица
zoldaten Автор
все, верно. поправил.