Obtenez un extrait de Rosreestr via FSIS USRN et python. Partie 2

Dans cet article, nous essaierons d'obtenir des extraits du Federal State Property Fund du Unified State Register of Enterprises avec l'aide de python (sélénium) pour plusieurs propriétés immobilières à la fois, nous résoudrons le captcha en utilisant le service anticaptcha en utilisant son api. Nous ne touchons pas le réseau de neurones lors de la rencontre avec le captcha, car ils peuvent sembler plus difficiles à mettre en œuvre, et le pourcentage de captchas «à deviner» avec leur aide est encore plus faible.

Lien vers la 1ère partie de l'article: Obtenez un extrait de Rosreestr via FSIS USR et python. Partie 1




Le début de notre programme sera similaire à celui du programme de l'article précédent. Tout d'abord, il y a une autorisation automatique sur le service FSIS USN, en entrant la clé de connexion:
le code
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()


Au lieu de «---», vous devez saisir les parties correspondantes du code d'autorisation du registre fédéral d'inspection foncière, qui sont séparées par le symbole «-» dans le code d'autorisation.
"Rosreestr-objects.xlsx" - un fichier avec des objets immobiliers pour lesquels les demandes iront. S'il existe plus de 20 propriétés, des problèmes peuvent survenir, décrits ci-dessous.

Maintenant, nous créons une liste d'objets, les prenant de la table Excel et les envoyons au site dans la ligne souhaitée, cliquez sur Rechercher:
le code
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()


Dans le même temps, plusieurs objets à rechercher volent simultanément sur le site, ce qui permet également de gagner du temps.

Inscrivez-vous sur anti-captcha.com


Il n'est pas nécessaire d'utiliser ce site particulier, mais vous pouvez le prendre comme base.
La ressource, comme son nom l'indique, fournit une solution pour résoudre le captcha. Telle est la tautologie. Pour un coût supplémentaire. 1 dollar pour 1000 captcha. Cela devrait suffire pour la première fois. L'essence de son travail est simple - le captcha envoyé sur le site (ou son service) est résolu par des personnes vivantes (ou pas tout à fait vivantes) de l'autre côté de l'écran. La solution est presque instantanée, capable de rivaliser en vitesse avec les réseaux de neurones. La précision est de presque cent pour cent.
Dans notre cas, l'algorithme est le suivant: ils ont pris une photo de captcha à partir de l'écran, ont envoyé la photo au service en utilisant l'api, ont pris la réponse. Ainsi, vous pouvez résoudre presque tous les captcha composés de chiffres, de lettres, etc.

Donc, après vous être inscrit sur le site et avoir payé 1 dollar, vous devez récupérer votre clé dans la section api:
image



image2


C'est tout, nous n'avons plus besoin d'un site.

Nous revenons au programme.


Étant donné que les objets à l'écran sont dans la liste, le programme ira séquentiellement dans chaque objet et fera une demande dessus, résolvant le captcha:
le code
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'


Le captcha sur l'objet n'est pas immédiatement visible à l'écran, donc page_down est pressé, puis une photo du captcha et sa sauvegarde sur disque. La résolution d'écran peut être différente pour tout le monde, le programme a été écrit pour un écran de 1280x1024.
Afin de ne pas souffrir de la sélection des coordonnées à l'écran lors de la détermination des limites du captcha que vous souhaitez photographier, je laisse le code pour déterminer la position de la souris sur l'écran:
le code
#! 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.')



Nous allons maintenant utiliser api anticaptcha et envoyer l'image pour reconnaissance au service, le programme entrera le résultat dans la fenêtre correspondante sur le site Web de Rosreestr lui-même:

le code
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)


* N'oubliez pas de saisir la clé api au lieu de "-------------------------------"

Reste à appuyer sur les boutons appropriés et poursuivre le cycle de l'immobilier:
le code
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


Ici, des difficultés peuvent survenir s'il y a trop d'objets (50 ou plus). Cela est dû au décalage de la fenêtre et certains des objets ne tombent pas dans la fenêtre visible par le programme. Comment y faire face? Ajoutez peut-être un autre act.send_keys (Keys.DOWN) au code ci-dessus.
Que dois-je faire si même les personnes de l'autre côté de l'écran décident de corriger le captcha de manière incorrecte (au fait, le captcha ne se charge pas parfois et même la mise à jour de l'image ne sauvegarde pas)? Ajoutez la gestion des erreurs au code. Mais c'est une histoire complètement différente.

Vous n'aimez pas l'anticaptcha? Utiliser Rucaptcha!



Afin de passer à un service similaire, qui, pour des raisons subjectives, fonctionne plus rapidement en termes de retour de captcha reconnu et coûte un peu moins cher (33 roubles pour 1000 captcha), il suffit de changer deux points.
Premièrement, obtenez le code api en vous inscrivant sur le site rucaptcha.com
Deuxièmement, indiquez-le dans le code du programme en changeant les lignes correspondantes:

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



Comme vous pouvez le voir ci-dessus, les services sont similaires. Que choisir est une question de goût.

Programme - téléchargement .
Testez des objets immobiliers - téléchargez .

All Articles