Python Selenium Cookie 绕过验证码实现登录示例代码


Posted in Python onApril 10, 2018

之前介绍过通过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,将其拷贝出来,进行对比

Python Selenium Cookie 绕过验证码实现登录示例代码

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

Python Selenium 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进行分析。

Python Selenium 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 相关文章推荐
python采用requests库模拟登录和抓取数据的简单示例
Jul 05 Python
Python创建日历实例
Aug 21 Python
Python的另外几种语言实现
Jan 29 Python
Python实现递归遍历文件夹并删除文件
Apr 18 Python
python字符类型的一些方法小结
May 16 Python
Python八大常见排序算法定义、实现及时间消耗效率分析
Apr 27 Python
windows下python安装小白入门教程
Sep 18 Python
一个可以套路别人的python小程序实例代码
Apr 09 Python
python的re模块使用方法详解
Jul 26 Python
pytorch 使用单个GPU与多个GPU进行训练与测试的方法
Aug 19 Python
关于多种方式完美解决Python pip命令下载第三方库的问题
Dec 21 Python
关于python中readlines函数的参数hint的相关知识总结
Jun 24 Python
浅谈pandas中Dataframe的查询方法([], loc, iloc, at, iat, ix)
Apr 10 #Python
python pandas dataframe 行列选择,切片操作方法
Apr 10 #Python
python3下实现搜狗AI API的代码示例
Apr 10 #Python
Python基于pycrypto实现的AES加密和解密算法示例
Apr 10 #Python
浅谈Pandas中map, applymap and apply的区别
Apr 10 #Python
对pandas中apply函数的用法详解
Apr 10 #Python
Python 25行代码实现的RSA算法详解
Apr 10 #Python
You might like
PHP面向对象程序设计子类扩展父类(子类重新载入父类)操作详解
2019/06/14 PHP
php框架CI(codeigniter)自动加载与自主创建对象操作实例分析
2020/06/06 PHP
用 JavaScript 迁移目录
2006/12/18 Javascript
javascript中String类的subString()方法和slice()方法
2011/05/24 Javascript
javascript 控制input只允许输入的各种指定内容
2014/06/19 Javascript
Javascript中的方法和匿名方法实例详解
2015/06/13 Javascript
js文本框走动跑马灯效果代码分享
2015/08/25 Javascript
详解AngularJS中$http缓存以及处理多个$http请求的方法
2016/02/06 Javascript
js只执行1次的函数示例
2016/07/20 Javascript
微信公众号开发 自定义菜单跳转页面并获取用户信息实例详解
2016/12/08 Javascript
angular第三方包开发整理(小结)
2018/04/19 Javascript
详解element-ui表格中勾选checkbox,高亮当前行
2019/09/02 Javascript
微信头像地址失效踩坑记附带解决方案
2019/09/23 Javascript
vue+高德地图实现地图搜索及点击定位操作
2020/09/09 Javascript
python使用正则表达式分析网页中的图片并进行替换的方法
2015/03/26 Python
python 定义给定初值或长度的list方法
2018/06/23 Python
Python处理时间日期坐标轴过程详解
2019/06/25 Python
在python中实现同行输入/接收多个数据的示例
2019/07/20 Python
python生成13位或16位时间戳以及反向解析时间戳的实例
2020/03/03 Python
Python IDE环境之 新版Pycharm安装详细教程
2020/03/05 Python
python通过cython加密代码
2020/12/11 Python
python推导式的使用方法实例
2021/02/28 Python
CSS3 开发工具收集
2010/04/17 HTML / CSS
CSS3圆角和渐变2种常用功能详解
2016/01/06 HTML / CSS
联想智利官方网站:Lenovo Chile
2020/06/03 全球购物
亚洲领先的设计购物网站:Pinkoi
2020/11/26 全球购物
研究生自荐信
2013/10/09 职场文书
大学生求职自荐信
2013/12/12 职场文书
十八届三中全会感言
2014/03/10 职场文书
团队精神的演讲稿
2014/05/14 职场文书
汉语专业毕业生自荐信
2014/07/06 职场文书
合伙开公司协议书范本
2014/10/28 职场文书
学雷锋献爱心倡议书
2015/04/27 职场文书
体育教师教学随笔
2015/08/15 职场文书
对PyTorch中inplace字段的全面理解
2021/05/22 Python
纯CSS3实现div按照顺序出入效果
2021/07/15 HTML / CSS