无法使用请求登录Instagram



我正在尝试使用requests库登录Instagram。我成功地使用以下脚本,但是它不再起作用了。密码字段将加密(手动登录时检查开发工具(。

我试过:

import re
import requests
from bs4 import BeautifulSoup
link = 'https://www.instagram.com/accounts/login/'
login_url = 'https://www.instagram.com/accounts/login/ajax/'
payload = {
'username': 'someusername',
'password': 'somepassword',
'enc_password': '',
'queryParams': {},
'optIntoOneTap': 'false'
}
with requests.Session() as s:
r = s.get(link)
csrf = re.findall(r"csrf_token":"(.*?)"",r.text)[0]
r = s.post(login_url,data=payload,headers={
"user-agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36",
"x-requested-with": "XMLHttpRequest",
"referer": "https://www.instagram.com/accounts/login/",
"x-csrftoken":csrf
})
print(r.status_code)
print(r.url)

我发现使用开发工具:

username: someusername
enc_password: #PWD_INSTAGRAM_BROWSER:10:1592421027:ARpQAAm7pp/etjy2dMjVtPRdJFRPu8FAGILBRyupINxLckJ3QO0u0RLmU5NaONYK2G0jQt+78BBDBxR9nrUsufbZgR02YvR8BLcHS4uN8Gu88O2Z2mQU9AH3C0Z2NpDPpS22uqUYhxDKcYS5cA==
queryParams: {"oneTapUsers":"["36990119985"]"}
optIntoOneTap: false

如何使用请求登录Instagram?

您可以使用身份验证版本0- 纯密码,无加密:

import re
import requests
from bs4 import BeautifulSoup
from datetime import datetime
link = 'https://www.instagram.com/accounts/login/'
login_url = 'https://www.instagram.com/accounts/login/ajax/'
time = int(datetime.now().timestamp())
payload = {
'username': '<USERNAME HERE>',
'enc_password': f'#PWD_INSTAGRAM_BROWSER:0:{time}:<PLAIN PASSWORD HERE>',  # <-- note the '0' - that means we want to use plain passwords
'queryParams': {},
'optIntoOneTap': 'false'
}
with requests.Session() as s:
r = s.get(link)
csrf = re.findall(r"csrf_token":"(.*?)"",r.text)[0]
r = s.post(login_url,data=payload,headers={
"user-agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36",
"x-requested-with": "XMLHttpRequest",
"referer": "https://www.instagram.com/accounts/login/",
"x-csrftoken":csrf
})
print(r.status_code)
print(r.url)
print(r.text)

指纹:

200
https://www.instagram.com/accounts/login/ajax/
{"authenticated": true, "user": true, "userId": "XXXXXXXX", "oneTapPrompt": true, "reactivated": true, "status": "ok"}

为了做到这一点,你需要对他们的javascript做一些调查工作。

经过一番研究,我得到他们使用密钥长度为 256 位的 AES-GCM,他们有一些 100 字节的前缀,我仍然不知道它是什么,然后他们将密码连接到它并加密整个消息100 + len(password)

您可以阅读有关 AES-GCM 的信息,从他们的代码中获取密钥、iv 和其他数据,然后自己完成工作。

我希望我有所帮助,祝你好运:)

@Andrej Kesely 提供的上述代码对我来说失败了。 但是我通过在第一个获取"s.get(link("请求中设置标头(用户代理和引用器(对代码进行了一些更改。 如果你也像我一样收到错误。

csrf = re.findall(r"csrf_token":"(.*?)"",r.text)[0]
IndexError: list index out of range

那么这是我上面告诉您的解决方案。

import re
import requests
from bs4 import BeautifulSoup
from datetime import datetime
link = 'https://www.instagram.com/accounts/login/'
login_url = 'https://www.instagram.com/accounts/login/ajax/'
userAgent= "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"
time = int(datetime.now().timestamp())
payload = {
'username': '<Your_Username>',
'enc_password': f'#PWD_INSTAGRAM_BROWSER:0:{time}:<Your_Password>',
'queryParams': {},
'optIntoOneTap': 'false'
}
with requests.Session() as s:
s.headers= {"user-agent":userAgent}
s.headers.update({"Referer":link})
r = s.get(link)
print(r)
csrf = re.findall(r"csrf_token":"(.*?)"",r.text)[0]
r = s.post(login_url,data=payload,headers={
"user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36",
"x-requested-with": "XMLHttpRequest",
"referer": "https://www.instagram.com/accounts/login/",
"x-csrftoken":csrf
})
print(r.status_code)
print(r.url)
print(r.text)

请使用 python3 版本运行此脚本。 否则,您将收到更多"格式化字符串文字"和"属性错误:'datetime.datetime'对象没有属性'timestamp'"的错误。

像这样运行脚本。

python3 <your_script_name.py>

我希望这将解决您的问题。

你不能。Instagram 会在发送请求时加密密码。除非您能弄清楚他们加密它的方式并能够对您发送的密码执行相同的操作,否则您无法通过请求登录 instagram。

最新更新