繁体   English   中英

Python请求无法登录

[英]Python requests fails to log in

我很欣赏你在这里做的事情。 通常我可以在Stackoverflow的帮助下弄清楚我的问题,但这次我被卡住了。 希望你能帮助我!

问题很简单:如何使用Python的请求登录这个网页

我的步骤:

  1. 获取登录网址
  2. 提供登录详细信息。 根据HTML,我需要提供“电子邮件”和“密码”。
  3. 创建会话并使用帖子登录
  4. 如果登录成功,请检查HTML

不幸的是,在这种情况下,简单的方法似乎不起作用。 例如, details的输出是:

<script>
    dataLayer = [{
        'environment': 'production',
        'loggedIn': '0',
        'userCode': '',
        'rank': '',
        'totalBalance': '0',
        'overAgeCasino': '0'
    }];
</script>

显然,如果登录成功, 'loggedIn' '0'应该变为'1'

在一个例子中,我发现你可能需要添加一个'csrftoken',并且这可以在HTML中找到'隐藏'类型。 但是,type ='hidden'部分中的名称似乎与此无关,也没有任何价值( 链接到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)

头:

{'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'}

如果有效或者您遇到其他问题,请告诉我。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM