Секреты автолюбителей

Автоматическая регистрация аккаунта на Яндекс





Как я обещала ранее, сегодня будем писать скрипт автоматической регистрации аккаунта на Яндекс. Так как я работаю на Python 2.7, то наш скрипт будем писать в соответствии с этой версией питона.

Следует отметить, что успех данной затеи заключается в том, чтобы с точки зрения Яндекса мы были обычным пользователем, то есть мы будем: посещать нужные страницы, посылать и получать куки, правильные заголовки и т.д.

Для разгадывания капчи будем использовать сервис antigate.com. Для работы с HTTP запросами нам понадобится дополнительная библиотека httplib2, в остальном мы будем использовать стандартные библиотеки. Начало нашего скрипта с используемыми модулями выглядит следующим образом:

# -*- coding: utf-8 -*- import urllib, urllib2, httplib, time, gzip, httplib2 import StringIO import HTMLParser import json import random import webbrowser import Cookie import urlparse

Итак, начнем. Оформим все в виде класса под название yandex, у которого будет несколько методов, а конструктор имеет следующий вид:

class yandex: def __init__(self): self.headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:26.0)\ Gecko/20100101 Firefox/26.0', 'Accept': 'text/html,application/xhtml+xml,application/xml;\ q=0.9,*/*;q=0.8', 'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3', 'Cache-Control': 'max-age=0', 'Connection': 'keep-alive', 'Host': ''} self.main_urls = ('www.yandex.ru','kiks.yandex.ru','passport.yandex.ru') self.cookies = [] self.main_params = urllib.urlencode({'mode': 'simplereg', 'origin': 'home_ru_hint', 'retpath': 'https://mail.yandex.ru/?origin=home_ru_hint' }) firstname, lastname = self.get_name() passw = ''.join([random.choice("abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ") \ for i in range(random.randint(8, 10))]) self.track_id, key = self.get_id_key() self.data = { 'track_id': self.track_id, 'language': 'ru', 'firstname': firstname, 'lastname': lastname, 'login': self.get_login(firstname, lastname), 'password': passw, 'password_confirm': passw, 'hint_question_id': 1, 'hint_question' : "", 'hint_answer': "Ответ", 'phone_number': "", 'answer': self.get_capcha(key), 'key': key, 'captcha_mode' : "text", 'eula_accepted': "on" }

В первом параметре класса задаются заголовки, имитирующие поведение браузера firefox, во втором - адреса яндекса, необходимые для регистрации, в третьем - пустой список для хранения куки, в четвертом - параметры адреса регистрационной страницы яндекса. Далее, в словаре data задаются параметры, которые передаются вместе с регистрационной формой. Первые из них firstname и lastname (имя и фамилия) задаются с помощью метода:

def get_name(self): f = open(r"firstnames.txt", "r") lines = f.readlines() N = len(lines) firstname = lines[random.randint(0,N-1)] f.close() f = open(r"lastnames.txt", "r") lines = f.readlines() N = len(lines) lastname = lines[random.randint(0,N-1)] f.close() return firstname, lastname

Данный метод случайным образом выбирает имя и фамилию из двух локальных файлов, содержащих распространенные мужские имена и фамилии.

Вернемся к конструктору класса. Здесь пароль для аккаунта генерируется случайным образом. После чего двум параметрам класса track_id и key значения задаются с помощью метода get_id_key().

Если мы зайдем на регистрационную страницу Яндекса, то увидим, что вместе с регистрационной формой передаются два скрытых параметра: track_id и key (ключ капчи). Эти данные нам нужно вытащить из страницы. Для этого напишем два метода класса, с помощью которых посетим несколько страниц Яндекса для получения нужных куки и с помощью стандартной библиотеки HTMLParser сделаем парсинг регистрационной страницы. У меня получились следующие два метода:

def get_id_key(self): self.get_cookies(self.main_urls[0],"","",self.headers,"GET") self.headers["Referer"] = "http://%s" % self.main_urls[0] self.headers["Cookie"] = '; '.join(self.cookies) self.get_cookies(self.main_urls[1],"/fu","",self.headers,"GET") self.headers["Cookie"] = '; '.join(self.cookies) self.headers["Host"] = self.main_urls[2] h = httplib.HTTPSConnection(self.main_urls[2]) h.request("GET", "/registration/mail", self.main_params, self.headers) resp = h.getresponse() data = resp.read() pars = parser() if resp.getheader('Content-Encoding') == 'gzip': buf = StringIO.StringIO(data) f = gzip.GzipFile(fileobj=buf) data = f.read() pars.feed(data) h.close() return pars.track_id, pars.keydef get_cookies(self,url,loc,par,head,type): self.headers["Host"] = url h = httplib.HTTPConnection(url) h.request(type, loc, par, head) resp = h.getresponse() C = Cookie.SimpleCookie() C.load(resp.getheader('set-cookie')) c = "; ".join(["%s=%s" % (k, C[k].value) for k in C.keys()]) self.cookies.append(c) h.close()

В первых пяти строчках метода get_id_key() с помощью метода get_cookies() мы посещаем две страницы яндекса, получаем куки и сохраняем их в списке. Для отправки и получения запросов используется стандартная библиотека httplib, для обработки куки - стандартная библиотека Cookie. Дальнейший код метода get_id_key() отвечает за парсинг регистрационной страницы, который осуществляется с помощью дополнительного класса parser:

class parser(HTMLParser.HTMLParser): def __init__(self): HTMLParser.HTMLParser.__init__(self) self.track_id = '' self.key = '' def handle_starttag(self, tag, attrs): if tag == "input" and "track_id" in attrs[1]: self.track_id = attrs[3][1] if tag == "input" and "key" in attrs[2]: self.key = attrs[3][1]

Вернемся к конструктору класса yandex. При формировании регистрационных данных (словарь data) переменной login присваивается значение с помощью метода get_login():

Mailbox@Reg

Mailbox@Reg – бесплатная программа под Windows для автоматической
регистрации почтовых аккаунтов. В данный момент Mailbox@Reg может ...
http://soft.l2-ru.com/

def get_login(self, first, last): headers = {'Content-type' : 'application/x-www-form-urlencoded; charset2=UTF-8', 'Accept': 'application/json, text/javascript, */*; q=0.01', 'X-Requested-With': 'XMLHttpRequest'} params = urllib.urlencode({'track_id': self.track_id, 'language': "ru", 'firstname': first, 'lastname': last}) h = httplib.HTTPSConnection(self.main_urls[2]) h.request("POST", "/registration-validations/suggest/", params, headers) resp = h.getresponse() data = resp.read() h.close() return json.loads(data)["logins"][0]

