अज्रेयन के कथन को रोसरेस्टर से अजगर का उपयोग करके प्राप्त करें, एपी को दरकिनार करें

Rosreestr पोर्टल के साथ पहला परिचित नहीं है


किसी भी वकील ने कभी रोसेरेस्ट्र (राज्य पंजीकरण, कैडस्ट्रे और कार्टोग्राफी के लिए संघीय सेवा) से अनुरोध किया है। जिस समय अनुरोध के लिए रोजरेस्टार शाखा को चलाने के लिए आवश्यक था और कागज पर अनुरोध दर्ज करना अतीत की बात है। Rosreestr ने कई ऑनलाइन सेवाओं को लॉन्च किया है जिनका उपयोग आप अपने घर से बाहर जाने के बिना कर सकते हैं। इन सेवाओं में रियल स्टेट के यूनिफाइड स्टेट रजिस्टर से अर्क के लिए एक अनुरोध शामिल है। आरंभ करने के लिए आधिकारिक साइट

हर कोई जो पहले से ही साइट के साथ काम करने में कामयाब रहा है, वह जानता है कि यूएसआरएन से एक अर्क प्राप्त करने के लिए, जिसमें न केवल सुविधा की सामान्य विशेषताओं के बारे में जानकारी होगी, बल्कि इस सुविधा के कॉपीराइट धारक के बारे में भी, यह आवश्यक है कि वह रोजस्टार के व्यक्तिगत खाते में जाए।

शायद यह एक या एक से अधिक कथन प्राप्त करने का एक सुविधाजनक तरीका है। हालाँकि, यदि आपको USRN के अर्क के पैकेज की आवश्यकता हो तो क्या करें? मान लें कि आप अचल संपत्ति के साथ काम करते हैं या वस्तुओं की एक संख्या के मालिक हैं, जिनकी कुल संख्या 10. से अधिक है। एक सामान्य नियम के रूप में, आपको प्रति वर्ष कम से कम 1 बार यूएसआरएन से एक एक्सट्रैक्ट प्राप्त करने की आवश्यकता होती है, ताकि फेडरल रजिस्टर में कानूनी बदलाव का तुरंत जवाब देने में सक्षम हो सकें, अगर वे आपके अलावा होते हैं। वसीयत।


आप अपने व्यक्तिगत खाते के माध्यम से मैन्युअल रूप से अनुरोध सबमिट कर सकते हैं, या आप रोसरेस्टर एपीआई का उपयोग कर सकते हैं। पहला विकल्प बेहद थका देने वाला है। इस तथ्य के अलावा कि रोज़रेस्ट्रा ऑनलाइन सेवा स्वयं लगातार हैंग के साथ बहुत धीरे-धीरे काम करती है, साधारण उपयोगकर्ता को प्रत्येक अनुरोध सबमिट करते समय ऑब्जेक्ट के लिए फ़ील्ड का एक शस्त्रागार जमा करने के लिए भी आमंत्रित किया जाता है। उदाहरण के लिए, एक भूखंड के लिए एक अनुरोध:


यही है, वस्तु के बारे में जानकारी का पता लगाना और उससे एक अर्क प्राप्त करना, भौतिक। व्यक्ति को पहले से ही वस्तु की सभी विशेषताओं को जानना चाहिए! और हर बार जब आप जानकारी का अनुरोध करते हैं, तो आपको सभी क्षेत्रों को भरना होगा। क्या कहना बहुत असुविधाजनक है। कम से कम यह प्रदान करने के लिए धन्यवाद कि भूमि को वर्ग मिलीमीटर में मापा जा सकता है।

USRN से अर्क प्राप्त करने के लिए दूसरा विकल्प रोजरेस्टार एपी है। Api प्रोग्राम निर्देशों का एक सेट है, जिसके अनुसार आपका सॉफ़्टवेयर हिस्सा और आपकी भागीदारी के बिना Rosreestr के आदान-प्रदान का हिस्सा है। एक सुविधाजनक चीज अगर सब कुछ सही ढंग से काम करता है। और एक खत्म कर सकता था।

हालांकि, यदि आप उस पृष्ठ को देखते हैं जहां रोसेरेस्ट्रर बताते हैं कि एक सुविधाजनक एपीआई को कैसे लागू किया जाए, तो आप असहज महसूस करते हैं।

विवरण के साथ एक दस्तावेज यहां पोस्ट किया गया है - rosreestr.ru/wps/portal/cc_ib_documents?documentId=1521

यह केवल 19 पृष्ठ लेता है, लेकिन तकनीकी भाषा में लिखा गया है और सुझाव देता है कि हम डिजिटल हस्ताक्षर के बिना नहीं कर सकते। सामान्य तौर पर, लंबे समय तक, यह समझ से बाहर है और असुविधाजनक है। थोड़ा रास्ता तय करते हैं।

रोसेरेस्टर की फांसी साइट के साथ काम करते समय, हमें उम्मीद के रूप में इस तरह के पायथन उपकरण की समझ की आवश्यकता होती है। इस साइट के साथ काम करने के लिए सबसे उपयुक्त उपकरण, कम से कम इस सेवा के विकास के वर्तमान चरण में रोसेरेस्ट्रा।

