并非首次与Rosreestr门户网站相识
任何律师都曾向Rosreestr(联邦国家注册,地籍和制图服务)提出请求。 何时需要运行到Rosreestr分支并在纸上提出请求的时代已经过去了。 Rosreestr已启动了多个在线服务,您可以在不离开家的情况下使用它们。 这些服务包括请求摘录自《房地产统一州登记簿》。 官方
网站上手。
每个已经设法与该网站合作的人都知道,要从USRN接收摘录,其中不仅包含有关该设施的一般特征的信息,而且还包含有关该设施的版权持有人的信息,有必要进入Rosreestr个人帐户。
也许这是获取一个或多个语句的便捷方法。 但是,如果需要一包USRN提取物怎么办? 假设您使用不动产或拥有多个物件,这些物件的总数超过10个。通常,您每年需要至少从USRN提取1次,以便能够在法律层面上迅速对联邦登记册中发生的不良变化(如果您除外)做出回应意志。
您可以通过个人帐户手动提交请求,也可以使用Rosreestr api。 第一个选择是非常累人。 除了Rosreestra在线服务本身在持续挂起的情况下运行非常缓慢的事实之外,还邀请普通用户在提交每个请求时提交对象的字段库。 例如,请求一块地块:
也就是说,找出有关对象的信息并从中获取物理信息。 这个人必须已经知道物体的所有特征! 并且每次您请求信息时,都必须填写所有字段。 该说的话很不方便。 至少感谢您提供的土地面积可以平方毫米为单位。
从USRN获取摘录的第二种选择是Rosreestr api。 Api是一组程序指令,根据这些指令,您的软件部分和Rosreestr的一部分将在没有您参与的情况下交换信息。 如果一切正常,这很方便。 一个可以完成。
但是,如果您查看Rosreestr解释如何实现便捷api的页面,您会感到不安。
带有说明的文档发布在此处
-rosreestr.ru/wps/portal/cc_ib_documents?documentId=1521它只有19页,但是用技术语言编写,这表明我们离不开数字签名。 通常,很长一段时间以来,这是令人费解和不便的。 让我们走更短的路。
在使用Rosreestr的挂机站点时,我们需要对Python工具有一定的了解。 至少在此服务Rosreestra开发的当前阶段,最适合与该站点合作的工具。
当页面缓慢加载到浏览器中时,该页面上的元素可能会以不同的时间间隔出现(或根本不出现)。 这使查找元素变得困难;会定期引发ElementNotVisibleException或NoSuchElement异常。 使用期望,我们可以解决这个问题。
等待为执行的操作之间提供了一定的时间间隔-搜索元素或对该元素进行任何其他操作。
由于我们在工作中使用了硒模块,因此我们将使用它提供的功能。 硒提供两种类型的期望-隐性和显性。
显式等待是用于确定为了进一步执行代码而必须发生的条件的代码。 之前我们使用time.sleep()来设置确切的超时时间。 但是此选项并不完全成功。 不利的一面是,如果您不猜测停机时间(睡眠),程序将崩溃。 有更方便的方法可以帮助您编写期望的代码。
我们正在编写一个与在线Rosreestr合作的程序
让我们继续我们的程序。
其实质是,在进入Rosreestr网站时,她通过自然人的个人帐户登录。 人员,并进一步开始独立提交USRN摘录要求。 我们的程序将接收来自Excel文件的请求数据(没有它的地方)。 一个警告。 提交请求时,Rosreestr网站上的字段包含对象的地址。 由于Rosreestr中的地址是以特殊方式打开的,因此会遇到困难。 在程序中必须考虑到这一点。
让我们开始吧。
在开始之前,请准备一个具有以下格式的源数据的excel表:
版权持有人的姓名名称-财产的地址-财产地籍编号-区域。 根据要求,我们将需要表格中的所有字段,“编号”和“版权所有者名称”除外。
现在创建一个新的python文件-rosreestr.py。 然后我们导入必要的模块:
import webbrowser,time from selenium import webdriver import csv from selenium.webdriver.common.keys import Keys from selenium.common.exceptions import NoSuchElementException import openpyxl
打开包含房地产数据的excel文件:
wb = openpyxl.load_workbook('activ2.xlsx') sheet=wb.get_active_sheet()
我们转到Rosreestr网站。 由于网站本身的入口可能已经延迟,因此您需要设定一个期望值:
browser = webdriver.Firefox() browser.get ('https://rosreestr.ru/') time.sleep(5)
在这里您可以只剩下time.sleep 5秒。 但是更好的是,使用期望,这样写:
browser.implicitly_wait(40)
现在,我们需要等待该按钮出现在您的个人帐户中,然后单击它:
act = browser.find_element_by_css_selector('#top_panel > a:nth-child(4)') act.click()
由于您的个人帐户注册是通过State Services门户网站进行的,因此该网站会重定向到State Services,而且这种情况也会延迟,请考虑以下几点:
browser.implicitly_wait(40) act = browser.find_element_by_id('mobileOrEmail') act.click()
现在,该程序将通过输入用户名和密码(而不是用户名和密码,输入您的数据)在国家服务局的网站上为我们授权:
i=0 for i in '@mail.ru': act.send_keys(i) time.sleep (0.1) act = browser.find_element_by_id('password') act.click() i=0 for i in '': act.send_keys(i) time.sleep (0.1) act = browser.find_element_by_id('loginByPwdButton') act.click()
在程序按下回车按钮之后,授权之前可能会出现以下窗口:
在这里,您需要选择CSS选择器nat。 面孔。 还记得怎么做吗? 右键单击图标私人...-探索元素:
并复制CSS选择器:
我们将其添加到我们的程序中:
act = browser.find_element_by_css_selector('tr.not-border:nth-child(1) > td:nth-child(2) > div:nth-child(2)') act.click()
现在我们已经登录,浏览器将把我们从国家服务网站重定向到Rosreestr网站。 在这里,我们的程序应点击“请求获得有关房地产和(或)其所有者的信息”项:
我们将输入适当的代码:
act = browser.find_element_by_css_selector('div.services-item:nth-child(5) > div:nth-child(1) > span:nth-child(2)') act.click() act = browser.find_element_by_css_selector('div.services-item:nth-child(5) > table:nth-child(2) > tbody:nth-child(1) > tr:nth-child(2) > td:nth-child(2) > a:nth-child(1)') act.click()
我们到达了提交请求的开始页面,我们可以从中完成5个步骤:
要转到第二步,您需要检查页面并单击下一步。 用代码表示:
act = browser.find_element_by_class_name('PGU-LabelIcon') act.click() act = browser.find_element_by_css_selector('#__nextStep') act.click()
我们位于Rosreestr网站的第二步。 在这里,必须填写申请人的字段类别,所有其他数据都会自动从公共服务中提取。 然后点击“下一步”:
在代码中,它看起来像这样:
act = browser.find_element_by_css_selector('#Form7\.step2\.specialDeclarantKind\.code > div:nth-child(2) > div:nth-child(1)') act.click() act = browser.find_element_by_css_selector('.opened > div:nth-child(3) > div:nth-child(1) > div:nth-child(2)') act.click() act = browser.find_element_by_css_selector('#__nextStep') act.click()
如果我们运行程序,则很可能会出现错误:
我们按以下方式处理此错误:
try: act = browser.find_element_by_class_name('PGU-LabelIcon') except: browser.refresh() time.sleep (40) act = browser.find_element_by_class_name('PGU-LabelIcon')
现在,如果出现无法加载页面的情况,程序将更新浏览器,然后再次尝试单击所需的图标。 不幸的是,期望在这里行不通,您必须使用经过验证的旧时间。sleep()。
我们处于第三步,这是最费力的:
必须使用“ *”符号填写所有字段。
让我们从输入对象开始:
n=1 i=sheet['B'+str(n)].value
在这里,我们从excel中的一个单元格开始,在该单元格中写入了对象的名称。 例如,如果在单元格中输入了“土地图”,则程序将使用css选择器选择适当的项目。 一切也与单元格中的其他种类的对象一起发生-程序对其进行处理。
接下来,我们单击对象的地籍编号,语句类型和地址的css选择器,这些选择器对于所有对象都是相同的:
现在您需要驱动地址:
for i in sheet['D'+str(n)].value: act.send_keys(i) time.sleep (0.1) print(sheet['D'+str(n)].value) i=input(" eneter enter: ") act = browser.find_element_by_css_selector('a.button-custom:nth-child(2)') act.click()
该地址取自excel表的C列。 恢复用户操作的形式存在暂停。 这是由于Rosreestr中的地址可能与您所拥有的地址不同,并且很可能是这样。 因此,该程序从站点上的表中输入地址,将期望用户在解释器中按Enter键以继续操作。
Rosreestr门户上的其余步骤是最不重要的,该程序只需单击“ Next”门户上的按钮,然后将请求发送到Rosreestr:
在程序末尾,添加浏览器更新:
browser.refresh() time.sleep (2)
如果程序正常运行,则只剩下开始在我们的excel文件中包含对象的所有单元格之间进行循环。 为此,请在
i=sheet['B'+str(n)].value
之前的程序段开始处添加
i=sheet['B'+str(n)].value
while True: if n<36:
最后:
n+=1
,其中n是excel表中的不动产数量。
该程序的全文可以在
这里查看。