· 6 years ago · Jan 15, 2020, 07:02 PM
1# coding: utf-8
2
3import requests, time
4from config import CAPTCHA_GURU_KEY, DATA_SITEKAY, URL
5
6
7def get_captcha_id(apikey, googlekey, url):
8 """
9 :param apikey: apikey from captcha.guru web site
10 :param googlekey: google site key used on web page where captcha exist
11 :param url: url of web page where captcha need to be handled
12 :return: captcha_id which is used for get request from captcha.guru api
13 """
14 params = {
15 "key": apikey,
16 "method": "userrecaptcha",
17 "googlekey": googlekey,
18 "pageurl": url,
19 "here": "now",
20 "json": "1"
21 }
22 with requests.Session() as session:
23 response = session.get("http://api.captcha.guru/in.php", params=params)
24 data = response.json()
25
26 if data['status'] == 1:
27 captcha_id = data['request']
28 else:
29 return False
30
31 return captcha_id
32
33
34def captcha_solver(apikey, captcha_id):
35 """
36 :param apikey: apikey from captcha.guru web site
37 :param captcha_id: taken from 1st get request to captcha.guru api
38 :return: False or google_token from captcha.guru
39 """
40
41 while True:
42 cap_id = {
43 "key": apikey,
44 "action": "get",
45 "id": captcha_id,
46 "json": "1"
47 }
48 with requests.Session() as session:
49 resp = session.get("http://api.captcha.guru/res.php", params=cap_id)
50 result = resp.json()
51
52 if result['status'] == 1:
53 answer = result['request']
54 break
55 elif result['status'] == 0:
56 if result['request'] == "ERROR_CAPTCHA_UNSOLVABLE":
57 return False
58 else:
59 time.sleep(5)
60
61 return answer
62
63
64def captcha_main():
65 captcha_id = get_captcha_id(apikey=CAPTCHA_GURU_KEY, googlekey=DATA_SITEKAY, url=URL)
66 if captcha_id:
67 answer = captcha_solver(apikey=CAPTCHA_GURU_KEY, captcha_id=captcha_id)
68 if answer:
69 return answer
70 else:
71 return False
72 else:
73 return False
74
75
76if __name__ == '__main__':
77 print(captcha_main())