我正在尝试使用python登录Instagram。我可以获取csrf令牌,但requests.Session().post()
似乎无法正确将登录数据发布到网站。我总是得到class="no-js not-logged-in client-root"
。我已经搜索了一段时间,还尝试登录一些似乎有效的随机站点。在登录方法中,我只启动一个requests.Session()
,然后以登录名和密码作为https://www.instagram.com/accounts/login/参数向data
发出发布请求。
def login(self):
with requests.Session() as s:
p = s.post(self.loginUrl, data=self.loginData, allow_redirects=True)
[也请不要告诉我使用Selenium,我严格要根据要求来做。
尝试使用此代码:
import requests
#Creating URL, usr/pass and user agent variables
BASE_URL = 'https://www.instagram.com/'
LOGIN_URL = BASE_URL + 'accounts/login/ajax/'
USERNAME = '****'
PASSWD = '*******'
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)\
Chrome/59.0.3071.115 Safari/537.36'
#Setting some headers and refers
session = requests.Session()
session.headers = {'user-agent': USER_AGENT}
session.headers.update({'Referer': BASE_URL})
try:
#Requesting the base url. Grabbing and inserting the csrftoken
req = session.get(BASE_URL)
session.headers.update({'X-CSRFToken': req.cookies['csrftoken']})
login_data = {'username': USERNAME, 'password': PASSWD}
#Finally login in
login = session.post(LOGIN_URL, data=login_data, allow_redirects=True)
session.headers.update({'X-CSRFToken': login.cookies['csrftoken']})
cookies = login.cookies
#Print the html results after I've logged in
print(login.text)
#In case of refused connection
except requests.exceptions.ConnectionError:
print("Connection refused")
我在this Youtube视频中找到了它。它对我有用,我希望它也对你有用。