requests库实现模拟登陆功能——以8miu为例

it2022-07-03  150

   用Selenium实现模拟登陆固然简单,但是由于他需要等待js渲染网页,所以有时候登陆的速度会非常的慢,而且特别容易timeout。

   但是还有requests库呀,今天讲一下用requests模拟登陆csdn


分析登陆界面 https://passport.csdn.net/login

 

    


登陆前F12 截取一下登陆过程中的数据包

    


发现可疑数据

    

可见Request url为https://passport.csdn.net/v1/register/pc/login/doLogin 且访问方式是POST

    


    红色框中的数据就是post提交的表单,这就是登陆时提交的数据,只要我们构造出来并提交给https://passport.csdn.net/v1/register/pc/login/doLogin 就可以实现登陆了,模拟登陆比较方便他只关注表单中 pwdOrVerifyCode和userIdentification 的值,前者为账号的密码,后者则是账号信息

    

    但是有些网页上还是需要token验证的,这类token如果找到到的,一般都存储在登陆页的网页源码中,就好比github登陆时需要的token就在登陆窗口的源码中

    对于的token,个人猜测可以通过访问https://passport.csdn.net/v1/register/pc/login/doLogin,其中的cookies可能是,因为加不加都不影响所以也验证不了


 编写python代码,实现模拟登陆

  将我的博客第一页中的标题爬取出来即为爬取成功

 

import requests import json from pyquery import PyQuery as pq url = 'https://passport.csdn.net/v1/register/pc/login/doLogin' headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36', } login_data = { 'pwdOrVerifyCode': "密码", 'userIdentification': "账号" }#构造登陆表单 s = requests.session() response = s.post(url,data=json.dumps(login_data),headers=headers)#注意提交格式咯 response = s.get('https://blog.csdn.net/qq_19381989',headers=headers) doc = pq(response.text) items = doc.find('#mainBox > main > div.article-list > div > h4 > a').items() for item in items: print(item.text())

万变不离其宗,欢迎提出问题和意见


最新回复(0)