Source code for pyitau.main

import requests
from cached_property import cached_property

from pyitau import pages

ROUTER_URL = "https://internetpf5.itau.com.br/router-app/router"


[docs]class Itau: def __init__(self, agency, account, account_digit, password, holder_name=None): self.agency = agency self.account = account self.account_digit = account_digit self.password = password self.holder_name = holder_name self._session = requests.Session() self._session.headers = { **self._session.headers, "User-Agent": ( "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 " "(KHTML, like Gecko) Ubuntu Chromium/72.0.3626.121 " "Chrome/72.0.3626.121 Safari/537.36" ), }
[docs] def authenticate(self): self._authenticate2() self._authenticate3() self._authenticate4() self._authenticate5() self._authenticate6() self._authenticate7() self._authenticate8() self._authenticate9()
[docs] def get_credit_card_invoice(self, card_name=None): """ Get and return the credit card invoice. """ response = self._session.post( ROUTER_URL, headers={ "op": self._menu_page.checking_cards_op, "X-FLOW-ID": self._flow_id, "X-CLIENT-ID": self._client_id, "X-Requested-With": "XMLHttpRequest", }, ) card_details = pages.CardDetails(response.text) response = self._session.post( ROUTER_URL, headers={"op": card_details.invoice_op}, data={"secao": "Cartoes", "item": "Home"}, ) cards = response.json()["object"]["data"] self._session.post( ROUTER_URL, headers={"op": card_details.invoice_op}, data={"secao": "Cartoes:MinhaFatura", "item": ""}, ) if not card_name: card_id = cards[0]["id"] else: card_id = next(c for c in cards if c["nome"] == card_name)["id"] response = self._session.post( ROUTER_URL, headers={"op": card_details.full_statement_op}, data=card_id ) return response.json()
[docs] def get_statements(self, days=90): """ Get and return the statements of the last days. """ response = self._session.post( ROUTER_URL, data={"periodoConsulta": days}, headers={ "op": self._checking_full_statement_page.filter_statements_by_period_op }, ) return response.json()
[docs] def get_statements_from_month(self, month=1, year=2001): """ Get and return the full statements of a specific month. """ if year < 2001: raise Exception(f"Invalid year {year}.") if month < 1 or month > 12: raise Exception(f"Invalid month {month}.") response = self._session.post( ROUTER_URL, data={"mesCompleto": "%02d/%d" % (month, year)}, headers={ "op": self._checking_full_statement_page.filter_statements_by_month_op }, ) return response.json()
def _authenticate2(self): response = self._session.post( ROUTER_URL, data={ "portal": "005", "pre-login": "pre-login", "tipoLogon": "7", "usuario.agencia": self.agency, "usuario.conta": self.account, "usuario.dac": self.account_digit, "destino": "", }, ) page = pages.FirstRouter(response.text) self._session.cookies.set("X-AUTH-TOKEN", page.auth_token) self._op2 = page.secapdk self._op3 = page.secbcatch self._op4 = page.perform_request self._flow_id = page.flow_id self._client_id = page.client_id def _authenticate3(self): self._session.post( ROUTER_URL, headers={ "op": self._op2, "X-FLOW-ID": self._flow_id, "X-CLIENT-ID": self._client_id, "renderType": "parcialPage", "X-Requested-With": "XMLHttpRequest", }, ) def _authenticate4(self): self._session.post(ROUTER_URL, headers={"op": self._op3}) def _authenticate5(self): response = self._session.post(ROUTER_URL, headers={"op": self._op4}) page = pages.SecondRouter(response.text) self._op5 = page.op_sign_command self._op6 = page.op_maquina_pirata self._op7 = page.guardiao_cb def _authenticate6(self): self._session.post(ROUTER_URL, headers={"op": self._op5}) def _authenticate7(self): self._session.post(ROUTER_URL, headers={"op": self._op6}) def _authenticate8(self): response = self._session.post(ROUTER_URL, headers={"op": self._op7}) page = pages.ThirdRouter(response.text) if self.holder_name and page.has_account_holders_form: holder, holder_index = page.find_account_holder(self.holder_name) self._session.post( ROUTER_URL, headers={"op": page.op}, data={ "nomeTitular": holder, "indexTitular": holder_index, }, ) self._authenticate6() self._authenticate7() response = self._session.post(ROUTER_URL, headers={"op": self._op7}) page = pages.Password(response.text) self._letter_password = page.letter_password(self.password) self._op8 = page.op def _authenticate9(self): response = self._session.post( ROUTER_URL, headers={"op": self._op8}, data={"op": self._op8, "senha": self._letter_password}, ) self._home = pages.AuthenticatedHome(response.text) @cached_property def _menu_page(self): self._session.post( ROUTER_URL, headers={"op": self._home.op, "segmento": "VAREJO"} ) response = self._session.post(ROUTER_URL, headers={"op": self._home.menu_op}) return pages.Menu(response.text) @cached_property def _checking_menu_page(self): response = self._session.post( ROUTER_URL, headers={"op": self._menu_page.checking_account_op} ) return pages.CheckingAccountMenu(response.text) @cached_property def _checking_statements_page(self): response = self._session.post( ROUTER_URL, headers={"op": self._checking_menu_page.statements_op} ) return pages.CheckingAccountStatements(response.text) @cached_property def _checking_full_statement_page(self): response = self._session.post( ROUTER_URL, headers={"op": self._checking_statements_page.full_statement_op}, ) return pages.CheckingAccountFullStatement(response.text)