成功模拟登陆GitHub以及关于登陆CSDN的问题

模拟登陆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的代码,很遗憾,失败了,好像是最近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去登陆(我的能力范围内),希望有大佬可以找到这些加密参数,或者可能是我找错网页了?传授并指正一下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值