GoogleRegger (не закончен)

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# импорт библиотек
import urllib2, urlparse, httplib, urllib, re, logging, time
from twill import commands
from twill.commands import go, showforms, formclear, fv, submit, code, show, find, get_browser, agent
# объявляем переменные
agent('Mozilla/5.0 (Windows; U; Windows NT 5.0; us; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.666')
first = 'Petro' # Имя
last = 'Petrovitch' # Фамилия
mail = 'sdfDFSGdjgb881' # Желаемый адрес почты
passwd = '435FDGsdf42h' # Пароль
key = 'lalala' # Ключ к антикапче
fn = 'Captcha.jpg' # Имя файла с капчёй
# ============== Работа с антикапчёй =============
def get_cap_text(key, cap_id):
''' Ожидаем и получаем текст капчи '''
logging.info('--- Get captcha text')
time.sleep(5)
# получаем результат
res_url= 'http://anti-captcha.com/res.php'
res_url+= "?" + urllib.urlencode({'key': key, 'action': 'get', 'id': cap_id})
while 1:
res= urllib.urlopen(res_url).read()
if res == 'CAPCHA_NOT_READY':
time.sleep(1)
continue
break
res= res.split('|')
if len(res) == 2:
return tuple(res)
else:
return ('ERROR', res[0])
def send_cap(key, fn):
''' Отправляем капчу на anti-capcha.com
Вход:
key - ключ на антикапче
fn - файл с капчей
Выход:
id капчи - в случае успеха
False - неудача
'''
logging.info('--- Send captcha')
data = open(fn, 'rb').read()
# разделитель для данных
boundary= '----------OmNaOmNaOmNamo'
# тело HTTP-запроса
body = '''--%s
Content-Disposition: form-data; name="method"
post
--%s
Content-Disposition: form-data; name="key"
%s
--%s
Content-Disposition: form-data; name="file"; filename="capcha.jpg"
Content-Type: image/pjpeg
%s
--%s--
''' % (boundary, boundary, key, boundary, data, boundary)
# заголовки HTTP-запроса
headers = {'Content-type' : 'multipart/form-data; boundary=%s' % boundary}
# подключение к HTTP-серверу
h = httplib.HTTPConnection('anti-captcha.com')
# посылка запроса
h.request("POST", "/in.php", body, headers)
# получение и анализ ответа HTTP-сервера
resp = h.getresponse()
data = resp.read()
h.close()
if resp.status == 200:
cap_id= int(data.split('|')[1])
return cap_id
else:
logging.error('Captcha not send: %s %s' % (resp.status, resp.reason))
return False
# ============== конец работы с антикапчёй =============
# Функция сохранения капчи, параметр - ссылка на картинку
def save_image(image_name):
browser = commands.browser
url = browser.get_url()
f_in = urllib2.urlopen(image_name)
image_data = f_in.read()
f_in.close()
f_out = file('Captcha.jpg', 'wb')
f_out.write(image_data)
f_out.close()
# Идём на страницу регистрации
go('http://mail.google.com/mail/signup')
# Ищем token капчи
html = show()
captchaToken = re.findall(r'src=\'https\:\/\/www\.google\.com\/accounts\/Captcha\?ctoken=(.*?)\'', html)
captchaURL = 'https://www.google.com/accounts/Captcha?ctoken='+captchaToken[0]
save_image(captchaURL) # Сохраняем капчу
code("200")
#showforms()
# отправляем капчу
cap_id = send_cap(key, fn)
if not cap_id:
print 'Не отправилось'
# получаем результат
status, text = get_cap_text(key, cap_id)
captchaText = text
# Заполняем форму регистрации
fv("2", "FirstName", first)
fv("2", "LastName", last)
fv("2", "Email", mail)
fv("2", "Passwd", passwd)
fv("2", "PasswdAgain", passwd)
fv("2", "questions", 'What is your primary frequent flyer number')
fv("2", "IdentityAnswer", '23')
fv("2", "newaccountcaptcha", captchaText)
submit('submitbutton')
code("200")
# Выводим распознанный текст капчи
print 'captcha: ' + captchaText
# Выводим в файл страницу, на которую попали после отправки формы
ft_out = file('goog.html', 'w')
ft_out.write(show())
ft_out.close()