जब पृष्ठ ब्राउज़र में धीरे-धीरे लोड हो रहा है, तो इस पृष्ठ पर मौजूद तत्व अलग-अलग समय अंतराल (या बिल्कुल नहीं दिखाई देने वाले) पर दिखाई दे सकते हैं। इससे तत्वों को ढूंढना मुश्किल हो जाता है; एक ElementNotVoubleException या NoSuchElement अपवाद को समय-समय पर फेंक दिया जाता है। उम्मीदों का उपयोग करते हुए, हम इस समस्या को हल कर सकते हैं।

प्रतीक्षा की गई क्रियाओं के बीच एक निश्चित समय अंतराल देता है - तत्व की खोज या तत्व के साथ कोई अन्य ऑपरेशन।

चूंकि हम अपने काम में सेलेनियम मॉड्यूल का उपयोग करते हैं, इसलिए हम इसके साथ काम करेंगे। सेलेनियम दो प्रकार की उम्मीदें प्रदान करता है - अंतर्निहित और स्पष्ट।

स्पष्ट प्रतीक्षा वह कोड है जिसके द्वारा आप यह निर्धारित करते हैं कि आगे कोड निष्पादित होने के लिए क्या स्थिति होनी चाहिए। पहले हमने time.sleep () का उपयोग किया था, जो सटीक टाइमआउट सेट करता है। लेकिन यह विकल्प पूरी तरह से सफल नहीं है। इसका नकारात्मक पक्ष यह है कि यदि आप डाउनटाइम (नींद) का अनुमान नहीं लगाते हैं, तो प्रोग्राम क्रैश हो जाएगा। अधिक सुविधाजनक तरीके हैं जो आपको कोड लिखने में मदद कर सकते हैं जो कि आपकी आवश्यकता के अनुसार अपेक्षा करता है।

हम ऑनलाइन रोवरेस्ट्र के साथ काम करने के लिए एक कार्यक्रम लिख रहे हैं


चलो हमारे कार्यक्रम पर चलते हैं।

इसका सार यह है कि रोज़रेस्टार वेबसाइट में प्रवेश करते समय, वह एक भौतिक व्यक्ति के व्यक्तिगत खाते के माध्यम से लॉग इन करता है। व्यक्तियों और आगे यूएसआरएन से अर्क के लिए स्वतंत्र रूप से अनुरोध प्रस्तुत करना शुरू किया। हमारे कार्यक्रम को एक्सेल फ़ाइल (जहां यह इसके बिना होगा) से अनुरोधों के लिए डेटा प्राप्त होगा। एक कैविएट। अनुरोध सबमिट करते समय, Rosreestr वेबसाइट में ऑब्जेक्ट के पते के साथ एक फ़ील्ड होता है। इसके साथ कठिनाइयाँ होंगी, क्योंकि रोसेरेस्टर के पते एक विशेष तरीके से खोले गए हैं। इसे कार्यक्रम में ध्यान में रखना होगा।

चलिए शुरू करते हैं।

आरंभ करने से पहले, निम्न प्रारूप में स्रोत डेटा के साथ एक एक्सेल तालिका तैयार करें:


संपत्ति के कॉपीराइट धारक-पते का नंबर-नाम संपत्ति का प्रकार- कैडस्ट्राल नंबर- क्षेत्र। अनुरोध करने पर, हमें "संख्या" और "कॉपीराइट धारक का नाम" को छोड़कर तालिका के सभी क्षेत्रों की आवश्यकता होगी।

अब एक नया अजगर फ़ाइल बनाएँ - 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 

अचल संपत्ति के डेटा के साथ एक्सेल फ़ाइल खोलें:

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

अब जब हम लॉग इन कर चुके हैं, तो ब्राउज़र हमें राज्य सेवा वेबसाइट से रोसरेस्टर वेबसाइट पर पुनर्निर्देशित कर देगा। वहां, हमारे कार्यक्रम को आइटम पर क्लिक करना चाहिए "अचल संपत्ति और (या) उनके मालिकों के बारे में जानकारी के लिए अनुरोध":



हम उचित कोड दर्ज करेंगे:

 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- सिलेक्टर्स पर क्लिक करते हैं, ये सिलेक्टर्स सभी ऑब्जेक्ट्स के लिए समान होते हैं:

 #  -   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 से लिया गया है। उपयोगकर्ता कार्यों के पुनरुद्धार के रूप में एक ठहराव है। यह इस तथ्य के कारण है कि Rosreestr में पता उस पते से भिन्न हो सकता है जो आपके पास है और सबसे अधिक संभावना है। इसलिए, साइट पर तालिका से पते में प्रवेश करने वाला कार्यक्रम, उपयोगकर्ता को आगे जारी रखने के लिए दुभाषिया में प्रवेश करने की उम्मीद करेगा।

Rosreestr पोर्टल पर शेष चरण सबसे कम उल्लेखनीय हैं, वहां प्रोग्राम "नेक्स्ट" पोर्टल के बटन पर क्लिक करता है और 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) 

यदि प्रोग्राम सही ढंग से काम करता है, तो यह केवल हमारी एक्सेल फ़ाइल में ऑब्जेक्ट्स के साथ सभी सेल के माध्यम से एक चक्र शुरू करने के लिए रहता है। ऐसा करने के लिए, i=sheet['B'+str(n)].value से पहले ब्लॉक की शुरुआत में जोड़ें i=sheet['B'+str(n)].value

 while True: if n<36: 

और अंत में: n+=1 , जहां n एक्सेल टेबल में अचल संपत्ति की संख्या है।

कार्यक्रम का पूरा पाठ यहां देखा जा सकता है

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


All Articles