使用python请求登录Mintos.com

使用python请求登录Mintos.com,python,authentication,web-scraping,python-requests,Python,Authentication,Web Scraping,Python Requests,我正在尝试编写一个小软件,它可以登录,并将帐户概览页面(成功登录后显示)保存在html文件中。我尝试了一些不同的方法,这是我目前的版本 import requests import sys import codecs sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach()) username = 'abc' password = '123' loginUrl = 'https://www.mintos.com/en/login'

我正在尝试编写一个小软件,它可以登录,并将帐户概览页面(成功登录后显示)保存在html文件中。我尝试了一些不同的方法,这是我目前的版本

import requests
import sys
import codecs

sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach())

username = 'abc'
password = '123'

loginUrl = 'https://www.mintos.com/en/login'

resp = requests.get(loginUrl, auth=(username, password))
file = codecs.open("mint.html", "w", "UTF-8")
file.write(resp.text)
file.close()
当我运行代码时,我只保存原始页面,而不是登录时应该保存的页面。我猜我把登录搞糟了(我的意思是…没有什么其他的事情要搞糟)。我已经在这个问题上花了很多令人尴尬的时间

编辑: 我还尝试了以下几点:

import requests
import sys
import codecs

sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach())

loginUrl = "https://www.mintos.com/en/login";
username = "abc"
password = "123"
payload = {"username": username, "password": password}


with requests.session() as s:
    resp = s.post(loginUrl, data = payload)
    file = codecs.open("mint.html", "w", "UTF-8")
    file.write(resp.text)
    file.close()
编辑2:另一个非工作版本,这次使用_csrf_令牌

with requests.session() as s:
    resp = s.get(loginUrl)
    toFind = '_csrf_token" value="'
    splited = resp.text.split(toFind)[1]
    _csrf_token = splited.split('"',1)[0]
    payload = {"_username": _username, "_password": _password, "_csrf_token": _csrf_token}

    final = s.post(loginUrl, data = payload)
    file = codecs.open("mint.html", "w", "UTF-8")
    file.write(final.text)
    file.close()
但我还是得到了同样的结果。不过,下载的页面与我提取的页面具有相同的标记


最终编辑:我成功了,现在我觉得自己很愚蠢。我需要使用“''作为我的登录名。

auth参数只是
HTTPBasicAuth
的简写,这不是大多数网站使用的。大多数网站使用cookie或会话数据将您的登录名/信息存储在计算机上,以便在您浏览页面时检查您是谁


如果你想登录该网站,你必须在登录表单上发出POST请求,然后存储(并在每次返回)他们将发送给你的cookies。此外,这意味着他们没有任何类型的“反机器人过滤器”(这使你无法在没有真正的浏览器的情况下登录,或者至少不那么容易).

参数
auth
只是
HTTPBasicAuth
的简写,这不是大多数网站使用的。大多数网站使用cookie或会话数据将您的登录/信息存储在计算机上,以便在您浏览页面时检查您是谁


如果你想登录该网站,你必须在登录表单上发出POST请求,然后存储(并在每次返回)他们将发送给你的cookies。此外,这意味着他们没有任何类型的“反机器人过滤器”(这使你无法在没有真正的浏览器的情况下登录,或者至少不那么容易).

没有意识到关于auth,很高兴知道。我已经尝试过类似的方法:导入请求导入sys导入codecs sys.stdout=codecs.getwriter(“utf-8”)(sys.stdout.detach())loginUrl=“”;username=“abc”password=“123”有效负载={“用户名”:username,“密码”:password}与请求一起会话()作为s:resp=s.post(loginUrl,data=payload)file=codecs.open(“mint.html”、“w”、“UTF-8”)file.write(resp.text)file.close()但这也不起作用。我已经更新了我的OP,添加了一个我尝试过的POST版本。这不起作用。别以为这是责备,但你知道HTML表单是如何工作的吗?mintos.com上的一个有字段
\u username
\u password
,你给了它们
username
password
的值,我也试过了。”有效载荷={“{u用户名”:用户名,“{u密码”:密码}”或为了一致性,有效载荷={“{u用户名”:{u用户名,“{u密码”:}“对我来说,结果没有任何变化。我只是验证了一下,在表单中,您有一个名为
\u csrf\u token
的字段,您也应该给出它。”。虽然我不太清楚服务器是如何处理的(你可能无法欺骗它),但我不知道关于auth,很高兴知道。我已经尝试过类似的方法:导入请求导入sys导入codecs sys.stdout=codecs.getwriter(“utf-8”)(sys.stdout.detach())loginUrl=“”;username=“abc”password=“123”payload={“username”:username,“password”:password}带有请求。session()为s:resp=s.post(loginUrl,data=payload)file=codecs.open(“mint.html”,“w”,“UTF-8”)file.write(resp.text)file.close(),但这也不起作用。我已更新了OP,添加了一个版本,但我尝试了post。这不起作用。不要把它看作是责备,但你知道HTML表单是如何工作的吗?mintos.com上的那一个有
\u用户名
\u密码
字段,你给它们的值是
用户名
密码
…我也试过了。“payload={{u username:username,“{u password:password}”或者,为了一致性,“payload={{u username:{u username,“{u password:{u password}”对我的结果没有任何改变。我只是验证了一下,在表单中,您有一个名为
\u csrf\u token
的字段,您也应该给出它。虽然我不太确定服务器是如何处理的(你可能无法欺骗它)。