الحصول على بيان USRN من Rosreestr باستخدام الثعبان ، تجاوز API

ليس التعارف الأول مع بوابة Rosreestr


قدم أي محام طلبًا إلى Rosreestr (الخدمة الفيدرالية لتسجيل الولاية ، السجل العقاري ورسم الخرائط). الأوقات التي كان فيها طلبًا كان ضروريًا للهرب إلى فرع روسريستر وتقديم طلب على الورق هي شيء من الماضي. أطلقت Rosreestr العديد من الخدمات عبر الإنترنت التي يمكنك استخدامها دون مغادرة منزلك. تتضمن هذه الخدمات طلبًا لاستخراج من سجل الدولة الموحد للعقارات. الموقع الرسمي للبدء.

يعلم كل من تمكن بالفعل من العمل مع الموقع أنه من أجل الحصول على مقتطف من USRN ، والذي سيحتوي على معلومات ليس فقط حول الخصائص العامة للمنشأة ، بل وأيضًا حول صاحب حقوق الطبع والنشر لهذا المرفق ، من الضروري الانتقال إلى حساب Rosreestr الشخصي.

ربما هذه طريقة مناسبة للحصول على عبارة واحدة أو أكثر. ومع ذلك ، ماذا تفعل إذا كنت بحاجة إلى حزمة من مقتطفات من USRN؟ افترض أنك تعمل في مجال العقارات أو تملك عددًا من الأشياء ، إجمالي عددها يزيد عن 10. وكقاعدة عامة ، يجب أن تتلقى مقتطفًا من USRN مرة واحدة على الأقل سنويًا حتى تتمكن من الاستجابة السريعة في الطائرة القانونية للتغيرات غير المرغوب فيها في السجل الفيدرالي في حالة حدوثها بالإضافة إلى رقمك الارادة


يمكنك إرسال الطلبات يدويًا من خلال حسابك الشخصي ، أو يمكنك استخدام Rosreestr api. الخيار الأول متعب للغاية. بالإضافة إلى حقيقة أن خدمة Rosreestra عبر الإنترنت نفسها تعمل ببطء شديد مع تعليق مستمر ، فإن المستخدم العادي مدعو أيضًا إلى إرسال ترسانة من الحقول للعنصر عند إرسال كل طلب. على سبيل المثال ، طلب قطعة أرض:


وهذا هو ، لمعرفة المعلومات حول الكائن والحصول على مقتطف منه ، المادية. يجب أن يعرف الشخص بالفعل كل خصائص الكائن! وفي كل مرة تطلب فيها المعلومات ، يجب عليك ملء جميع الحقول. ما أقوله غير مريح للغاية. شكرًا لك على الأقل على أن الأرض يمكن قياسها بالمليمتر المربع.

الخيار الثاني للحصول على مقتطفات من USRN هو Rosreestr api. Api عبارة عن مجموعة من إرشادات البرنامج ، والتي بموجبها يتبادل جزء البرنامج وجزء من Rosreestr المعلومات دون مشاركتك. شيء مناسب إذا كان كل شيء يعمل بشكل صحيح. ويمكن للمرء أن ينتهي.

ومع ذلك ، إذا نظرت إلى الصفحة حيث يشرح Rosreestr كيفية تطبيق واجهة برمجة تطبيقات مريحة ، فإنك تشعر بعدم الارتياح.

يتم نشر مستند مع الوصف هنا - 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) 

هنا يمكنك ترك الوقت فقط. النوم 5 ثوان. لكن الأفضل ، باستخدام التوقعات ، اكتب مثل هذا:

 browser.implicitly_wait(40) 

نحتاج الآن إلى انتظار ظهور الزر في حسابك الشخصي والنقر عليه:

 act = browser.find_element_by_css_selector('#top_panel > a:nth-child(4)') act.click() 

نظرًا لأن التسجيل في حسابك الشخصي يتم من خلال بوابة خدمات الدولة ، فإن الموقع يعيد التوجيه إلى خدمات الدولة وهذا يحدث أيضًا مع تأخير ، ضع في اعتبارك ما يلي:

 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 محدد. شخص. تذكر كيف تفعل ذلك؟ انقر بزر الماوس الأيمن على أيقونة شخص عادي ... - استكشف العنصر:



وانسخ محدد 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') 

الآن ، إذا نشأ موقف لا يتم فيه تحميل الصفحة ، فسيقوم البرنامج بتحديث المتصفح وإعادة المحاولة للنقر على الأيقونة المطلوبة. لسوء الحظ ، لا تعمل التوقعات هنا ، وعليك استخدام الوقت القديم الثابت. النوم ().

نحن في الخطوة الثالثة وهي الأكثر شاقة:



من الضروري ملء جميع الحقول بعلامة "*".

