cookie绕过验证码登录操作
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、执行后,刷新下草稿箱页面,查看我的草稿箱是否有新增。
selenium-跳过登录验证码
selenium最常见的就是登录,但是登录有个坑,就是验证码的问题,关于验证码一共四个办法:
1.让开发注释掉验证码。
2.让开发设置一个万能验证码,只要输入这个验证码,就通过。
3.跳过验证码直接登录成功。
4.验证码识别技术。
第三条写的很模糊,不过下面就介绍一下第三条的实现方法。
先说一下实现思路:
1.打开要测试的网页,获取登录前的cookie(可以抓包获取,可以代码实现,下面会附上代码)。
2.手动登录,再获取登录后的cookie。
3.对比两次获取的cookie,找出登录后多出来的cookie,只要多出来的name和value就行(一般name就是token)。
4.在代码里加上写入cookie,把找出来的name和value写入。然后再写一遍打开网页的代码。
下面放上代码(不要着急复制代码为自己所用,代码后面会写限制,有些登录用这代码也跳不过去,哈哈)。
#coding=utf-8 from selenium import webdriver import time #下面四行这么写是去掉谷歌浏览器上面提示的,第二行和第三行分别对应不同的提示 options = webdriver.ChromeOptions() options.add_experimental_option("excludeSwitches",["ignore-certificate-errors"]) # options.add_argument('disable-infobars') browser = webdriver.Chrome(chrome_options=options) # browser.maximize_window() #打开火狐浏览器 # browser=webdriver.Firefox() #输入网址 browser.get("https://m.flycua.com/h5/#/") #点击登录,用下面注释的代码获取cookie,实现跳过登录,执行脚本的时候就不用这部分了 # browser.find_element_by_id("su").click() # cookie1= browser.get_cookies() #打印登录前的cookie # print (cookie1) #等待30秒,用这30秒时间完成登录操作 # time.sleep(30) #获取登录后的cookie # cookie2= browser.get_cookies() #打印登录后的cookie # print (cookie2) # #加入要获取的cookie,写进去 browser.add_cookie({'name':'tokenId', 'value':'8BB8FDD4FBB31F92424A7E0EBE872E01A4AF77654043DAD638E9F93B378F94E19A882A6C7E78999C9A5482985FDA333C3D1E5236C6BDA7935A89178F053FB490'}) #再次输入网址 browser.get("https://m.flycua.com")
上面代码包含了获取cookie和实现跳过登录的所有代码,注释部分一定要看清楚。(最早写的是用的python2,后来又拿到python3的环境上执行,根据自己python版本,对脚本略作修改,应该只有print要修改)
然后我再说一下这代码的局限性。
1.可以看出cookie里有tokenId,这个tokenId可以使用比较长的一段时间,前提是只执行这自动化脚本,不能再手动登录。因为手动登录又会产生一个新的tokenId,代码需要更新。
2.如果某些网站打开直接就是登录页,那恐怕就跳不过登录了,即使写入cookie,第二次打开的网页,仍然是登录页,即使写了登录后的网址。(我还见过更厉害的,登录之前和登录之后网址都不变)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)