将上面箭头所指的位置勾选上,表示显示持续日志。
然后输入账号密码,点击登录按钮,可以看到所有的请求过程。
点击这个请求。
url:
Headers和Form Data的信息如下所示:
从上面的观察分析中,只有cookies和authenticity_token无法直接构造,其余的都有。
还记得不记得我们刚才的操作?在我们点击登录按钮之前,我们已经访问了一个login页面:
此页面是通过get方式访问的,当我们点击登录按钮之后,Cookies和authenticity——token一定是在这个时候设置的。
这样,我们就看到了设置cookies的过程,那么authenticity是在标签中存在的,是一个隐藏式的表单元素。
此时,所有的登录信息,我们已经拿到,接下来就是我们用代码模仿这个过程即可。
代码如下:
import requests from lxml import etree class Login(object): def __init__(self): self.headers= { "Referer":"https://github.com/", "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36", "Host":"github.com", } self.login_url = "https://github.com/login" self.post_url = "https://github.com/session" self.session = requests.Session() def token(self): response = self.session.get(self.login_url,headers=self.headers) selector = etree.HTML(response.text) # print(selector) # 获取authenticity的信息 #PVMLE6WF0PATI/mmuPDajZjo54Y/2kid8nYHmtb6lq1d8rWVaSsyEEJiNE9usaW9QfYqDKepjzPPOAPLmDdYjQ== token = selector.xpath('//div//input[2]/@value')[0] print(token) return token def login(self,email,password): post_data ={ "commit":"Sign in", "utf8":"✓", "authenticity_token":self.token(), "login":email, "password":password, } response = self.session.post(self.post_url,data=post_data,headers=self.headers) if response.status_code == 200: print("success") if __name__ == "__main__": login = Login() login.login(email='',password='')
控制台输出:
说明我们登录的状态码为200。已经登录成功。