zoukankan      html  css  js  c++  java
  • Python

    前言

    有些登录的接口会有验证码:短信验证码,图形验证码等,这种登录的话验证码参数可以从后台获取的(或者查数据库最直接)。

    获取不到也没关系,可以通过添加cookie的方式绕过验证码。

    另一篇博文  Python Selenium Cookie 绕过验证码实现登录  介绍了另外一种处理方式,及实际项目应用实战,有兴趣的同学可以点击查看。

    一、抓登录cookie

    1.登录后会生成一个已登录状态的cookie,那么只需要直接把这个值添加到cookies里面就可以了。

    2.可以先手动登录一次,然后抓取这个cookie,这里就需要用抓包工具fiddler了

    3.先打开博客园登录界面,手动输入账号和密码(勾选下次自动登录)

     

     4.打开fiddler抓包工具,刷新下登录首页,就是登录前的cookie了

     

     5.登录成功后,再查看cookie变化,发现多了两组参数,多的这两组参数就是我们想要的,copy出来,一会有用

    代码实例: 

    # baseinfo -> __init__
    #-*-coding:utf-8-*-
    # Time:2017/9/23 17:44
    # Author:YangYangJun
    
    
    loginUrl = "https://passport.cnblogs.com/user/signin"
    
    loginHeaders = {
        "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36"
                      }
    
    CNBlogsCookie = '通过抓包工具获取该Cookie'
    
    CnblogsAspNetCoreCookies = '通过抓包工具获取该Cookie'
    
    editUrl = 'https://i.cnblogs.com/EditPosts.aspx?opt=1'
    #-*-coding:utf-8-*-
    # Time:2017/9/23 10:15
    # Author:YangYangJun
    
    import requests
    #导入配置文件
    import baseinfo
    
    #登录访问地址
    loginUrl = baseinfo.loginUrl
    #请求头
    loginHeaders = baseinfo.loginHeaders
    
    #登录后Cookie1
    CNBlogsCookie = baseinfo.CNBlogsCookie
    #登录后Cookie2
    CnblogsAspNetCoreCookies = baseinfo.CnblogsAspNetCoreCookies
    #新建随笔方位地址
    editUrl = baseinfo.editUrl
    #获取session
    s = requests.session()
    
    #
    #r = s.get(loginUrl,headers = loginHeaders,verify = False )
    
    #获取cookie
    c = requests.cookies.RequestsCookieJar()
    
    # 添加登录需要的两个cookie
    c.set(".CNBlogsCookie",CNBlogsCookie)
    c.set('.Cnblogs.AspNetCore.Cookies',CnblogsAspNetCoreCookies)
    #更新cookie
    s.cookies.update(c)
    
    
    body = {"__VIEWSTATE": "",
            "__VIEWSTATEGENERATOR":"FE27D343",
            "Editor$Edit$txbTitle":"这是绕过登录的标题: -*- Bluesky -*-",
            "Editor$Edit$EditorBody":"<p>这里是中文内容:http://www.cnblogs.com/Skyyj/</p>",
            "Editor$Edit$Advanced$ckbPublished":"on",
            "Editor$Edit$Advanced$chkDisplayHomePage":"on",
            "Editor$Edit$Advanced$chkComments":"on",
            "Editor$Edit$Advanced$chkMainSyndication":"on",
            "Editor$Edit$lkbDraft":"存为草稿",
             }
    r2 = s.post(editUrl, data=body, verify=False)
    #获取请求返回的响应信息
    print r2.content

    body中的值是可以通过开发者模式查看,如下图:

    填写标题

    response的返回内容还有其它更多信息

    -- r.status_code     #响应状态码
    -- r.content           #字节方式的响应体,会自动为你解码 gzip 和 deflate 压缩
    -- r.headers          #以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None
    -- r.json()             #Requests中内置的JSON解码器
    -- r.url                  # 获取url
    -- r.encoding         # 编码格式
    -- r.cookies           # 获取cookie
    -- r.raw                #返回原始响应体
    -- r.text               #字符串方式的响应体,会自动根据响应头部的字符编码进行解码
    -- r.raise_for_status() #失败请求(非200响应)抛出异常

  • 相关阅读:
    [JSOI2016]最佳团体
    CF125E MST Company
    CF482C Game with Strings
    CF379F New Year Tree
    CF1051F The Shortest Statement
    小a和uim之大逃离
    新魔法药水
    翻硬币
    [CQOI2017]小Q的棋盘
    UVA11729突击战
  • 原文地址:https://www.cnblogs.com/BlueSkyyj/p/7581911.html
Copyright © 2011-2022 走看看