Python 请求登录失败
Python requests fails to log in
感谢您在这里所做的一切。通常我能够在 Whosebug 的帮助下解决我的问题,但这次我被卡住了。希望你能帮助我!
问题很简单:如何使用 Python 的请求?
登录 this webpage
我的步数:
- 获取登录名url
- 提供登录详细信息。根据HTML,我需要提供一个'email'和一个'password'。
- 创建一个session并使用post登录
- 检查HTML是否登录成功
不幸的是,这种简单的方法似乎在这种情况下不起作用。比如details
的输出是:
<script>
dataLayer = [{
'environment': 'production',
'loggedIn': '0',
'userCode': '',
'rank': '',
'totalBalance': '0',
'overAgeCasino': '0'
}];
</script>
显然,如果登录成功,'loggedIn'
的 '0'
应该更改为 '1'
。
在一个示例中,我发现您可能必须添加一个 'csrftoken',这可以在 HTML 中作为 'hidden' 类型找到。然而,type='hidden'部分的名称似乎与此无关,也没有值(link to screenshot of HTML)。
我在其他地方读到 CSFR 令牌也存储在 CookieJar 中,但它不在那里:
<RequestsCookieJar[<Cookie PHPSESSID=5dib6cf6kpvf29dsn725ljcec7 for .napoleongames.be/>, <Cookie locale=en_GB for .napoleongames.be/>, <Cookie user=false for .napoleongames.be/>]>
我很难相信登录是不可能的,但我 运行 没有想法。如果有人知道如何用 urllib(2) 来做,那也是有用的。我宁愿不使用 Selenium,因为我无法顺利 运行 它。
代码:
import requests
from bs4 import BeautifulSoup
from datetime import date
date_str = str(date.today())
login_url = 'https://en-gb.sports.napoleongames.be/user/login'
protected_url = 'proctected_url'
payload = {'email': 'address@example.com',
'password': '*********'}
with requests.Session() as session:
session.get(login_url)
login_page = session.post(login_url,
data=payload)
html_body = BeautifulSoup(login_page.content, 'html.parser').find(
name='body', attrs={'id': 'user_login'})
details = html_body.findAll('script')[0]
page = session.get(protected_url)
Headers:
{'Date': 'Wed, 06 Sep 2017 23:45:52 GMT', 'Server': 'Apache', 'Expires': 'Thu, 19 Nov 1981 08:52:00 GMT', 'Cache-Control': 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0', 'Pragma': 'no-cache', 'X-Frame-Options': 'SAMEORIGIN', 'X-Cache-Page': 'MISS', 'Set-Cookie': 'locale=en_GB; Expires=Mon, 05-Mar-2018 23:45:52 GMT; Domain=.napoleongames.be; Path=/, user=false; expires=Mon, 05-Mar-2018 23:45:52 GMT; Max-Age=15552000; path=/; domain=.napoleongames.be, loyalty=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0; path=/; domain=.napoleongames.be', 'Strict-Transport-Security': 'max-age=15768000', 'Vary': 'Accept-Encoding', 'Content-Encoding': 'gzip', 'Content-Length': '10840', 'Connection': 'close', 'Content-Type': 'text/html'}
提交表单时,您应该考虑表单标签内的其他字段,而不仅仅是您需要填写的字段。在这种情况下,当您查看页面源代码时,还有一个字段在登录时被填充。
您可以尝试将其添加到您的负载中:
payload = {'email': 'address@example.com',
'password': '*********'
'buttons_app_service_user_login[buttonClicked]': 'buttons_app_service_user_login-save'}
让我知道这是否有效,或者如果您遇到其他问题。
感谢您在这里所做的一切。通常我能够在 Whosebug 的帮助下解决我的问题,但这次我被卡住了。希望你能帮助我!
问题很简单:如何使用 Python 的请求?
登录 this webpage我的步数:
- 获取登录名url
- 提供登录详细信息。根据HTML,我需要提供一个'email'和一个'password'。
- 创建一个session并使用post登录
- 检查HTML是否登录成功
不幸的是,这种简单的方法似乎在这种情况下不起作用。比如details
的输出是:
<script>
dataLayer = [{
'environment': 'production',
'loggedIn': '0',
'userCode': '',
'rank': '',
'totalBalance': '0',
'overAgeCasino': '0'
}];
</script>
显然,如果登录成功,'loggedIn'
的 '0'
应该更改为 '1'
。
在一个示例中,我发现您可能必须添加一个 'csrftoken',这可以在 HTML 中作为 'hidden' 类型找到。然而,type='hidden'部分的名称似乎与此无关,也没有值(link to screenshot of HTML)。 我在其他地方读到 CSFR 令牌也存储在 CookieJar 中,但它不在那里:
<RequestsCookieJar[<Cookie PHPSESSID=5dib6cf6kpvf29dsn725ljcec7 for .napoleongames.be/>, <Cookie locale=en_GB for .napoleongames.be/>, <Cookie user=false for .napoleongames.be/>]>
我很难相信登录是不可能的,但我 运行 没有想法。如果有人知道如何用 urllib(2) 来做,那也是有用的。我宁愿不使用 Selenium,因为我无法顺利 运行 它。
代码:
import requests
from bs4 import BeautifulSoup
from datetime import date
date_str = str(date.today())
login_url = 'https://en-gb.sports.napoleongames.be/user/login'
protected_url = 'proctected_url'
payload = {'email': 'address@example.com',
'password': '*********'}
with requests.Session() as session:
session.get(login_url)
login_page = session.post(login_url,
data=payload)
html_body = BeautifulSoup(login_page.content, 'html.parser').find(
name='body', attrs={'id': 'user_login'})
details = html_body.findAll('script')[0]
page = session.get(protected_url)
Headers:
{'Date': 'Wed, 06 Sep 2017 23:45:52 GMT', 'Server': 'Apache', 'Expires': 'Thu, 19 Nov 1981 08:52:00 GMT', 'Cache-Control': 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0', 'Pragma': 'no-cache', 'X-Frame-Options': 'SAMEORIGIN', 'X-Cache-Page': 'MISS', 'Set-Cookie': 'locale=en_GB; Expires=Mon, 05-Mar-2018 23:45:52 GMT; Domain=.napoleongames.be; Path=/, user=false; expires=Mon, 05-Mar-2018 23:45:52 GMT; Max-Age=15552000; path=/; domain=.napoleongames.be, loyalty=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0; path=/; domain=.napoleongames.be', 'Strict-Transport-Security': 'max-age=15768000', 'Vary': 'Accept-Encoding', 'Content-Encoding': 'gzip', 'Content-Length': '10840', 'Connection': 'close', 'Content-Type': 'text/html'}
提交表单时,您应该考虑表单标签内的其他字段,而不仅仅是您需要填写的字段。在这种情况下,当您查看页面源代码时,还有一个字段在登录时被填充。
您可以尝试将其添加到您的负载中:
payload = {'email': 'address@example.com',
'password': '*********'
'buttons_app_service_user_login[buttonClicked]': 'buttons_app_service_user_login-save'}
让我知道这是否有效,或者如果您遇到其他问题。