احصل على مقتطف من Rosreestr من خلال FSIS USRN و python. الجزء 2

في هذه المقالة ، سنحاول الحصول على مقتطفات من صندوق ممتلكات الدولة الفيدرالي لسجل الشركات الموحد بمساعدة الثعبان (السيلينيوم) للعديد من العقارات في وقت واحد ، وسوف نحل اختبار CAPTCHA باستخدام خدمة AntiCaptcha باستخدام واجهة برمجة تطبيقاته. عند مقابلة اختبار CAPTCHA ، لن نلمس الشبكة العصبية ، نظرًا لأنها قد تبدو أكثر صعوبة في التنفيذ ، ولا تزال نسبة اختبار CAPTCHS "التخمين الناجح" بمساعدتهم أقل.

رابط إلى الجزء الأول من المقالة: احصل على مقتطف من Rosreestr من خلال FSIS USRN و python. الجزء الأول




ستكون بداية برنامجنا مشابهة لتلك الموجودة في برنامج المنشور السابق. أولاً ، هناك تفويض تلقائي على خدمة FSIS USN ، بإدخال مفتاح تسجيل الدخول:
الرمز
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()


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

الآن نقوم بإنشاء قائمة من الكائنات ، وأخذها من جدول excel وإرسالها إلى الموقع في الصف المطلوب ، انقر فوق بحث:
الرمز
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


ليس من الضروري استخدام هذا الموقع بالتحديد ، ولكن يمكنك اعتباره أساسًا.
يوفر المصدر ، كما يقول الاسم ، حلاً لحل اختبار CAPTCHA. هذا هو الحشو. مقابل رسوم. 1 دولار لكل 1000 اختبار CAPTCHA. يجب أن تكون كافية للمرة الأولى. جوهر عمله بسيط - يتم حل اختبار CAPTCHA الذي يتم إرساله إلى الموقع (أو خدمته) بواسطة أناس أحياء (أو ليسوا على قيد الحياة) على الجانب الآخر من الشاشة. الحل شبه فوري ، قادر على المنافسة بسرعة مع الشبكات العصبية. الدقة ما يقرب من مائة في المئة.
في حالتنا ، تكون الخوارزمية كما يلي: التقطوا صورة اختبار CAPTCHA من الشاشة ، وأرسلوا الصورة إلى الخدمة باستخدام واجهة برمجة التطبيقات ، وأخذوا الإجابة. وبالتالي ، يمكنك حل أي اختبار captcha تقريبًا ، يتكون من أرقام وحروف وما إلى ذلك.

لذا ، بعد التسجيل في الموقع ، ودفع دولار واحد ، تحتاج إلى استلام مفتاحك في قسم واجهة برمجة التطبيقات:
صورة



الصورة 2


الكل ، نحن لسنا بحاجة إلى موقع بعد الآن.

نعود إلى البرنامج.


نظرًا لأن الكائنات الموجودة على الشاشة موجودة في القائمة ، فإن البرنامج سيدخل بشكل تسلسلي إلى كل كائن ويقدم طلبًا عليه ، مما يؤدي إلى حل اختبار CAPTCHA:
الرمز
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'


لا يظهر CAPTCHA على الكائن على الفور ، لذا يتم الضغط على page_down ، ثم صورة CAPTCHA وحفظها على القرص. يمكن أن تكون دقة الشاشة مختلفة لكل شخص ، وقد تمت كتابة البرنامج لشاشة 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.')



الآن سنستخدم api anticaptcha ونرسل الصورة للتعرف عليها للخدمة ، سيقوم البرنامج بإدخال النتيجة في النافذة المقابلة على موقع Rosreestr نفسه:

الرمز
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)


* لا تنس إدخال مفتاح api بدلاً من "-------------------------------"

يبقى الضغط على الأزرار المناسبة ومواصلة دورة العقارات:
الرمز
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) آخر إلى التعليمات البرمجية أعلاه.
ماذا أفعل إذا قرر حتى الأشخاص على الجانب الآخر من الشاشة إصلاح اختبار CAPTCHA بشكل غير صحيح (بالمناسبة ، في بعض الأحيان لا يتم تحميل اختبار CAPTCHA وحتى تحديث الصورة لا يحفظ)؟ أضف معالجة الخطأ إلى التعليمات البرمجية. لكن هذه قصة مختلفة تمامًا.

لا تحب antaptcha؟ باستخدام Rucaptcha!



من أجل التحول إلى خدمة مماثلة ، والتي ، لأسباب شخصية ، تعمل بشكل أسرع من حيث إرجاع captcha المعترف بها وتكاليف أرخص قليلاً (33 روبل لكل 1000 captcha) ، يكفي تغيير نقطتين.
أولاً ، احصل على كود واجهة برمجة التطبيقات عن طريق التسجيل على الموقع 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