• Requests方法 -- cookie绕过验证码登录操作


    前言
    有些登录的接口会有验证码:短信验证码,图形验证码等,这种登录的话验证码参数可以从后台获取的(或者查数据库最直接)。
    获取不到也没关系,可以通过添加 cookie 的方式绕过验证码。

    1、这里以登录博客园为例。

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

    b、这里用Fiddler抓包工具进行,先手动登录一次,然后抓取cookie

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

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

    2、cookie结构

    .用抓包工具 fidller 只能看到 cookie 的 name 和 value 两个参数,实际上 cookie 还有其它参数的。

    3、添加cookie

    a、往 session 里面添加 cookie 可以用以下方式
    b、set 里面参数按括号里面的参数格式

    coo = requests.cookies.RequestsCookieJar()
    coo.set('cookie-name', 'cookie-value', path='/', domain='.xxx.com')
    s.cookies.update(c)
    c、于是添加登录的 cookie,把第一步 fiddler 抓到的内容填进去就可以了
    c = requests.cookies.RequestsCookieJar()
    c.set('.CNBlogsCookie', 'xxx')
    c.set('.Cnblogs.AspNetCore.Cookies','xxx')
    s.cookies.update(c)
    print(s.cookies)

    4、参考代码

    import requests
    #禁用安全请求警告
    from requests.packages.urllib3.exceptions import InsecureRequestWarning
    requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
    """
    1.由于登录时候是多加 2 个 cookie,我们可以先用 get 方法打开登录首页,获取部分 cookie
    2.再把登录需要的 cookie 添加到 session 里
    3.添加成功后,随便编辑正文和标题保存到草稿箱
    """

    # 先打开登录首页,获取部分 cookie
    url = "https://account.cnblogs.com/signin?returnurl=https%3A%2F%2Fwww.cnblogs.com%2F"

    header = {
    "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36"
    }

    s = requests.Session()
    r = s.get(url,headers=header)
    print(r.cookies)

    # 添加登录需要的两个 cookie
    c = requests.cookies.RequestsCookieJar()
    c.set(".Cnblogs.AspNetCore.Cookies","添加图二的cookie")
    c.set(".CNBlogsCookie","添加图二的cookie")
    # c.set('AlwaysCreateItemsAsActive',"True")
    # c.set('AdminCookieAlwaysExpandAdvanced',"True")
    s.cookies.update(c)
    print(s.cookies)

    # 登录成功后保存编辑内容
    r1 = s.get("https://i.cnblogs.com/EditPosts.aspx?opt=1", headers=header,verify=False)
    print(r1.text)

    # 保存草稿箱
    url2 = "https://i.cnblogs.com/EditPosts.aspx?opt=1"
    body = {
    "__VIEWSTATE":"",
    "__VIEWSTATEGENERATOR":"FE27D343",
    "Editor$Edit$txbTitle":"Hi,你好",
    "Editor$Edit$EditorBody":"<p>你们好吗 ?</p><p>Are you ok ?</p>",
    "Editor$Edit$Advanced$ckbPublished":"on",
    "Editor$Edit$Advanced$chkDisplayHomePage":"on",
    "Editor$Edit$Advanced$chkComments":"on",
    "Editor$Edit$Advanced$chkMainSyndication":"on",
    "Editor$Edit$Advanced$txbEntryName":"",
    "Editor$Edit$Advanced$txbExcerpt":"",
    "Editor$Edit$Advanced$txbTag":"",
    "Editor$Edit$Advanced$tbEnryPassword":"",
    "Editor$Edit$lkbDraft":"存为草稿",
    }

    r2 = s.post(url2,data=body,verify=False)
    print(r.content.decode("utf-8"))

    5、执行后,刷新下草稿箱页面,查看我的草稿箱是否有新增。

    
    
  • 相关阅读:
    在servlet中实现页面跳转
    我的jsp学习日记——001:@include(静态包含指令)和jsp:include(动态包含指令)的区别
    myEclipse中修改新建jsp文档的编码格式
    js判断一个图片是否已经存在于缓存中
    MyEclipse的JavaScript提示插件(JSEclipse)
    pku2051 Argus
    pku2084 Game of Connections
    pku2001 Shortest Prefixes
    pku2007 Scrambled Polygon
    pku2153 Rank List
  • 原文地址:https://www.cnblogs.com/Teachertao/p/11144726.html
Copyright © 2020-2023  润新知