前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用requests和fiddler模拟登陆51cto并获取下载币

使用requests和fiddler模拟登陆51cto并获取下载币

作者头像
bsbforever
修改2020-08-19 10:58:23
5340
修改2020-08-19 10:58:23
举报
文章被收录于专栏:时悦的学习笔记

开发环境

操作系统:windows 10

Python版本 :3.6

爬取网页模块:requests

分析网页工具:BeautifulSoup4,fiddler4

关于requests

requests是一个第三方库,可以用来模拟浏览器请求,如get,post

它也有Session功能,可以保持会话信息,如cookie等,这个可以让我们用来进行登陆后的操作

具体请参加官网:

http://docs.python-requests.org/en/master/

关于fiddler4

fiddler4 是一个网页分析的工具,和自带的开发者工具一样,不过其功能更为强大

我们可以通过官网免费下载并使用

官方网址

https://www.telerik.com/download/fiddler

详细教程查看如下网站

http://docs.telerik.com/fiddler/configure-fiddler/tasks/configurefiddler

模块安装

代码语言:javascript
复制
lxml为解析网页所必需

pip3 install requests

pip3 install BeautifulSoup4

pip3 install lxml

1.分析过程

1.1 登陆51cto并进行登陆

请保持fiddle4 全程开启状态

1.2 使用Fiddler4 查找功能查找登陆页面

也可以直接使用快捷键Ctrl+F,我们这里查找用户名bsbforever

注意这里需要勾选decode compressed content

之后可以看到界面左边连接黄色高亮

1.3 查看请求网页和header

1.4 查看POST请求参数

接下来我们双击该页面从右侧的WebForms查看POST参数

也可以查看raw标签

从上面我们可以看出提交的信息有:

  • _csrf
  • username
  • password
  • rememberme
  • login_button

其他都很好知道其含义,只有第一个我们不确定其含义

我们接下来重复登陆操作,可以看到每次csrf值是不一样的

这时我们需要找到该值是如何产生的

1.5 查看csrf值

这里我们仍然使用搜索功能,我们搜索csrf的值

这时我们可以看到左侧有2处标黄,我们查看另外个页面的响应

可以看到该csrf值存在于为登陆前的页面中

这时我们可以提取该值

1.6 POST模拟登陆

接下来我们构造header和post data 使用requests.post进行登陆

这时使用Session方法保持绘画信息

1.7 登陆后领取下载豆

这里根据抓取到的页面进行POST请求

2. 登陆流程图

3. 代码介绍

3.1 import相关的模块

··· import requests

from bs4 import BeautifulSoup

···

3.2 新建requests会话

后续都使用s变量进行请求

··· s=requests.Session() ···

3.3 get首页获取csrf值

··· content=s.get('http://home.51cto.com/home').content

soup = BeautifulSoup(content,"lxml")

token=soup.find('meta',attrs = {'name' : 'csrf-token'})['content'] ···

3.4 构造header和data

代码语言:javascript
复制
 header={
    'Connection': 'keep-alive',
        'Host': 'home.51cto.com',
        'Origin': 'http://home.51cto.com',
        'Referer':'http://home.51cto.com/index',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36'
    }
    data={
        '_csrf':token,
        'LoginForm[username]':'username',
   'LoginForm[password]': 'password',
    'LoginForm[rememberMe]': '0',
    'login-button': '登 录'
    }

3.5 post 登陆页面

··· s.post(url=login_url,headers=header,data=data) ···

3.6 判断是否登陆成功

代码语言:javascript
复制
result=s.get('http://home.51cto.com/home').text

if 'bsbforever' in result:

    print ('恭喜,登陆51cto成功,领取下载豆中..')

3.7.领取下载豆

代码语言:javascript
复制
 download=s.post('http://down.51cto.com/download.php?do=getfreecredits&t=0.8367867217711695').text

4.执行结果:

5.注意事项:

  • fiddler请保持全程开启
  • 请使用Session方法保持登陆状态
  • 本脚本仅用于学习用途

6.源码位置

源码请访问我的github主页

https://github.com/bsbforever/spider/blob/master/login_web.py

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-06-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 宅必备 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 开发环境
  • 关于requests
  • 关于fiddler4
  • 模块安装
  • 1.分析过程
    • 1.1 登陆51cto并进行登陆
      • 1.2 使用Fiddler4 查找功能查找登陆页面
        • 1.3 查看请求网页和header
          • 1.4 查看POST请求参数
            • 1.5 查看csrf值
              • 1.6 POST模拟登陆
                • 1.7 登陆后领取下载豆
                • 2. 登陆流程图
                • 3. 代码介绍
                  • 3.1 import相关的模块
                    • 3.2 新建requests会话
                      • 3.3 get首页获取csrf值
                        • 3.4 构造header和data
                          • 3.5 post 登陆页面
                            • 3.6 判断是否登陆成功
                              • 3.7.领取下载豆
                              • 4.执行结果:
                              • 5.注意事项:
                              • 6.源码位置
                              相关产品与服务
                              CODING DevOps
                              CODING DevOps 一站式研发管理平台,包括代码托管、项目管理、测试管理、持续集成、制品库等多款产品和服务,涵盖软件开发从构想到交付的一切所需,使研发团队在云端高效协同,实践敏捷开发与 DevOps,提升软件交付质量与速度。
                              领券
                              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档