FSIS USRN और अजगर के माध्यम से Rosreestr से एक उद्धरण प्राप्त करें। भाग 2

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

लेख के पहले भाग का लिंक: एफएसआईएस यूएसआर और अजगर के माध्यम से रोज्रेस्ट्रे से एक उद्धरण प्राप्त करें। भाग 1




हमारे कार्यक्रम की शुरुआत पिछले पोस्ट के कार्यक्रम के समान होगी। सबसे पहले, एफएसआईएस यूएसएन सेवा पर एक स्वचालित प्राधिकरण है, लॉगिन कुंजी दर्ज करें:
कोड
import webbrowser,time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.action_chains import ActionChains
import openpyxl
import pyautogui
import os
from python3_anticaptcha import ImageToTextTask

wb = openpyxl.load_workbook('rosreestr-objects.xlsx')
sheet=wb.get_active_sheet()

browser = webdriver.Firefox()
browser.implicitly_wait(40)
browser.get ('https://rosreestr.ru/wps/portal/p/cc_present/ir_egrn')

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


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

अब हम वस्तुओं की एक सूची बनाते हैं, उन्हें एक्सेल टेबल से लेते हैं और वांछित पंक्ति में साइट पर भेजते हैं, खोज पर क्लिक करें:
कोड
n=1
while n<11: #    excel
        i=sheet['C'+str(n)].value
        test.append(i+';')
        n+=1
#   
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()        
act.clear()        
for i in test:
        act.send_keys(i)        
time.sleep(3)
act = browser.find_element_by_css_selector('.v-filterselect-error > input:nth-child(1)')
act.click()        
act.clear()        
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()


एक ही समय में, खोज करने के लिए कई ऑब्जेक्ट एक ही बार में साइट पर जाते हैं, जो अतिरिक्त रूप से समय बचाता है।

Anti-captcha.com पर रजिस्टर करें


इस विशेष साइट का उपयोग करना आवश्यक नहीं है, लेकिन आप इसे आधार के रूप में ले सकते हैं।
संसाधन, जैसा कि नाम कहता है, कैप्चा को हल करने के लिए एक समाधान प्रदान करता है। ऐसी ही तान है। शुल्क के लिए। 1 डॉलर प्रति 1000 कैप्चा। यह पहली बार के लिए पर्याप्त होना चाहिए। उनके काम का सार सरल है - साइट पर भेजा गया कैप्चा (या इसकी सेवा) स्क्रीन के दूसरी तरफ रहने वाले लोगों (या काफी जीवित नहीं) द्वारा हल किया जाता है। समाधान लगभग तात्कालिक है, जो तंत्रिका नेटवर्क के साथ गति में प्रतिस्पर्धा करने में सक्षम है। सटीकता लगभग एक सौ प्रतिशत है।
हमारे मामले में, एल्गोरिथ्म निम्नानुसार है: उन्होंने स्क्रीन से कैप्चा का फोटो लिया, एपीआई का उपयोग करके सेवा को फोटो भेजा, उत्तर लिया। इस प्रकार, आप लगभग किसी भी कैप्चा को हल कर सकते हैं, जिसमें संख्याएँ, अक्षर आदि शामिल हैं।

इसलिए, साइट पर पंजीकरण करने और 1 डॉलर का भुगतान करने के बाद, आपको एपीआई सेक्शन में अपनी चाबी लेने की आवश्यकता है:
चित्र



Picture2


बस, अब हमें किसी साइट की आवश्यकता नहीं है।

हम कार्यक्रम पर लौटते हैं।


चूंकि स्क्रीन पर ऑब्जेक्ट सूची में हैं, प्रोग्राम क्रमिक रूप से प्रत्येक ऑब्जेक्ट में जाएगा और उस पर एक अनुरोध करेगा, कैप्चरिंग को हल करेगा:
कोड
x=1
ActionChains(browser).move_to_element(browser.find_element_by_xpath('/html/body/div[1]/div[6]/div[4]/div/div/section/div[2]/div[2]/div/div/div[2]/div/div[2]/div/div/div/div[1]/div/div/div/div[5]/div/div/div[2]/div[1]/table/tbody/tr['+str(x)+']')).click().perform()
        time.sleep(2)        
        act = browser.find_element_by_css_selector('.v-textfield')
        act.click()
        time.sleep(1)
        act = browser.find_element_by_tag_name('html')
        act.send_keys(Keys.PAGE_DOWN)# ,   
        time.sleep(2)
        a=0
        os.chdir('C:\\1')
        im=pyautogui.screenshot(imageFilename=str(a)+'.jpg',region=(238,394,220,70))#  12801024
        #im=pyautogui.screenshot(imageFilename=str(a)+'.jpg',region=(317,404,160,200))#    
        time.sleep(1)
        captcha_file = 'C:\/1\/0.jpg'


