侯体宗的博客
  • 首页
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

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

Python  /  管理员 发布于 7年前   289

之前介绍过通过cookie 绕过验证码实现登录的方法。这里并不多余,会增加分析和另外一种方法实现登录。

1、思路介绍 

1.1、直接看代码,内有详细注释说明

# FileName : Wm_Cookie_Login.py# Author  : Adil# DateTime : 2018/3/20 19:47# SoftWare : PyCharmfrom selenium import webdriverimport timeurl = '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 : PyCharmimport yaml,time,osfrom selenium import webdriverurl = '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,否则可能打印的还是登录前的cookietime.sleep(5)cookiesAfter = driver.get_cookies()len1 = len(cookiesAfter)# 已经知道需要第几个cookie,这里需要第3个cookie,所以选择cookie下标为2cookie1 = 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 : PyCharmfrom selenium import webdriverimport time,yaml,osurl = '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")# 添加cookiedriver.add_cookie(cookie1)print("cookies")print(driver.get_cookies())time.sleep(5)# 这里重新获取地址,因为有些系统,未登录状态,链接会跳转,这里就是,登录状态后,才能正确打开指定网址,所以这里要再次指定网址。driver.get(url)# 刷新查看登录状态driver.refresh()time.sleep(5)driver.quit()

以上应该算是已经详细的介绍了使用cookie 登录的思路了。希望对大家的学习有所帮助,也希望大家多多支持。


  • 上一条:
    python实现在pandas.DataFrame添加一行
    下一条:
    python pandas dataframe 行列选择,切片操作方法
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在go语言中实现字符串可逆性压缩及解压缩功能(0个评论)
    • 使用go + gin + jwt + qrcode实现网站生成登录二维码在app中扫码登录功能(0个评论)
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客