В этом методе делается запрос к скрипту яндекса, который по имени и фамилии формирует доступные email. На выходе мы получаем список из нескольких email и берем первый из предложенных.

Как я писала выше, для разгадывания капчи используем сервис antigate.com. Значение капчи получаем с помощью метода get_capcha(key), где key - ключ капчи, который мы вытащили из регистрационной страницы ранее.

Обзор программы DuVet — автоматическая регистрация в ...

8 фев 2010 ... Софт предназначен для автоматической регистрации аккаунтов, в
различных сервисах. Хотелось бы посвятить сегодняшний пост, ...
http://ruadvert.net/soft/179/

def get_capcha(self, key): url = 'https://i.captcha.yandex.net/image?key=%s' % key cap_text = capcha(url) if cap_text[0] != 'ERROR': return cap_text[1] else: webbrowser.open(url,2) c = raw_input() return c

В этом методе используется отдельная функция capcha(url), которая осуществляет соединение с сервисом antigate.com, передает ему адрес капчи и обрабатывает ответ от него. Вообще, данная функция была взята из API документации сервиса antigate.com.

def capcha(url): key = '********' #измените на свой ключ доступа к сервису antigate.com opener = urllib2.build_opener() page = opener.open(url) cap_pic = page.read() f = StringIO.StringIO() f.write(cap_pic) data = f.getvalue() f.close() boundary= '----------OmNaOmNaOmNamo123456' 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/png %s --%s-- ''' % (boundary, boundary, key, boundary, data, boundary) headers = {'Content-type' : 'multipart/form-data; boundary=%s' % boundary} h = httplib.HTTPConnection('antigate.com') h.request("POST", "/in.php", body, headers) resp = h.getresponse() data = resp.read() h.close() if resp.status == 200: d = data.split('|') if len(d) == 2: cap_id= int(d[1]) else: return ('ERROR', '') else: cap_id = False if not cap_id: return ('ERROR', '') time.sleep(5) res_url= 'http://antigate.com/res.php' res_url+= "?" + urllib.urlencode({'key': key, 'action': 'get', 'id': cap_id}) N, n = 60, 0 while n < N: res= urllib.urlopen(res_url).read() if res == 'CAPCHA_NOT_READY': time.sleep(1) n += 1 continue else: break res= res.split('|') if len(res) == 2: return tuple(res) else: return ('ERROR', res[0])

