Open gumalobato opened 3 years ago
Pessoal, estou tendo o mesmo problema na autenticação, alguém conseguiu descobrir o que está acontecendo.
ainda não peguei novamente pra estudar o problema com o final da temporada. Porém, o que havia visto é que o problema tá relacionado ao captcha.
Faz sentido, vou tentar dar uma olhada também por esse caminho, estou precisando resolver esse problema para fazer o fechamento da minha liga. Se descobrir algo me avise, por favor.
abs e obrigado até aqui.
Boa tarde @aebrag conseguiu algo relacionado a autenticação do rCaptcha? Tentei algumas formas aqui e ainda n foi possível. Se alguém tiver um caminho bom a seguir agradeço.
Ei @gumalobato, também não consegui, todas as minhas tentativas deram errado. Achei um fórum que a turma conseguiu resolver mas usando C#, porém preciso em Python e não consegui replicar. A turma fala em pegar o "GLBID" dos cookies e enviar junto dos request pra autenticar, mas não sei fazer isso. Dá uma no fim desse link aqui: https://gitter.im/cartrolandofc/dev
@aebrag Acabou que coincidentemente eu vi lá também sem ter lido seu comentário, mas seguindo as dicas desse fórum consegui puxar as informações que precisava. Claro, ainda está "manual" mas já é algo que pra mim resolve, já que meu script é somente para puxar as informações de pontuação e patrimônio para controle interno de 2 ligas que administro.
Para conseguir puxar essas informações eu: 1 - loguei no browser mesmo com meu login do cartola 2 - Peguei o GLBID -> Para isso pode ser de várias formas, a mais fácil é no proprio link de informações do teu user: https://login.globo.com/api/user. Outra forma que peguei é no arquivo sqlite de cookies do navegador (uso o firefox), fica em %APPDATA%/Mozilla/Firefox/Profiles/ ... /cookies (caso utilize Windows). Pra essa última pode usar DB Browser Sqlite (mais fácil) ou até mesmo o notepad. 3 - Insiro isso no meu script, a propria biblioteca aqui já esperava na chamada da Api() em self._glbid = None, substitui ela pelo cookie que peguei
def __init__(self, email=None, password=None, attempts=1, redis_url=None, redis_timeout=10):
""" Instancia um novo objeto de cartolafc.Api.
Args:
email (str): O e-mail da sua conta no CartolaFC. Requerido se o password for informado.
password (str): A senha da sua conta no CartolaFC. Requerido se o email for informado.
attempts (int): Quantidade de tentativas que serão efetuadas se os servidores estiverem sobrecarregados.
redis_url (str): URL para conectar ao servidor Redis, exemplo: redis://user:password@localhost:6379/2.
redis_timeout (int): O timeout padrão (em segundos).
Raises:
cartolafc.CartolaFCError: Se as credenciais forem inválidas ou se apenas um dos
dois argumentos (email e password) for informado.
"""
self._api_url = 'https://api.cartolafc.globo.com'
self._auth_url = 'https://login.globo.com/api/authentication'
self._email = email
self._password = password
self._glb_id = '<insira aqui o cookie>' # <<<<<<<<<<<<<<<--------------------modificação
#self._glb_id = None
self._attempts = attempts if isinstance(attempts, int) and attempts > 0 else 1
self._redis_url = redis_url
self._redis_timeout = redis_timeout if isinstance(redis_timeout, int) and redis_timeout > 0 else 10
self._redis = None`
PS.: Dessa forma tá hardcode e claro, só vai funcionar enquanto esse cookie tiver vivo, se quiser melhorar pode chamar a autenticação da api passando o parâmetro glbid no construtor e setando ele na variável.
Feito isso, na classe principal ao inves de chamar:
api = Api(email=xxxxxx@xxxxx.com, password=xxxxxxx)
chamo só:
api = Api()
OU, quando alterar a chamada do construtor chamar:
api = Api(glbid='<cookie>'
Aí é só puxar a info q quiser tipo:
api.liga('nome_da_liga')
print(liga)
Valeu @gumalobato vou fazer um teste aqui e aviso se deu certo. Se tiver alguma dificuldade faço contato contigo.
@gumalobato, pra mim continua dando CaptchaBlank, como você resolveu na função set_credentials()? Tô colando ai duas formas diferentes que tentei, mas sem sucesso.
@aebrag Alterei somente a chamada a api, adicionando o atributo glb_id:
segue um exemplo:
@gumalobato e onde você passa o e-mail e senha? Não precisa? Entendi que o glb_id que pegamos do cookie, depois de logado, é só o captcha. Fiz a alteração no código exatamente como seu exemplo acima, porém quando faço a chamada ganho um erro de autenticação.
Agora se faço a chamada passando o e-mail, senha e o glb_id, ganho um erro de montagem do JSON na chamada do request.json().
@aebrag Esse processo com o cookie é meio q uma "gambiarra" somente para conseguir logar através de um cookie de um login prévio da mesma maquina. Não pode excluir o cookie, ou se excluir vai ter que atualizar logando manualmente no site antes, pegando o glbd_id e passando na chamada da autenticação.
Se fizer dessa forma, não precisa passar o login e senha.
Mostra como fizeste o teu def __init__
da Api
@gumalobato, me desculpe pela falta de atualização. O código está funcionando perfeitamente. Fiz conforme sua sugestão. Valeu!
Estou usando da forma que o amigo citou acima, pegando manualmente o glb_id do cookie e colocando manualmente no código e venho utilizando dessa forma desde então, mas alguem conseguiu alguam outra forma "sem gambiarra" pra fazer?
Alguns aplicativos que utilizo o cartola, ao fazer o login ele abre a janela de login da globo para o usuario se logar e depois automaticamente volta para o app já logado. Alguem saberia me explicar como faço isso?
Aparentemente desde hoje começou a ocorrer erro de autenticação ao tentar logar via api:
api = cartolafc.Api(email=xxxxxxxx@xxxxx.xxx', password='xxxxxxxxxxx')