Dapatkan ekstrak dari Rosreestr melalui FSIS USRN dan python. Bagian 2

Pada artikel ini, kami akan mencoba untuk mendapatkan ekstrak dari Dana Properti Negara Federal dari Daftar Perusahaan Amerika Serikat dengan bantuan python (selenium) untuk beberapa properti real estat sekaligus, kami akan menyelesaikan captcha menggunakan layanan anticaptcha menggunakan apinya. Kami tidak menyentuh jaringan saraf ketika bertemu dengan captcha, karena mereka mungkin tampak lebih sulit untuk diimplementasikan, dan persentase captcha "menebak sukses" dengan bantuan mereka masih lebih rendah.

Tautan ke bagian 1 artikel: Dapatkan ekstrak dari Rosreestr melalui FSIS USR dan python. Bagian 1




Awal program kami akan mirip dengan yang dari program posting sebelumnya. Pertama, ada otorisasi otomatis pada layanan USN FSIS, memasukkan kunci login:
Kode
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()


Alih-alih "---", Anda harus memasukkan bagian yang sesuai dari kode otorisasi Register Inspeksi Properti Negara Federal, yang dipisahkan oleh simbol "-" dalam kode otorisasi.
"Rosreestr-objects.xlsx" - file dengan objek real estat yang permintaannya akan diajukan. Jika ada lebih dari 20 properti, masalah dapat muncul, yang dijelaskan di bawah ini.

Sekarang kita membuat daftar objek, mengambilnya dari tabel excel dan mengirim ke situs di baris yang diinginkan, klik pencarian:
Kode
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()


Pada saat yang sama, beberapa objek untuk dicari terbang ke situs sekaligus, yang juga menghemat waktu.

Daftar di anti-captcha.com


Anda tidak perlu menggunakan situs khusus ini, tetapi Anda dapat menjadikannya sebagai dasar.
Sumber daya, seperti namanya, memberikan solusi untuk memecahkan captcha. Itulah tautologi. Untuk bayaran. 1 dolar per 1000 captcha. Itu harus cukup untuk pertama kalinya. Inti dari karyanya sederhana - captcha yang dikirim ke situs (atau layanannya) diselesaikan oleh orang yang hidup (atau tidak cukup hidup) di sisi lain layar. Solusinya hampir instan, mampu bersaing dalam kecepatan dengan jaringan saraf. Akurasinya hampir seratus persen.
Dalam kasus kami, algoritme adalah sebagai berikut: mereka mengambil foto captcha dari layar, mengirim foto ke layanan menggunakan api, mengambil jawabannya. Dengan demikian, Anda dapat menyelesaikan hampir semua captcha, yang terdiri dari angka, huruf, dll.

Jadi, setelah mendaftar di situs, dan membayar 1 dolar, Anda perlu mengambil kunci Anda di bagian api:
gambar



gambar2


Itu saja, kami tidak membutuhkan situs lagi.

Kami kembali ke program.


Karena objek pada layar ada dalam daftar, program akan secara berurutan masuk ke setiap objek dan membuat permintaan padanya, memecahkan captcha:
Kode
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 pada objek tidak segera terlihat di layar, jadi page_down ditekan, lalu foto captcha dan penyimpanannya ke disk. Resolusi layar dapat berbeda untuk semua orang, program ini ditulis untuk layar 1280x1024.
Agar tidak menderita dengan pemilihan koordinat di layar saat menentukan batas captcha yang ingin Anda foto, saya meninggalkan kode untuk menentukan posisi mouse di layar:
Kode
#! 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.')



Sekarang kita akan menggunakan api anticaptcha dan mengirim gambar untuk pengakuan ke layanan, program akan memasukkan hasilnya ke jendela yang sesuai di situs web Rosreestr itu sendiri:

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


* Jangan lupa memasukkan kunci api alih-alih "-------------------------------"

Tetap menekan tombol yang sesuai dan melanjutkan siklus real estat:
Kode
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


Di sini kesulitan mungkin timbul jika ada terlalu banyak objek (50 atau lebih). Ini disebabkan oleh pergeseran viewport dan beberapa objek tidak jatuh ke jendela yang terlihat oleh program. Bagaimana cara menghadapinya? Mungkin menambahkan act.send_keys (Keys.DOWN) lain ke kode di atas.
Apa yang harus saya lakukan jika bahkan orang-orang di sisi lain layar memutuskan untuk memperbaiki captcha secara tidak benar (omong-omong, captcha kadang tidak memuat dan bahkan memperbarui gambar tidak menyimpan)? Tambahkan penanganan kesalahan ke kode. Tetapi ini adalah kisah yang sangat berbeda.

Tidak suka anticaptcha? Menggunakan Rucaptcha!



Untuk beralih ke layanan serupa, yang, karena alasan subjektif, bekerja lebih cepat dalam hal mengembalikan captcha yang diakui dan biayanya sedikit lebih murah (33 rubel untuk 1000 captcha), cukup untuk mengubah dua poin.
Pertama, dapatkan kode api dengan mendaftar di situs rucaptcha.com
Kedua, tunjukkan ini dalam kode program dengan mengubah baris yang sesuai:

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



Seperti yang Anda lihat di atas, layanannya serupa. Apa yang harus dipilih adalah masalah selera.

Program - unduh .
Uji objek real estat - unduh .

All Articles