· 5 years ago · Jul 20, 2020, 07:26 AM
1# -*- coding: utf-8 -*-
2# this module provide function for work with http://eais.rkn.gov.ru/
3# You need API key from anti-captcha.com for this module
4
5import os
6import time
7import argparse
8
9import requests
10from pyquery import PyQuery as pq
11from antigate import AntiGate
12
13
14def query(domain, api_key, verbose):
15 """Get information about domain/ip from RKN reestr"""
16
17 def solve_captcha(cap_url, antigate_api_key, s, verbose=False):
18 """Solve captcha woth antigate
19 Get Api key from anti-captcha.com"""
20 gate = AntiGate(antigate_api_key, auto_run=False)
21 cap = s.get(cap_url)
22 try:
23 os.stat('tmp/')
24 except IOError:
25 os.mkdir('tmp/')
26 with open("tmp/cap.jpg", "wb+") as f:
27 f.write(cap.content)
28 captcha_id1 = gate.send('tmp/cap.jpg')
29 if verbose:
30 print ("Solving captcha, please wait...")
31 time.sleep(7)
32 captcha = gate.get(captcha_id1)
33 if verbose:
34 print ("Captcha decoded: %s" % captcha)
35 return captcha
36
37 if verbose:
38 print("Loading http://eais.rkn.gov.ru/")
39 s = requests.Session()
40 s.headers.update({'user-agent':
41 ('Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:53.0) '
42 'Gecko/20100101 Firefox/53.0')})
43
44 r = s.get('http://eais.rkn.gov.ru/')
45 parse = pq(r.text)
46 captcha_url = "http://eais.rkn.gov.ru%s" % parse('img#captcha_image').attr('src')
47 if verbose:
48 print ("Captcha url: %s" % captcha_url)
49 captcha = solve_captcha(captcha_url, api_key, s, verbose)
50 data = {"act": ('', "search"),
51 "secretcodeId": ('', ''),
52 "searchstring": ('', domain),
53 "secretcodestatus": ('', captcha)}
54
55 # I use files for data
56 # because eais.rkn use multipart form
57 r = s.post('http://eais.rkn.gov.ru/', files=data)
58
59 parse = pq(r.text)
60 message = parse('div.messageFlash:first').html()
61 if not message:
62 result = "Не удалось получить данные"
63 if verbose:
64 print (r.text)
65
66 message_text = parse('div.messageFlash:first').text()
67 if "TblGrid" in message:
68 if "ограничивается к сайту" in message:
69 result = "Сайт в реестре, доступ ограничивается"
70 elif "доступ не ограничивается" in message:
71 result = "Сайт в реестре, доступ не ограничивается"
72 else:
73 result = message_text
74 return result
75
76if __name__ == "__main__":
77 parser = argparse.ArgumentParser(description='Process some integers.')
78 parser.add_argument('domain', help='Domain to check, example: site.ru')
79 parser.add_argument('api_key', help='Antigate API key for captcha recognition')
80 parser.add_argument('--verbose', action="store_true",
81 help='Display some debug information')
82
83 args = parser.parse_args()
84 print (query(args.domain, args.api_key, args.verbose))