1 回答
TA贡献2041条经验 获得超4个赞
您的问题是您将错误发送FIELDS到错误URL。
在 Chrome/Firefox 中使用DevTools,您可以看到浏览器将字段login, password(而不是loginUsername, loginPassword)发送到https://users.premierleague.com/accounts/login/
import requests
session = requests.Session()
#session.headers.update({'user-agent': 'Mozilla/5.0'})
data = {
"login" : "james.bond@mi6.com",
"password" : "007",
"app" : "plfpl-web",
"redirect_uri" : "https://fantasy.premierleague.com"
}
#url = "https://fantasy.premierleague.com"
#r = session.get(url)
#print(r.status_code)
url = "https://users.premierleague.com/accounts/login/"
r = session.post(url, data=data)
print(r.status_code) # 200
#print(r.text)
很多时候,从真正的浏览器中使用 User-Agent 标头是件好事——或者至少'Mozilla/5.0'获取主页以获取新的 cookie。对于此页面,它不是必需的,但我将代码保留在注释中。
编辑:(2020.07.10)
登录代码。
顺便说一句:在正确的登录服务器重定向到不同的 URL 之后,所以我使用这个事实来检查我是否已登录。
import requests
from bs4 import BeautifulSoup
session = requests.Session()
#session.headers.update({'user-agent': 'Mozilla/5.0'})
login_url = "https://users.premierleague.com/accounts/login/"
# GET page with form
r = session.get(login_url, data=data)
soup = BeautifulSoup(r.content)
data = {
"login" : "your_login",
"password" : "your_password",
}
# get values from form (except empty places for login and password)
for item in soup.find_all('input'):
key = item['name']
value = item.get('value') # I use get('value') instead of ['value'] to get None instead of error when there is no value like for login and password.
if value:
data[key] = value
print(key, '=', value)
# POST form data to login
r = session.post(login_url, data=data)
# check if url is different
print(r.url)
print(r.url != login_url)
添加回答
举报