''' 一 目标站点分析 浏览器输入https://github.com/login 而后输入错误的帐号密码,抓包 发现登陆行为是post提交到:https://github.com/session 并且请求头包含cookie 并且请求体包含: commit:Sign in utf8:✓ authenticity_token:lbI8IJCwGslZS8qJPnof5e7ZkCoSoMn6jmDTsL1r/m06NLyIbw7vCrpwrFAPzHMep3Tmf/TSJVoXWrvDZaVwxQ== login:egonlin password:123 二 流程分析 先GET:https://github.com/login拿到初始cookie与authenticity_token 返回POST:https://github.com/session, 带上初始cookie,带上请求体(authenticity_token,用户名,密码等) 最后拿到登陆cookie ps:若是密码时密文形式,则能够先输错帐号,输对密码,而后到浏览器中拿到加密后的密码,github的密码是明文 ''' import requests import re #第一次请求 r1=requests.get('https://github.com/login') r1_cookie=r1.cookies.get_dict() #拿到初始cookie(未被受权) authenticity_token=re.findall(r'name="authenticity_token".*?value="(.*?)"',r1.text)[0] #从页面中拿到CSRF TOKEN #第二次请求:带着初始cookie和TOKEN发送POST请求给登陆页面,带上帐号密码 data={ 'commit':'Sign in', 'utf8':'✓', 'authenticity_token':authenticity_token, 'login':'642300343@qq.com', 'password':'kasper3344' } r2=requests.post('https://github.com/session', data=data, cookies=r1_cookie ) login_cookie=r2.cookies.get_dict() #第三次请求:之后的登陆,拿着login_cookie就能够,好比访问一些我的配置 r3=requests.get('https://github.com/settings/emails', cookies=login_cookie) print('642300343@qq.com' in r3.text) #True 自动登陆github(本身处理cookie信息)