В последнее время на сервисе antigate.com в вечернее время заняты все операторы. В этом случае, если значение капчи невозможно получить, то метод get_captcha(key) открывает картинку в браузере и просит ввода ее значения  вручную.

Наконец, переходим к последнему и важному методу класса yandex - методу создания аккаунта. Следует отметить, что при удачной отправке регистрационной формы на яндексе производится множество редиректов по различным страница и адресам. В связи с этим мы будем использовать библиотеку httplib2. Данная библиотека хоть и поддерживает редиректы и умеет по ним автоматически переходить, однако мы будем отслеживать все редиректы вручную, т.к. переадресация производится по разным адресам и если в заголовках нет или не правильно задан параметр "Host", корректно зарегистрироваться не удастся.  Вообще, яндекс очень чувствителен к присылаемым заголовкам, при малейшей ошибке (отсутствие какого-либо параметра или неправильное его значение) регистрация не удастся. У меня получился следующий метод класса yandex, создающий аккаунт:

def create(self): params = urllib.urlencode(self.data) del(self.headers['Cache-Control']) loc = "/registration/mail?%s" % self.main_params self.headers['Referer'] = "https://%s%s" % (self.main_urls[2], loc) self.headers['Content-Type'] = "application/x-www-form-urlencoded" httplib2.debuglevel = 0 h = httplib2.Http(disable_ssl_certificate_validation=True) h.follow_redirects = False resp, content = h.request("https://%s%s" % (self.main_urls[2], loc), "POST", headers=self.headers, body=params) C = Cookie.SimpleCookie() C.load(resp['set-cookie']) c = "; ".join(["%s=%s" % (k, C[k].value) for k in C.keys()]) self.cookies.append(c) self.headers['Cookie'] ='; '.join(self.cookies) del(self.headers['Content-Type']) status = resp.status while status == 302: link = resp['location'] up = urlparse.urlparse(link) self.headers['Host'] = up[1] resp, content = h.request(link, "GET", headers=self.headers, redirections=0) status = resp.status if status == 200: print "login: %s" % self.data["login"] print "password: %s" % self.data["password"]

Если регистрация прошла успешно, на экран выводится логин и пароль для входа в созданный аккаунт :).

Скрипт автоматической регистрации вместе с дополнительными файлами вы можете скачать по ссылке (пароль на архив по запросу из комментария).

В следующей статье будем писать автоматическую активацию аккаунта на примере avito.ru  :).







Источник: http://afive.ru

Переделка двигателя ваз 2114

Вождение пикапа для начинающих игра. Экономичный кабриолет 2013 двигатель ваз 2114 фото.
}