我使用python用于网络刮但Instagram的检测设备,如:
设备·Python请求·x City,x
并阻止连接,
我该如何解决?
我尝试使用fake_useragent
或browser manual setting
代码:
def login(self):
print ('Trying to login as %s...\n' % (self.username))
self.s.headers.update({
'Accept': '*/*',
'Accept-Encoding' : 'gzip, deflate',
'Accept-Language' : 'en-US;q=0.6,en;q=0.4',
'authority': 'www.instagram.com',
'ContentType' : 'application/x-www-form-urlencoded',
'Connection': 'keep-alive',
'Host' : 'www.instagram.com',
'origin': 'https://www.instagram.com',
'Referer': 'https://www.instagram.com',
'Upgrade-Insecure-Requests':'1',
'UserAgent':self.ua.random,
'x-instagram-ajax':'1',
'X-Requested-With': 'XMLHttpRequest'
})
r = self.s.get('https://www.instagram.com/')
self.s.headers.update({'X-CSRFToken' : r.cookies.get_dict()['csrftoken']})
r = self.s.post('https://www.instagram.com/accounts/login/ajax/', data={'username':self.username, 'password':self.password}, allow_redirects=True)
self.s.headers.update({'X-CSRFToken' : r.cookies.get_dict()['csrftoken']})
loginstatus = json.loads(r.text)
if loginstatus['authenticated'] == True :
print ('Login Success')
self.login_status=True
return True
elif loginstatus['authenticated'] == False :
return False
答案 0 :(得分:0)
其中包含很多JavaScript。使用python requests
,您可以直接从Web服务器获取HTTP响应。它必须在浏览器中呈现,才能从页面获取所有信息和内容。
解决此问题的最简单方法是使用selenium.
答案 1 :(得分:0)
您可以尝试不同的方法。尝试使用您的浏览器之一复制User-Agent
,如果它不起作用,可能是因为它使用某些cookie或localStorage来存储有关登录的信息。尝试在浏览器上检查cookie,并按域对它们进行过滤,然后将值复制到字典中。
cookies = {"key": "value"} #Dictionary as cookies
credentials = {'username': username, 'password': password}
r = requests.post("http://examples.com",
cookies=cookies,
data=credentials,
allow_redirects=True)