模拟登陆GitHub时只需要在登陆界面获取一个参数authenticity_token即可,其他参数都是固定的,如下图:
这个参数在登陆界面的Elements,Ctrl+f 进入查找就可获取位置,然后用xpath获取即可
代码如下:
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()运行:
如果登陆成功,那么我们点击链接会直接跳到我们的主页
成功。
注意一下,如果之前已经登陆过,一定要清空cookies,不然登陆失败点击链接也会跳到主页。
————————————————————————分割线————————————————————————————
做完这个之后,我尝试做了一下登陆的代码,很遗憾,失败了,好像是最近csdn改了加密参数,因为我百度的时候,最新的是五月一号还有人做模拟登陆,如果不是直接抄袭,那就是最近改了加密参数,先分析一下
https://www.cnblogs.com/woainifanfan/p/5754580.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去登陆(我的能力范围内),希望有大佬可以找到这些加密参数,或者可能是我找错网页了?传授并指正一下。