Python Selenium Cookie 绕过验证码实现登录
Python Selenium Cookie 绕过验证码实现登录
之前介绍过博客园的通过cookie 绕过验证码实现登录的方法。这里并不多余,会增加分析和另外一种方法实现登录。
1、思路介绍
1.1、直接看代码,内有详细注释说明
# FileName : Wm_Cookie_Login.py
# Author : Adil
# DateTime : 2018/3/20 19:47
# SoftWare : PyCharm from selenium import webdriver import time url = 'https://system.address' def login():
'''先定义一个正常登录的方法,获取登录前和登录后的cookie''' driver = webdriver.Chrome() driver.get(url)
driver.maximize_window()
cookieBefore = driver.get_cookies()
# 打印登录前的cookie
print(cookieBefore)
time.sleep(2)
driver.find_element_by_id("new-username").clear()
driver.find_element_by_id("new-username").send_keys("username")
driver.implicitly_wait(5)
driver.find_element_by_id("new-password").clear()
driver.find_element_by_id("new-password").send_keys("password")
driver.find_element_by_id('home-right-login').click()
driver.implicitly_wait(5)
# 加一个休眠,这样得到的cookie 才是登录后的cookie,否则可能打印的还是登录前的cookie
time.sleep(5)
print("登录后!")
cookiesAfter = driver.get_cookies()
print("cookiesAfter:")
print(cookiesAfter)
# cookie 存放到了list,其中是dict
# 对比发现登录后的cookie比登录前多了4个dict。
# 如下代码分别是 1、4 、7、 8
len1 = len(cookiesAfter)
print("len:%d" %len1)
cookie1 = cookiesAfter[0]
cookie2 = cookiesAfter[3]
cookie3 = cookiesAfter[-2]
cookie4 = cookiesAfter[-1]
print("cookie1:%s" %cookie1)
print("cookie2:%s" %cookie2)
print("cookie3:%s" %cookie3)
print("cookie4:%s" %cookie4)
driver.quit()
# 将获取的这四个cookie作为参数,传递给,使用cookie登录的函数,如下
cookieLogin(cookie1,cookie2,cookie3,cookie4)
def cookieLogin(cookie1,cookie2,cookie3,cookie4):
print("+++++++++++++++++++++++++")
print("cookieLogin")
print("cookie2:%s" % cookie2)
print("cookie4:%s" % cookie4)
driver = webdriver.Chrome()
driver.maximize_window()
# 清除一下cookie
driver.delete_all_cookies()
time.sleep(3)
driver.get(url)
# 打开浏览器后添加访问地址后,添加cookie
driver.add_cookie(cookie1)
driver.add_cookie(cookie2)
driver.add_cookie(cookie3)
driver.add_cookie(cookie4)
print("cookies")
# 打印一下cookie,与上面正常登录的cookie对比一下
print(driver.get_cookies())
time.sleep(5)
# 刷新页面,可以看到已经是登录状态了,至此完成的使用cookie 的登录。
driver.refresh()
time.sleep(5)
driver.quit() if __name__ == "__main__": login()
1.2、代码介绍
如图,可以查看到登录前与登录后的cookie,将其拷贝出来,进行对比

如图,对比可以,登录后多余四个cookie

查看多余cookie的位置,是list 的1、4、7、8g额元素,所以将其取出,作为参数给cookie登录函数。
注意:该实例介绍的是无验证码登录操作,但思路是一样的。而这个demo ,仅仅是为了介绍一下使用cookie 登录的思路,具体项目应用中,这样是很不方便的。
2、绕过验证码登录实战
接下来,介绍含有验证码的登录,当然cookie处理的思路与上介绍的基本一样
这里增加了几点内容:
a、先首次使用验证码正确登录并保存登录前、后的cookie,对比分析cookie,筛选有用的cookie
b、将cookie 写到yaml 文件中,方便后续使用cookie登录时直接使用,而不需像上面介绍的那样,每次都需要先正常登录一样。
c、使用cookie登录时,从yaml文件中读取对应cookie即可。注意:Yaml 文件操作详见: Python Yaml 学习 ,有详细介绍yaml的读写操作。
注意:这里介绍的是先手动输入验证码正确登录后获取cookie。实际应用中可以使用其他方式获取cookie
如:1、之前介绍的博客园登录实例:Python - Cookie绕过验证码登录 使用fiddler,查看cookie
2、使用浏览器查看cookie 如,借助chrome 插件如下图,导出cookie进行分析。

