通过FSIS USRN和python获取Rosreestr的摘录。第2部分

在本文中,我们将尝试借助python(硒)一次从多个企业房地产的python(硒)中获取统一企业登记册的联邦国家财产基金的摘录,我们将使用anticaptcha服务通过其api解决验证码。与验证码会面时,我们不会触及神经网络,因为它们似乎难以实施,并且在“成功猜测”验证码的帮助下所占的百分比仍然较低。

链接到本文的第一部分:通过FSIS USRN和python获取Rosreestr的摘录。第1部分




我们程序的开头与上一篇文章的程序类似,首先,在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上注册


不必使用此特定站点,但是您可以将其作为基础。
顾名思义,该资源提供了解决验证码的解决方案。这就是重言式。需另付费。每1000个验证码1美元。第一次就足够了。他工作的本质很简单-发送到网站(或服务)的验证码是由屏幕另一端的活着的人(或不太活着的人)解决的。该解决方案几乎是瞬时的,能够在速度上与神经网络竞争。准确性几乎是百分之一百。
在我们的示例中,算法如下:他们从屏幕上拍摄了验证码照片,并使用api将照片发送给服务,并获得了答案。因此,您几乎可以解决任何由数字,字母等组成的验证码。

因此,在网站上注册并支付1美元后,您需要在api部分中提取密钥:
图片



图片2


就是这样,我们不再需要网站。

我们返回程序。


由于屏幕上的对象在列表中,因此程序将依次进入每个对象并对其发出请求,以解决验证码:
编码
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'


该对象上的验证码无法立即在屏幕上看到,因此按下page_down,然后按下该验证码的照片并将其保存到磁盘。屏幕分辨率可能因人而异,该程序是为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)。
如果即使屏幕另一侧的人也决定错误地修复了验证码(顺便说一句,验证码有时无法加载,甚至更新图片也无法保存),我该怎么办?将错误处理添加到代码中。但这是一个完全不同的故事。

不喜欢anticaptcha?使用Rucaptcha!



为了切换到类似的服务,出于主观原因,该服务在返回公认的验证码方面工作更快,并且价格便宜一些(每1000个验证码33卢布),更改两点就足够了。
首先,通过在网站rucaptcha.com上进行注册来获取api代码;
其次,通过更改相应的行在程序代码中进行指示:

编码
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