使用Python的requests库无法登录网站

2024-05-31 16:09:22 发布

您现在位置:Python中文网/ 问答频道 /正文

编辑我认为问题是,在第一次打开网站时,您必须单击“我们的隐私政策已更新…”接受按钮。我现在正在研究如何使用python请求来“点击”这个按钮,但是这个按钮调用了一个javascript函数,所以我不确定是否可以只使用请求库。你知道吗

我正在尝试为此网站编写脚本:https://rocket-league.com/

我需要登录才能执行任务,但登录时遇到问题。你知道吗

我觉得好像我已经解释了所有正确的参数。我使用regex动态获取csrf\u令牌。也许我需要对饼干做点什么,但我不知道是什么?你知道吗

这是我第一次尝试写一个与网站互动的脚本,如果我太天真的话,我很抱歉。你知道吗

我很感激你的真知灼见,这些真知灼见不仅仅是在伪装我的愚蠢和/或懒惰。你知道吗

以下是我目前的代码:

import requests;
import re;

payload = {
    'csrf_token': '',
    'email': 'myemail',
    'password': 'mypassword',
    'submit': 'Login'
}

url = 'https://rocket-league.com/login'

with requests.Session() as s:
    r = s.get(url)

    m = re.search("<input type='hidden' name='csrf_token' value='(.+)'", r.text)
    if m: payload['csrf_token'] = m.group(1)
    else: print("couldnt find csrf_token")

    p = s.post('https://rocket-league.com/functions/login.php', data=payload)
    print(p.text)

运行这段代码会打印出仍然有登录表单的HTML,这意味着我没有被登录。你知道吗

当我在“开发人员工具”>;“网络”打开的情况下从浏览器登录时,我将获得以下信息以供发布请求:

标题:

Request URL: https://rocket-league.com/functions/login.php
Request method: POST
Status code: 302 Found
Version HTTP/2.0

曲奇:

__cfduid: d2c83b2c9ad728195366656a56592f6d71549577451
acceptedPrivacyPolicy: 2.0
euconsent: BObnsHAObnsHAABABAENCF-AAAAkF7_______9______9uz_Ov_v_f__33e8__9v_l_7_-___u_-33d4-_1vf99yfm1-7ftr3tp_87ues2_Xur__59__3z3_tphPhA
fantasy_rlcs_id: hA8fga9ghIgaFGA9
PHPSESSID: lrse3tgov95eg574sqga6la9jc

参数:

csrf_token: 3f2588113e8921f52dc3eb78e51246a1
email: myemail
password: mypassword
submit: Login

以下是登录表单的实际HTML:

<form class="rlg-form" method="post" action="/functions/login.php">
<input type="hidden" name="csrf_token" value="3accad82ad0957cab634f805a7e28beb">
<input class="rlg-input" type="email" name="email" placeholder="Email" required="">
<input class="rlg-input" type="password" name="password" placeholder="Password" autocomplete="off" required="">
<fieldset class="rlg-checkbox">
<input type="checkbox" name="rememberme" id="rememberme-login">
<label for="rememberme-login">Remember me?</label>
</fieldset>
<input class="rlg-btn-primary" type="submit" name="submit" value="Login">
</form>

Tags: namehttpscomtokeninputemailtypelogin