使用python请求登录Instagram,cookie错误



我正试图在请求的帮助下登录Instagram。。。我遵循这个答案https://stackoverflow.com/a/65892587/13419605

这在我的笔记本电脑上运行得很好,但服务器端出现了这个错误。

环境:

  1. Ubuntu 18.04
  2. python 3.6.9
  3. 请求2.25.1

代码:

import requests
import datetime
session = requests.session()
def login(session, username, password):
"""Login to Instagram"""
time = str(int(datetime.datetime.now().timestamp()))
enc_password = f"#PWD_INSTAGRAM_BROWSER:0:{time}:{password}"

# set a cookie that signals Instagram the "Accept cookie" banner was closed
session.cookies.set("ig_cb", "2")
session.headers.update({'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/59.0.3071.115 Safari/537.36'})
session.headers.update({'Referer': 'https://www.instagram.com'})
res = session.get('https://www.instagram.com')
csrftoken = None
for key in res.cookies.keys():
if key == 'csrftoken':
csrftoken = session.cookies['csrftoken']
session.headers.update({'X-CSRFToken': csrftoken})
login_data = {'username': username, 'enc_password': enc_password}
login = session.post('https://www.instagram.com/accounts/login/ajax/', data=login_data, allow_redirects=True)
session.headers.update({'X-CSRFToken': login.cookies['csrftoken']})
cookies = login.cookies
print(login.text)
#session.close()

login(session, 'username', 'password')

错误:

Traceback (most recent call last):
File "login.py", line 38, in <module>
login(session, 'username', 'password')
File "login.py", line 30, in login
session.headers.update({'X-CSRFToken': login.cookies['csrftoken']})
File "/django/venv/lib/python3.6/site-packages/requests/cookies.py", line 328, in __getitem__
return self._find_no_duplicates(name)
File "/django/venv/lib/python3.6/site-packages/requests/cookies.py", line 399, in _find_no_duplicates
raise KeyError('name=%r, domain=%r, path=%r' % (name, domain, path))
KeyError: "name='csrftoken', domain=None, path=None"

这是因为登录cookie中没有csrftoken。Instagram阻止来自服务器的请求。使用代理可能会有所帮助。

最新更新