2016-08-07 83 views
12

Próbuję napisać skrypt w języku Python, aby umożliwić mi zalogowanie się na moje konto fantasy football pod numerem https://fantasy.premierleague.com/, ale coś jest nie tak z moim logowaniem. Po zalogowaniu się w przeglądarce i sprawdzeniu szczegółów za pomocą narzędzi programistycznych Chrome, Uważam, że żądanie URL https://users.premierleague.com/accounts/login/ i wysłane dane formularza jest:Użyj modułu zapytań w Pythonie, aby zalogować się do najlepszej ligi fantasy Barclays?

csrfmiddlewaretoken:[My token] 
login:[My username] 
password:[My password] 
app:plfpl-web 
redirect_uri:https://fantasy.premierleague.com/a/login 

Istnieje również wiele nagłówków żądania:

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
Accept-Encoding:gzip, deflate, br 
Accept-Language:en-US,en;q=0.8 
Cache-Control:max-age=0 
Connection:keep-alive 
Content-Length:185 
Content-Type:application/x-www-form-urlencoded 
Cookie:[My cookies] 
Host:users.premierleague.com 
Origin:https://fantasy.premierleague.com 
Referer:https://fantasy.premierleague.com/ 
Upgrade-Insecure-Requests:1 
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 

Więc pisałem krótki skrypt w Pythonie przy użyciu żądania biblioteka, aby spróbować zalogować się i przejść do strony w następujący sposób:

import requests 
with requests.Session() as session: 
url_home = 'https://fantasy.premierleague.com/' 
html_home = session.get(url_home) 
csrftoken = session.cookies['csrftoken'] 
values = { 
    'csrfmiddlewaretoken': csrftoken, 
    'login': <My username>, 
    'password': <My password>, 
    'app': 'plfpl-web', 
    'redirect_uri': 'https://fantasy.premierleague.com/a/login' 
} 
head = { 
    'Host':'users.premierleague.com', 
    'Referer': 'https://fantasy.premierleague.com/', 
} 
session.post('https://users.premierleague.com/accounts/login/', 
      data = values, headers = head) 
url_transfers = 'https://fantasy.premierleague.com/a/squad/transfers' 
html_transfers = session.get(url_transfers) 
print(html_transfers.content) 

Na wydrukowanie zawartości moją prośbę postu, otrzymuję odpowiedź HTML kod 500 błędu z:

b'\n<html>\n<head>\n<title>Fastly error: unknown domain users.premierleague.com</title>\n</head>\n<body>\nFastly error: unknown domain: users.premierleague.com. Please check that this domain has been added to a service.</body></html>' 

Jeśli usunąć „host” z mojej głowy dict, otrzymuję odpowiedź HTML kod błędu 405 z:

b'' 

próbowałem tym różne kombinacje nagłówków żądania w głowie dict i nic nie wydaje się działać.

+0

Co się stało, gdy użyjesz 'premierleague.com' jako' Hosta'? –

+0

@ Orduan Otrzymuję tę samą wiadomość: nieznana domena premierleague.com –

+0

Witam. Czy wiesz jak aktualizować składy itp. Lub inicjować transfery za pomocą pythona? –

Odpowiedz

3

Następujące pracował dla mnie. Ja po prostu usunięte headers = head

session.post('https://users.premierleague.com/accounts/login/', 
      data = values) 

myślę, że starają się odebrać swój zespół programowo, jak ja. Twój kod pozwolił mi zacząć.

+1

dziękuję, to chyba działa. Właściwie to próbowałem wcześniej, ale kod HTML, który odesłał, nie zawierał w nim żadnych nazw graczy, więc założyłem, że to tylko dostarczenie mi strony głównej! Wygląda na to, że dane graczy nie są kodowane w kodzie HTML, ale może drukowane przez javascript? Pobrałem kod źródłowy w Google Chrome i nic nie pokazuje. Czy wiesz, jak uzyskać pełny kod HTML, aby można go przeanalizować i dokonać zmian odtwarzacza? –