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 登录的思路了。有什么问题可以加群沟通,或是关注微信公众号,进行沟通。希望对大家有所帮助。

原文地址:https://www.cnblogs.com/BlueSkyyj/p/8615879.html

时间: 2024-10-11 16:53:24

Python Selenium Cookie 绕过验证码实现登录的相关文章

Python - Cookie绕过验证码登录

前言 有些登录的接口会有验证码:短信验证码,图形验证码等,这种登录的话验证码参数可以从后台获取的(或者查数据库最直接). 获取不到也没关系,可以通过添加cookie的方式绕过验证码. 一.抓登录cookie 1.登录后会生成一个已登录状态的cookie,那么只需要直接把这个值添加到cookies里面就可以了. 2.可以先手动登录一次,然后抓取这个cookie,这里就需要用抓包工具fiddler了 3.先打开博客园登录界面,手动输入账号和密码(勾选下次自动登录) 4.打开fiddler抓包工具,刷

一次完整的自动化登录测试-基于python+selenium进行cnblog的自动化登录测试

Web登录测试是很常见的测试!手动测试大家在熟悉不过了,那如何进行自动化登录测试呢!本文作者就用python+selenium结合unittest单元测试框架来进行一次简单但比较完整的cnblog自动化登录测试,给大家提供点参考!下面就包括测试代码和每种测试情况的截图: ''' cnblog的登录测试,分下面几种情况: (1)用户名.密码正确 (2)用户名正确.密码不正确 (3)用户名正确.密码为空 (4)用户名错误.密码正确 (5)用户名为空.密码正确(还有用户名和密码均为空时与此情况是一样的

Python selenium -- cookie处理

转自:http://www.cnblogs.com/fnng/p/3269450.html 本节重点: driver.get_cookies() 获得cookie信息 add_cookie(cookie_dict)  向cookie添加会话信息 delete_cookie(name)   删除特定(部分)的cookie delete_all_cookies()    删除所有cookie 通过webdriver 操作cookie 是一件非常有意思的事儿,有时候我们需要了解浏览器中是否存在了某个c

python+selenium进行简单验证码获取

# _*_ coding:utf-8 _*_from PIL import Imagefrom selenium import webdriverimport pytesseractimport time url = 'https://ec.ayyywl.com/login'driver = webdriver.Chrome()driver.maximize_window() # 将浏览器最大化driver.get(url)# 截取当前网页并放到E盘下命名为printscreen,该网页有我们需

python+selenium+webdriver+BeautifulSoup实现自动登录

from selenium import webdriver import time from bs4 import BeautifulSoup url = "http://www.hsbkos.com/" soup = BeautifulSoup() soup.findAll('div',{'class':'objbox'}) driver = webdriver.Chrome() time.sleep(1) driver.get(url) time.sleep(1) driver.

【Mac + Python + Selenium】之获取验证码图片code并进行登录

初稿代码,可以忽略不计(自己留着看) #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2020/01/15 13:27 # @Author : zc # @File : 115test.py from selenium import webdriver from selenium.webdriver.common.by import By from time import sleep from PIL import Image,Im

如何利用python+Selenium对登录的验证码进行验证?

python+Selenium自动识别验证码Fg.save_screenshot('D:\HuaYu\image\image.png')ce = Fg.find_element_by_id("ensure") # 具体的id要用F12自行查看print(ce.location)im = Image.open('D:\HuaYu\image\image.png') 根据图片调整位置img = im.crop((860,507,945,532))print(img)img.save('D:

python实例:实现用户名,密码,验证码输入登录网页系统

python+selenium环境准备: python 自行安装 一.安装selenium:pip install selenium 二.下载谷歌浏览器驱动 1.去http://chromedriver.storage.googleapis.com/index.html下载chromedriver.exe(根据chrome的版本下载对应的) 2.将下载好的chromedriver.exe解压后放到指定目录(我一般放在代码目录下) 三,安装第三方库,可参考文章:https://www.cnblog

用python+selenium进行一次cnblog的登录测试

用python+selenium自动化进行一次cnblog的登录测试,可供参考!下面包括测试代码和每种测试情况的截图: ''' cnblog的登录测试,分下面几种情况: (1)用户名.密码正确 (2)用户名正确.密码不正确 (3)用户名正确.密码为空 (4)用户名错误.密码正确 (5)用户名为空.密码正确(还有用户名和密码均为空时与此情况是一样的,这里就不单独测试了) ''' import unittest from selenium import webdriver from time imp