# -*- coding: utf-8 -*- # Copyright(C) 2008-2011 Romain Bignon # # This file is part of weboob. # # weboob is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # weboob is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with weboob. If not, see . import re import mechanize from weboob.tools.mech import ClientForm from weboob.tools.browser import BrowserIncorrectPassword from weboob.backends.aum.exceptions import AdopteBanned from weboob.capabilities.account import AccountRegisterError from .base import PageBase from .home import HomePage from ..captcha import Captcha class LoginPage(HomePage): def login(self, login, password): try: self.browser.select_form(name="form_login") except mechanize._mechanize.FormNotFoundError: return self.browser['login'] = login self.browser['password'] = password self.browser.submit() # submit current form class RegisterPage(PageBase): def on_loaded(self): display_errors = False for div in self.document.getElementsByTagName('div'): if div.getAttribute('class') == 'balloon': display_errors = True break if not display_errors: return errors = [] for script in self.document.getElementsByTagName('script'): for child in script.childNodes: if child and child.data.find('dispErrors') >= 0: for m in re.finditer('"(\w+)": "(.*)",', child.data): errors.append(m.group(2)) raise AccountRegisterError(u'Unable to register account: %s' % ', '.join(errors)) def register(self, password, sex, birthday_d, birthday_m, birthday_y, zipcode, country): """ Form name=register (#1) ## ## __Name__________________ __Type___ __ID________ __Value__________________ 1 sent1time hidden (None) 2 sex radio sex-0 [] of ['0', '1'] 3 birthday0 select birthday0 ['0'] of ['0', '1', '2', '3', '4', ' ... 4 birthday1 select birthday1 ['0'] of ['0', '1', '2', '3', '4', ' ... 5 birthday2 select birthday2 ['0'] of ['0', '1992', '1991', '1990 ... 6 country select country ['0'] of ['0', 'fr', 'be', 'ch', 'ca'] 7 zip text zip 8 email text email 9 pass password pass 10 pass_retype password pass_retype 11 captcha text captcha 12 swear_adult checkbox swear_adult [] of ['on'] 13 want_goods checkbox want_goods [] of ['on'] """ c = Captcha(self.browser.openurl('/captcha.php')) self.browser.select_form(name='register') self.browser.set_all_readonly(False) try: self.browser['sex'] = [str(sex)] except ClientForm.ItemNotFoundError: raise AccountRegisterError('Please give a right sex! (1 or 0)') try: self.browser['birthday0'] = [str(birthday_d)] self.browser['birthday1'] = [str(birthday_m)] self.browser['birthday2'] = [str(birthday_y)] except ClientForm.ItemNotFoundError: raise AccountRegisterError('Please give a right birthday date!') try: self.browser['country'] = [str(country)] except ClientForm.ItemNotFoundError: raise AccountRegisterError('Please select a right country!') self.browser['zip'] = str(zipcode) self.browser['email'] = self.browser.username self.browser['pass'] = password self.browser['pass_retype'] = password self.browser['captcha'] = c.text self.browser['swear_adult'] = ['on'] self.browser['want_goods'] = [] self.browser.submit() class RegisterWaitPage(PageBase): pass class RegisterConfirmPage(PageBase): pass class RedirectPage(PageBase): def on_loaded(self): for link in self.browser.links(): print link self.browser.location('/wait.php') class BanPage(PageBase): def on_loaded(self): raise AdopteBanned('Your IP address is banned.') class ShopPage(PageBase): def on_loaded(self): self.browser.location('http://www.adopteunmec.com/account.php') class ErrPage(PageBase): def on_loaded(self): raise BrowserIncorrectPassword('Incorrect login/password') class InvitePage(PageBase): MYID_REGEXP = re.compile("http://www.adopteunmec.com/\?mid=(\d+)") def get_my_id(self): fonts = self.document.getElementsByTagName('font') for font in fonts: m = self.MYID_REGEXP.match(font.firstChild.data) if m: return m.group(1) self.browser.logger.error("Error: Unable to find my ID") return 0