لنبدأ بإدخال الكائن:

 n=1 i=sheet['B'+str(n)].value #i=input(". 1- .2-.3-.4-.5- : ") if i==' ': #1- act = browser.find_element_by_css_selector('#Form7\.step3\.objectsList\.panel1180\.objectTypeCode > 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('#Form7\.step3\.objectsList\.panel1180\.area > div:nth-child(1) > div:nth-child(4) > div:nth-child(1) > div:nth-child(2) > input:nth-child(1)') act.click() for i in str(sheet['E'+str(n)].value): act.send_keys(i) time.sleep (0.1) act = browser.find_element_by_css_selector('#Form7\.step3\.objectsList\.panel1180\.area\.unit > 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() elif i=='': #2- act = browser.find_element_by_css_selector('#Form7\.step3\.objectsList\.panel1180\.objectTypeCode > 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(3)') act.click() act = browser.find_element_by_css_selector('#Form7\.step3\.objectsList\.panel1180\.objectPurposeCode > 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() elif i=='': #3- act = browser.find_element_by_css_selector('#Form7\.step3\.objectsList\.panel1180\.objectTypeCode > 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(4)') act.click() act = browser.find_element_by_css_selector('#Form7\.step3\.objectsList\.panel1180\.roomPurposeCode > 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(3)') act.click() elif i=='': #4- act = browser.find_element_by_css_selector('#Form7\.step3\.objectsList\.panel1180\.objectTypeCode > 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(5)') act.click() elif i==' ': #5-  act = browser.find_element_by_css_selector('#Form7\.step3\.objectsList\.panel1180\.objectTypeCode > 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(6)') act.click() 

هنا نبدأ مع خلية في التفوق ، حيث لدينا اسم الكائن مكتوب. إذا تم ، على سبيل المثال ، إدخال "قطعة الأرض" في الخلية ، فسيحدد البرنامج العنصر المناسب باستخدام محدد css. يحدث كل شيء أيضًا مع أنواع أخرى من الكائنات في الخلية - يقوم البرنامج بمعالجتها.

بعد ذلك ، نضغط على محددات css لرقم المسطرة ونوع البيان وعنوان الكائنات ، وهذه المحددات هي نفسها لجميع الكائنات:

 #  -   excel  act = browser.find_element_by_css_selector('#Form7\.step3\.objectsList\.panel1180 > div:nth-child(1) > div:nth-child(4) > div:nth-child(6) > div:nth-child(2) > input:nth-child(1)') act.click() for i in sheet['C'+str(n)].value: act.send_keys(i) time.sleep (0.1) time.sleep(2) #  act = browser.find_element_by_css_selector('#Form7\.step3\.extractDataRequestType1 > 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('#Form7\.step3\.objectsList\.panel1180\.addressesList\[0\]\.address > div:nth-child(2) > div:nth-child(2) > a:nth-child(1) > span:nth-child(1)') act.click() act = browser.find_element_by_css_selector('.fias_input_search') act.click() 

أنت الآن بحاجة إلى قيادة العنوان:

 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() 

العنوان مأخوذ من العمود C في جدول excel. هناك توقف مؤقت في شكل إحياء لإجراءات المستخدم. هذا يرجع إلى حقيقة أن العنوان في Rosreestr قد يختلف عن العنوان الذي لديك وعلى الأرجح هو. لذلك ، فإن البرنامج ، الذي يدخل العنوان من الجدول في الموقع ، يتوقع من المستخدم أن يضغط على إدخال في المترجم الشفهي لمواصلة المزيد.

الخطوات المتبقية على بوابة Rosreestr هي الأقل بروزًا ، حيث ينقر البرنامج ببساطة على الأزرار الموجودة على بوابة "Next" ويرسل الطلب إلى Rosreestr:

 #  act = browser.find_element_by_css_selector('#__nextStep > span:nth-child(1)') act.click() #   ,     act = browser.find_element_by_css_selector('#__nextStep > span:nth-child(1)') act.click() time.sleep (1) # ,    act = browser.find_element_by_css_selector('#__nextStep > span:nth-child(1)') act.click() 

في نهاية البرنامج ، أضف تحديث المتصفح:

 browser.refresh() time.sleep (2) 

إذا كان البرنامج يعمل بشكل صحيح ، يبقى فقط بدء دورة عبر جميع الخلايا مع كائنات في ملف excel الخاص بنا. للقيام بذلك ، أضف في بداية الكتلة قبل i=sheet['B'+str(n)].value :

 while True: if n<36: 

وفي النهاية: n+=1 ، حيث n هو عدد العقارات في جدول excel.

يمكن الاطلاع على النص الكامل للبرنامج هنا .

Source: https://habr.com/ru/post/ar460040/


All Articles