Obtenga un extracto de Rosreestr a trav茅s de FSIS USRN y python. Parte 2

En este art铆culo, intentaremos obtener extractos del Fondo de Propiedad del Estado Federal del Registro Estatal de Empresas Unificado con la ayuda de python (selenio) para varias propiedades inmobiliarias a la vez, resolveremos el captcha usando el servicio anticaptcha usando su API. No tocamos la red neuronal cuando nos reunimos con el captcha, ya que puede parecer m谩s dif铆cil de implementar, y el porcentaje de captchas "acertados" con su ayuda es a煤n menor.

Enlace a la primera parte del art铆culo: Obtenga un extracto de Rosreestr a trav茅s de FSIS USRN y python. Parte 1




El inicio de nuestro programa ser谩 similar al del programa de la publicaci贸n anterior. Primero, hay una autorizaci贸n autom谩tica en el servicio FSIS USN, ingresando la clave de inicio de sesi贸n:
el c贸digo
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()


En lugar de "---", debe ingresar las partes correspondientes del c贸digo de autorizaci贸n del Registro de Inspecci贸n de Propiedad del Estado Federal, que est谩n separadas por el s铆mbolo "-" en el c贸digo de autorizaci贸n.
"Rosreestr-objects.xlsx": un archivo con objetos inmobiliarios para el que se enviar谩n las solicitudes. Si hay m谩s de 20 propiedades, pueden surgir problemas, que se describen a continuaci贸n.

Ahora creamos una lista de objetos, tom谩ndolos de la tabla de Excel y envi谩ndolos al sitio en la fila deseada, haga clic en buscar:
el c贸digo
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()


Al mismo tiempo, varios objetos para buscar vuelan al sitio a la vez, lo que adem谩s ahorra tiempo.

Registrarse en anti-captcha.com


No es necesario utilizar este sitio en particular, pero puede tomarlo como base.
El recurso, como su nombre lo indica, proporciona una soluci贸n para resolver captcha. Tal es la tautolog铆a. Por una cuota. 1 d贸lar por 1000 captcha. Deber铆a ser suficiente por primera vez. La esencia de su trabajo es simple: el captcha enviado al sitio (o su servicio) es resuelto por personas vivas (o no vivas) al otro lado de la pantalla. La soluci贸n es casi instant谩nea, capaz de competir en velocidad con las redes neuronales. La precisi贸n es casi cien por ciento.
En nuestro caso, el algoritmo es el siguiente: tomaron una foto de captcha de la pantalla, enviaron la foto al servicio usando api, tomaron la respuesta. Por lo tanto, puede resolver casi cualquier captcha, que consiste en n煤meros, letras, etc.

Entonces, despu茅s de registrarse en el sitio y pagar 1 d贸lar, debe recoger su clave en la secci贸n de la API:
imagen



picture2


Eso es todo, ya no necesitamos un sitio.

Regresamos al programa.


Como los objetos en la pantalla est谩n en la lista, el programa ir谩 secuencialmente a cada objeto y har谩 una solicitud sobre 茅l, resolviendo el captcha:
el c贸digo
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 en el objeto no es inmediatamente visible en la pantalla, por lo que se presiona page_down, luego una foto del captcha y su guardado en el disco. La resoluci贸n de la pantalla puede ser diferente para todos, el programa fue escrito para una pantalla de 1280x1024.
Para no sufrir con la selecci贸n de coordenadas en la pantalla al determinar los l铆mites del captcha que desea fotografiar, dejo el c贸digo para determinar la posici贸n del mouse en la pantalla:
el c贸digo
#! 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.')



Ahora usaremos api anticaptcha y enviaremos la imagen para su reconocimiento al servicio, el programa ingresar谩 el resultado en la ventana correspondiente en el sitio web de Rosreestr:

el c贸digo
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)


* No olvide ingresar la clave de la API en lugar de "-------------------------------"

Queda por presionar los botones apropiados y continuar el ciclo de bienes ra铆ces:
el c贸digo
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


Aqu铆 pueden surgir dificultades si hay demasiados objetos (50 o m谩s). Esto se debe al cambio de la ventana gr谩fica y algunos de los objetos no caen en la ventana visible por el programa. Como lidiar con esto? Quiz谩s agregue otro act.send_keys (Keys.DOWN) al c贸digo anterior.
驴Qu茅 debo hacer si incluso las personas en el otro lado de la pantalla decidieron arreglar el captcha incorrectamente (por cierto, el captcha a veces no se carga e incluso no se guarda la actualizaci贸n de la imagen)? Agregar manejo de errores al c贸digo. Pero esta es una historia completamente diferente.

驴No te gusta el anticaptcha? Usando Rucaptcha!



Para cambiar a un servicio similar, que, por razones subjetivas, funciona m谩s r谩pido en t茅rminos de devolver captcha reconocido y cuesta un poco m谩s barato (33 rublos por 1000 captcha), es suficiente cambiar dos puntos.
En primer lugar, obtenga el c贸digo api registr谩ndose en el sitio rucaptcha.com.
En segundo lugar, indique esto en el c贸digo del programa cambiando las l铆neas correspondientes:

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



Como puede ver arriba, los servicios son similares. Lo que elegir es una cuesti贸n de gustos.

Programa - descargar .
Probar objetos inmobiliarios - descargar .

All Articles