模拟登录GitHub时只须要在登录界面获取一个参数authenticity_token便可,其余参数都是固定的,以下图:html
这个参数在登录界面的Elements,Ctrl+f 进入查找就可获取位置,而后用xpath获取便可python
代码以下:git
import requests from lxml import etree class Logon(object): def __init__(self): self.herders = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)' ' Chrome/74.0.3729.169 Safari/537.36', 'Referer': 'https://github.com/', 'Host':'github.com' } #登录界面,用于获取参数和cookies信息 self.logon_url = 'https://github.com/login' #传参连接,用于传递密码等参数登录 self.post_url = 'https://github.com/session' #获取cookie以维持会话 self.session = requests.Session() #用于获取参数authenticity_token def token(self): resp = self.session.get(url=self.logon_url,headers=self.herders) text = etree.HTML(resp.text) token = text.xpath("//div[@id='login']//input[2]/@value")[0] print(token) return token def login(self): data = { 'commit':'Sign in', 'utf8':'✓', 'authenticity_token':self.token(), 'login':'543091881@qq.com', 'password':'我是密码', 'webauthn-support':'supported' } resp = self.session.post(url=self.post_url,data=data,headers=self.herders) if resp.status_code == 200: print("登录成功") print(resp.url) if __name__ == '__main__': login = Logon() login.login()
运行:github
若是登录成功,那么咱们点击连接会直接跳到咱们的主页web
成功。chrome
注意一下,若是以前已经登录过,必定要清空cookies,否则登录失败点击连接也会跳到主页。 cookie
————————————————————————分割线————————————————————————————session
作完这个以后,我尝试作了一下登录CSDN的代码,很遗憾,失败了,好像是最近csdn改了加密参数,由于我百度的时候,最新的是五月一号还有人作模拟登录,若是不是直接抄袭,那就是最近改了加密参数,先分析一下post
http://www.javashuo.com/article/p-gzdcttgp-kd.html加密
上面连接是之前模拟登录csdn的代码及分析,能够很清晰的看见须要的参数和github同样能够在Elements里面找到
那么,如今的呢
咱们能够看见这个doLogin就是登录传参的连接
那么,它须要什么参数呢
很遗憾,除了密码,帐号,登录类型,其余都是加密参数,并且在登陆页Elements没法获取这些信息,不信的话能够ctrl+f查找一下,是查不到的。
若是不用这些加密参数能够登录吗?我试了一下:
import requests class Login(object): def __init__(self): self.herders = { 'user-agent' : 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)' ' Chrome/74.0.3729.169 Safari/537.36', 'referer' : 'https://www.csdn.ne', } #登陆页面 self.login_url = 'https://passport.csdn.net/login?code=public' #传递参数页面 self.post_url = 'https://passport.csdn.net/v1/register/pc/login/doLogin' #我的主页 # self.profile_url = 'https://blog.csdn.net/s_kangkang_A' #自动处理session处理会话 self.session = requests.Session() def login(self): #访问登陆页获取cookies信息维持会话 resp = self.session.get(self.login_url,headers=self.herders) if resp.status_code == 200: print("我到了登录页面") else: print("到达登陆页面失败") #构造参数 data = { 'loginType' : '1', 'pwdOrVerifyCode' : '我是密码', 'userIdentification' : '我是帐号' } #登录 response = self.session.post(self.post_url,data=data,headers=self.herders) if response.status_code == 200: print("Login successfully") #访问我的主页 # response = self.session.get(self.profile_url,headers=self.herders) # if response.status_code == 200: # print("Access to success") if __name__ == '__main__': login = Login() login.login()
并不行,直接失败。因此目前只能用selenium+chromedriver去登录(个人能力范围内),但愿有大佬能够找到这些加密参数,或者多是我找错网页了?传授并指正一下。