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 字典(dict)遍历的四种方法性能测试报告
Jun 25 Python
python实现根据月份和日期得到星座的方法
Mar 27 Python
使用pygame模块编写贪吃蛇的实例讲解
Feb 05 Python
python DataFrame 修改列的顺序实例
Apr 10 Python
Matplotlib 生成不同大小的subplots实例
May 25 Python
pandas 实现字典转换成DataFrame的方法
Jul 04 Python
对python中的高效迭代器函数详解
Oct 18 Python
对Pyhon实现静态变量全局变量的方法详解
Jan 11 Python
如何从csv文件构建Tensorflow的数据集
Sep 21 Python
python脚本使用阿里云slb对恶意攻击进行封堵的实现
Feb 04 Python
虚拟环境及venv和virtualenv的区别说明
Feb 05 Python
只需要100行Python代码就可以实现的贪吃蛇小游戏
May 27 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 csv操作类代码
2009/12/14 PHP
浅析php数据类型转换
2014/01/09 PHP
求帮忙修改个php curl模拟post请求内容后并下载文件的解决思路
2015/09/20 PHP
PHP迭代器和迭代的实现与使用方法分析
2018/04/19 PHP
动态调用CSS文件的JS代码
2010/07/29 Javascript
使用javascript获取flash加载的百分比的实现代码
2011/05/25 Javascript
JQuery设置和去除disabled属性的5种方法总结
2013/05/16 Javascript
异步动态加载js与css文件的js代码
2013/09/15 Javascript
一个支付页面DEMO附截图
2014/07/22 Javascript
node.js下when.js 的异步编程实践
2014/12/03 Javascript
JS模仿手机端九宫格登录功能实现代码
2016/04/28 Javascript
jQuery实现页面滚动时智能浮动定位
2017/01/08 Javascript
jQuery事件对象的属性和方法详解
2017/09/09 jQuery
Angular实现较为复杂的表格过滤,删除功能示例
2017/12/23 Javascript
浅谈vue 组件中的setInterval方法和window的不同
2020/07/30 Javascript
解决vue侦听器watch,调用this时出现undefined的问题
2020/10/30 Javascript
Python使用函数默认值实现函数静态变量的方法
2014/08/18 Python
Python减少循环层次和缩进的技巧分析
2016/03/15 Python
Python3使用requests发闪存的方法
2016/05/11 Python
python pyinstaller 加载ui路径方法
2019/06/10 Python
如何用Python制作微信好友个性签名词云图
2019/06/28 Python
pytorch::Dataloader中的迭代器和生成器应用详解
2020/01/03 Python
浅谈keras通过model.fit_generator训练模型(节省内存)
2020/06/17 Python
python对execl 处理操作代码
2020/06/22 Python
世界著名的顶级牛排:Omaha Steak(奥马哈牛排)
2016/09/20 全球购物
PurCotton全棉时代官网:100%天然棉花生产的生活护理用品
2016/11/18 全球购物
阿里旅行:飞猪
2017/01/05 全球购物
印度首选时尚目的地:Reliance Trends
2018/01/17 全球购物
英国创新设计文具、卡片和礼品包装网站:Paperchase
2018/07/14 全球购物
美国宠物护理专家:Revival Animal Health
2020/01/05 全球购物
英国独特家具和家庭用品购物网站:Cuckooland
2020/08/30 全球购物
Python文件操作的面试题
2013/06/22 面试题
银行竞聘演讲稿范文
2014/04/23 职场文书
继承权公证书范本
2015/01/23 职场文书
迎新生欢迎词
2015/01/23 职场文书
详解非极大值抑制算法之Python实现
2021/06/28 Python