我正在履行订单,我需要通过脚本登录网站(只有requests,没有Selenium!)但无论我如何尝试,我都无法登录。答案来了
{'Message': 'Помилка авторизації: Логін або пароль зазначений невірно', 'Status': 'Error', 'ErrorCode': 2},虽然密码是正确的,但我可以通过网站登录,或者有时会得到:
Сессия была закрыта или неактивна.
如果您Network在浏览器中打开它并查看POST请求发送的数据,您会发现由于某种原因,它不是传输的密码,而是 32 个字符的值,据我了解session_id,但是如果您发送它,那么它也不会授权。什么时候需要为POST-request 传递真实密码?在检查器中,没有关于传输我的真实密码(它仅由 6 位或 8 位数字组成)的消息。

据我了解,您需要发出 1 个POST请求来获取sesion_id,然后是第二个 - 授权。session_id据我了解,这是您需要传输才能接收的数据:
编码:
import requests
user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
session = requests.Session()
session.headers.update({'User-Agent': user_agent})
url = "https://mygreenway.co.ua/s/l/"
session.headers.update({'Referer': url})
auth = {
"type": "auth",
"action": "sessionkey"
}
ses = session.post(url, data=auth)
key = ses.json()['Key']
print(key)
data = {
"type": "auth",
"action": "login",
"REMEMBER": "0",
"NAME": "1234567",
"PASSWORD": key
}
ses2 = session.post('https://mygreenway.co.ua/s/l/', data=data)
print(ses2.text)
with open("result.html", "w", encoding="utf-8") as f:
f.write(ses2.text)
session.close()
UPD。我挖得更深了,看看请求是如何通过 JavaScript 实现的。在那里,考虑到 MD5 散列来传输密码,但即使创建了这样的散列,它仍然无法授权。也许我错误地收集了这个哈希值。我会尝试
req = {method:'post', dataType:'json', data:{type:'auth', action:'login', REMEMBER:($('#remembermeModal').prop('checked')==true?1:0), NAME:$('#nameModal').val(), PASSWORD:(MD5(key+MD5($('#passwordModal').val())))}};

问题通过以下方式解决:
我查看
JavaScript了网站上的代码req = {method:'post', dataType:'json', data:{type:'auth', action:'login', REMEMBER:($('#remembermeModal').prop('checked')==true?1:0), NAME:$('#nameModal').val(), PASSWORD:(MD5(key+MD5($('#passwordModal').val())))}};并看到
POST-request 的密码应该以以下格式发送:MD5('session_id' + MD5('your_passwd'))最终代码如下: