我正在尝试从 chess.com 中读出我的一些统计数据。 我正在努力使用python登录。
我正在尝试按照这里的教程进行操作
我已经从登录页面中确定了以下标签。 _username
作为用户名,_password
作为密码,_token
作为隐藏令牌。
我的代码:
session_requests = requests.session()
login_url = 'https://www.chess.com/login'
result = session_requests.get(login_url)
tree = html.fromstring(result.text)
token = list(set(tree.xpath("//input[@name='_token']/@value")))[0]
payload = {
"_username": "ChristianSloper",
"_password": "mypasswordgoeshere",
"_token": token
}
result = session_requests.post( login_url, data = payload, headers = dict(referer=login_url), verify=True)
不幸的是,我只是被送回登录页面。 我对前端/web很陌生,很高兴得到任何帮助。
您的有效负载并不完全正确(其中缺少一些内容(,并且您似乎将 POST 请求发送到错误的 URL,请尝试以下代码:
session_requests = requests.session()
login_url = 'https://www.chess.com/login'
result = session_requests.get(login_url)
tree = html.fromstring(result.text)
token = list(set(tree.xpath("//input[@name='_token']/@value")))[0]
payload={"_username": "ChristianSloper",
"_password": "mypasswordgoeshere",
"login": '',
"_target_path": "https://www.chess.com/home",
"_token": token
}
session_requests.headers.update(dict(referer=login_url))
result = session_requests.post("https://www.chess.com:443/login_check", data = payload, verify=True)
希望这有帮助!
您发布到浏览器发布到"https://www.chess.com/login_check"而不是"https://www.chess.com/login"的错误网址 还要确保使用用户代理模拟浏览器。它看起来像这样
response = session.get(login_url, allow_redirects=True) # gets the login url data
soup = BeautifulSoup(response.content, "html.parser") # parses the html
token_input = soup.find('input', {'name': '_token'}) # finds the token
if token_input:
token = token_input.get('value')
# print("Token:", token)
else:
print("Token not found.")
login_data = {"_username": "username",
"_password": "password",
"login": '',
"_target_path": quote(game_url),
"_token": token
}
data_string = "&".join([f"{key}={value}" for key, value in
login_data.items()]) # formats the data into a string that can be sent to the server
print(data_string)
headers = {
"User-Agent": UserAgent().random,
"Referer": login_url
}
# Perform the login request
login_post = session.post(login_post_url, data=login_data, headers=headers, allow_redirects=True, verify=True)
print(login_post.status_code)
试试这段代码。也希望这有帮助!状态代码应为 302,因为它会将您重定向到家或任何地方。