स्क्रीन पर ऑब्जेक्ट पर कैप्चा तुरंत दिखाई नहीं देता है, इसलिए पेज_डाउन दबाया जाता है, फिर कैप्चा की एक फोटो और डिस्क पर इसकी बचत होती है। स्क्रीन रिज़ॉल्यूशन हर किसी के लिए अलग हो सकता है, यह कार्यक्रम 1280x1024 की स्क्रीन के लिए लिखा गया था।
कैप्चा की सीमाओं का निर्धारण करते समय स्क्रीन पर निर्देशांक के चयन के साथ पीड़ित नहीं होने के लिए, जिसे आप फोटोग्राफ करना चाहते हैं, मैं स्क्रीन पर माउस की स्थिति निर्धारित करने के लिए कोड छोड़ देता हूं:
कोड
#! python3
# mouseNow.py - Displays the mouse cursor's current position.
import pyautogui
print('Press Ctrl-C to quit.')
try:
    while True:
        # Get and print the mouse coordinates.
        x, y = pyautogui.position()
        positionStr = 'X: ' + str(x).rjust(4) + ' Y: ' + str(y).rjust(4)
        pixelColor = pyautogui.screenshot().getpixel((x, y))
        positionStr += ' RGB: (' + str(pixelColor[0]).rjust(3)
        positionStr += ', ' + str(pixelColor[1]).rjust(3)
        positionStr += ', ' + str(pixelColor[2]).rjust(3) + ')'
        print(positionStr, end='')
        print('\b' * len(positionStr), end='', flush=True)

except KeyboardInterrupt:
    print('\nDone.')



अब हम एपि एंटीकाप्टा का उपयोग करेंगे और छवि को सेवा के लिए मान्यता के लिए भेज देंगे, यह कार्यक्रम परिणाम को रोसेरेस्टर वेबसाइट पर संबंधित विंडो में दर्ज करेगा:

कोड
ANTICAPTCHA_KEY = "-------------------------------"
        result = ImageToTextTask.ImageToTextTask(anticaptcha_key=ANTICAPTCHA_KEY).captcha_handler(captcha_file=captcha_file)        
        b=result.get('solution').get('text')#    
        print(b)
        act = browser.find_element_by_css_selector('.v-textfield')
        act.click()
        for a in b:
                act.send_keys(a)
                time.sleep(0.1)
        act.send_keys(Keys.ENTER)
        time.sleep(1)


* "-------------------------------" के बजाय एपीआई कुंजी दर्ज करना न भूलें

यह उपयुक्त बटन को धक्का देने और अचल संपत्ति के चक्र को जारी रखने के लिए बना हुआ है:
कोड
act.click()
        time.sleep(3)        
        act = browser.find_element_by_css_selector('.v-table-body-wrapper')
        act.send_keys(Keys.DOWN)
        act.send_keys(Keys.DOWN)
        time.sleep(3)        
        x+=1


यदि बहुत अधिक वस्तुएँ (50 या अधिक) हैं तो यहाँ कठिनाइयाँ आ सकती हैं। यह व्यूपोर्ट की शिफ्ट के कारण है और कुछ ऑब्जेक्ट प्रोग्राम द्वारा दिखाई जाने वाली विंडो में नहीं आते हैं। इससे कैसे निपटें? शायद ऊपर दिए गए कोड में एक और act.send_keys (Keys.DOWN) जोड़ें।
यदि स्क्रीन के दूसरी तरफ के लोगों ने भी कैप्चा को गलत तरीके से ठीक करने का फैसला किया है, तो क्या करना चाहिए (वैसे, कैप्चा कभी-कभी लोड नहीं करता है और यहां तक ​​कि तस्वीर को अपडेट नहीं करता है)? कोड में त्रुटि हैंडलिंग जोड़ें। लेकिन यह पूरी तरह से अलग कहानी है।

एंटीकैप्टा पसंद नहीं है? Rucaptcha का उपयोग करना!



एक समान सेवा पर स्विच करने के लिए, जो व्यक्तिपरक कारणों के लिए, मान्यता प्राप्त कैप्चा वापस करने के मामले में तेजी से काम करता है और थोड़ा सस्ता (33 रूबल प्रति 1000 कैप्चा) खर्च करता है, यह दो बिंदुओं को बदलने के लिए पर्याप्त है।
सबसे पहले, साइट rucaptcha.com पर पंजीकरण करके एपीआई कोड प्राप्त करें।
दूसरी बात, इसी कोड को संबंधित लाइनों को बदलकर इंगित करें:

कोड
RUCAPTCHA_KEY = "  api"
from python_rucaptcha import ImageCaptcha
result = ImageCaptcha.ImageCaptcha(rucaptcha_key=RUCAPTCHA_KEY).captcha_handler(captcha_file=captcha_file)
b=result["captchaSolve"] #   



जैसा कि आप ऊपर देख सकते हैं, सेवाएं समान हैं। क्या चुनना है स्वाद का मामला है।

कार्यक्रम - डाउनलोड
अचल संपत्ति वस्तुओं का परीक्षण करें - डाउनलोड करें

All Articles