思路如上,代码如下:
2.1、正常登录获取有效cookie
# FileName : getLoginCookie.py
# Author : Adil
# DateTime : 2018/3/20 21:43
# SoftWare : PyCharm
import yaml,time,os
from selenium import webdriver
url = 'https://system.address'
driver = webdriver.Chrome()
driver.get(url)
driver.maximize_window()
time.sleep(2)
driver.find_element_by_id("username").clear()
driver.find_element_by_id("username").send_keys("username")
driver.implicitly_wait(5)
driver.find_element_by_id("password").clear()
driver.find_element_by_id("password").send_keys("password")
print("请输入验证码:")
# 手动输入验证码
security_code = input()
time.sleep(1)
driver.find_element_by_id("security_code").send_keys(security_code)
time.sleep(1)
driver.find_element_by_id('sign_btn').click()
driver.implicitly_wait(5)
# 加一个休眠,这样得到的cookie 才是登录后的cookie,否则可能打印的还是登录前的cookie
time.sleep(5)
cookiesAfter = driver.get_cookies()
len1 = len(cookiesAfter)
# 已经知道需要第几个cookie,这里需要第3个cookie,所以选择cookie下标为2
cookie1 = cookiesAfter[2]
# 获取当前文件所在路径
fileNamePath = os.path.split(os.path.realpath(__file__))[0]
# 拼接config.yaml文件绝对路径
yamlPath = os.path.join(fileNamePath,'config.yaml')
# 以覆盖写入打开文件
fw = open(yamlPath,'w',encoding='utf-8')
# 构建数据
data = {"cookie1":cookie1}
# 装载写入yaml文件。
yaml.dump(data,fw) driver.quit()
2.2、读取cookie配置文件,使用cookie登录系统
# FileName : stlUseCookieLogin.py
# Author : Adil
# DateTime : 2018/3/20 21:48
# SoftWare : PyCharm
from selenium import webdriver
import time,yaml,os
url = 'https://system.address'
driver = webdriver.Chrome()
driver.maximize_window()
driver.delete_all_cookies()
time.sleep(3)
driver.get(url) fileNamePath = os.path.split(os.path.realpath(__file__))[0]
yamlPath = os.path.join(fileNamePath,'config.yaml')
# 读取yaml 文件
f = open(yamlPath,'r',encoding='utf-8')
cont = f.read()
conf = yaml.load(cont)
# 读取cookie值
cookie1 = conf.get("cookie1")
# 添加cookie
driver.add_cookie(cookie1)
print("cookies")
print(driver.get_cookies())
time.sleep(5)
# 这里重新获取地址,因为有些系统,未登录状态,链接会跳转,这里就是,登录状态后,才能正确打开指定网址,所以这里要再次指定网址。
driver.get(url)
# 刷新查看登录状态
driver.refresh()
time.sleep(5)
driver.quit()
以上应该算是已经详细的介绍了使用cookie 登录的思路了。有什么问题可以加群沟通,或是关注微信公众号,进行沟通。希望对大家有所帮助。
Python Selenium Cookie 绕过验证码实现登录的更多相关文章
- Python+fiddler(基于Cookie绕过验证码自动登录)
案例:使用Cookie绕过百度验证码自动登录账户 步骤: 1.浏览器进入百度首页,点击登录按钮,输入相关信息(注意:暂时不要点击登录按钮) 2.进入fiddler,首先获取证书,Tools--> ...
- Python - Cookie绕过验证码登录
前言 有些登录的接口会有验证码:短信验证码,图形验证码等,这种登录的话验证码参数可以从后台获取的(或者查数据库最直接). 获取不到也没关系,可以通过添加cookie的方式绕过验证码. 另一篇博文 P ...
- 通过cookie绕过验证码登录
在我们做自动化的时候碰到一些比较难破解的验证码时是非常头疼的,一般来说最好的办法就是让开发屏蔽,这样最有益身心健康. 那么今天我介绍的这个方法也挺简单的,就是通过添加cookie的方式绕过验证码直接登 ...
- cookie绕过验证码登录
#coding:utf-8 ''' cookie绕过验证码登录,第一步先访问登录页面获取登录前的cookie,第二步用fiddler抓到的手动登录的cookie加入cookie中,登录成功,第三步登录 ...
- python接口自动化(十三)--cookie绕过验证码登录(详解)
简介 有些登录的接口会有验证码:短信验证码,图形验证码等,这种登录的话验证码参数可以从后台获取的(或者查数据库最直接).获取不到也没关系,可以通过添加cookie的方式绕过验证码.(注意:并不是所有的 ...
- python+selenium基础篇,cookie绕过验证码小案例
1.绕过验证码有许许多多的方法,笔者在此介绍其中的一个小方法,原理其实就是获取已登陆了之后的凭证(会话保存在本地的cookie中)再打开另一个页面的使用 2.F12(浏览器开发者调试工具)可以查看的需 ...
- Requests方法 -- cookie绕过验证码登录操作
前言有些登录的接口会有验证码:短信验证码,图形验证码等,这种登录的话验证码参数可以从后台获取的(或者查数据库最直接).获取不到也没关系,可以通过添加 cookie 的方式绕过验证码. 1.这里以登录博 ...
- 『心善渊』Selenium3.0基础 — 21、Selenium实现绕过验证码进行登陆
目录 1.验证码问题 2.处理验证码的方法 3.Selenium绕过验证码登陆的实现 4.总结 5.补充练习 1.验证码问题 对于Web应用来说,大部分的系统在用户登录时,都要求用户输入验证码.验证码 ...
- python+selenium破解极验验证登录
1.前言: 目前很多网站会在正常的账号密码认证之外加一些验证码,以此来明确区分人/机行为,最典型的就是极验滑动验证.(如下图) 这里我们以简单实例说明如何实现自动校验类似验证. 2.步骤: 1)点击验 ...
随机推荐
- Pycharm创建Django项目并访问Django
Pycharm创建Django项目并访问Django 一.Django插件 如果没有Django插件,需要先安装Django插件. 1,首先点击Default Settings,打开设置页面: 2,打 ...
- java.lang.NoClassDefFoundError: org/apache/curator/RetryPolicy解决方法
今天集成es-job到公司的框架时,启动时出现上述错误 java.lang.NoClassDefFoundError: org/apache/curator/RetryPolicy at storm. ...
- aircrack-ng后台跑包, 成功后自动发送邮件通知
我的思路是直接用nohup守护进程输出结构到指定文件, 然后判断文件中"KEY FOUND"的字段. 启动aircrack-ng方式 nohup aircrack-ng -w /o ...
- JavaScript中this的用法 及 如何改变this的指向
要懂得JavaScript中this的用法,首先需要知道,JavaScript中的作用域相关知识. var fun = function(){ var flag = 1; console.log(fl ...
- Codeforces 903G Yet Another Maxflow Problem - 线段树
题目传送门 传送门I 传送门II 传送门III 题目大意 给定一个网络.网络分为$A$,$B$两个部分,每边各有$n$个点.对于$A_{i} \ (1\leqslant i < n)$会向$A_ ...
- GCD与莫比乌斯反演的勾当
目录 机房最后一个学懵逼钨丝的人 题目一 题目 bzoj1101 机房最后一个学懵逼钨丝的人 题目一 链接 题目没找到 求\(\sum_{1}^{n}\sum_{1}^{m}gcd(i,j)\) 式子 ...
- HDU 6318 Swaps and Inversions(归并排序 || 树状数组)题解
题意:一个逆序对罚钱x元,现在给你交换的机会,每交换任意相邻两个数花钱y,问你最少付多少钱 思路:最近在补之前还没过的题,发现了这道多校的题.显然,交换相邻两个数逆序对必然会变化+1或者-1,那我们肯 ...
- 用spring tool suite插件创建spring boot项目时报An internal error occurred during: "Building UI model". com/google/common/
本文为博主原创,未经允许不得转载 在用spring tool suite创建spring boot项目时,报一下异常: 查阅很多资料之后发现是因为装的spring tool suite的版本与ecli ...
- Linux安装python3.7
1.下载与解压 先到python官网: https://www.python.org/downloads/release/python-371/](https://www.python.org/dow ...
- HDU 5919 Sequence II(主席树+区间不同数个数+区间第k小)
http://acm.split.hdu.edu.cn/showproblem.php?pid=5919 题意:给出一串序列,每次给出区间,求出该区间内不同数的个数k和第一个数出现的位置(将这些位置组 ...