Selenium操作cookie绕过验证码登陆实战

验证码类型:数字、字母、拖动

一.先从http协议底层

http协议是超文本传输协议,主要是用于浏览器和服务器之间交互数据。交互分为请求和响应部分

请求和响应的细节??

特点:简单快速、无连接、无状态

无连接和无状态:指的是多个请求之间是没有连接的,是没有关联的,是独立的。

http协议端口:80

https=http+ssl(安全传输协议)端口:443

请求:请求行、请求头、空一行、请求正文

有些接口必须有特点的请求头才可以请求成功

响应:响应行、响应头、空一行、响应正文

二、Cookie的作用就是为了解决http协议无连接、无状态而导致的业务关联很难以处理

1.什么是Cookie

本质:就是一段文本,客户端在”第一次“访问服务器时,创建身份标识,格式key=value放在set-Cookie字段里,发个客户端

当第二次去请求服务器时,那么就会带上cookie而且放在Cookie上

2.总结

        a.cookie是在服务器产生的,保存在客户端

        b.以key=vaule保存在一个文件内

        c.cookie的名称和失效时间是有开发定义的

3.cookie的分类

        会话cookie:保存在内存,浏览器关闭就清除—-比如session

        持久cookie:保存在硬盘,失效时间到之后就会清除

4.如何查看:

        fiddle

        F12—-application -cookie

        浏览器地址栏的感叹号

5.cookie不是缓存

三、cookie在测试当中的使用场景

1.接口关联的时候可以通过cookie传输token

2.记住用户登陆状态

3.在自动化测试里面作为万能码跳过所有的验证码,甚至不需要用户名和密码

步骤:第一步先获取cookie

           第二步通过add_cookie()方法添加cookie

import time
import unittest

from selenium import webdriver
import warnings

class Test(unittest.TestCase):
    def setUp(self) -> None:
        #忽略掉相关告警
        warnings.simplefilter('ignore', ResourceWarning)
        pass

    def test01_login(self):
        #driver设置为全局变量,运行完之后谷歌浏览器不会自动关闭
        global driver
        #打开谷歌浏览器
        driver = webdriver.Chrome()
        driver.get("http://192.168.0.141:8080/iwebshop/index.php?controller=systemadmin&action=index")
        time.sleep(3)
        获取所有的cookie信息并保存到cks上,返回的是list,这是登陆前的cookie
        cks = driver.get_cookies()
        for ck in cks:
            print(ck)

        time.sleep(3);
        #手动登陆一次
         #获取所有的cookie信息并保存到cks上,返回的是list,这是登陆后的cookie
        cks = driver.get_cookies()
        for ck in cks:
            print(ck)

    #登录前的cookie信息
    # {'domain': '192.168.0.141', 'expiry': 1642653336, 'httpOnly': False, 'name': 'iweb_Captcha', 'path': '/',
    #  'secure': False, 'value': 'fd8b964624ODEyMDA4MDIwMDNjZDhlZmc4NzBlNGFrPWdmYzAzYWRobG9vZA'}
    # {'domain': '192.168.0.141', 'expiry': 1642653336, 'httpOnly': False, 'name': 'iweb_safecode', 'path': '/',
    #  'secure': False,
    #  'value': 'fd8b964624ODEyMDA4MDIwMDZiNGU1YTBlMTFjN2IwMzxlNjBiZDA0MDswNTUzM2QwajVgN2VrNWcyPDM4MTBsZT9jMTU3Mg'}

    #登陆后的cookie信息
    # {'domain': '192.168.0.141', 'expiry': 1642653352, 'httpOnly': False, 'name': 'iweb_admin_name', 'path': '/',
    #  'secure': False, 'value': '76bb1f91a1MTA5NTQwMDgwNWY1P2Y2MjZkM2EwPGwxOD01M2E4ZDdnZG1obg'}
    # {'domain': '192.168.0.141', 'expiry': 1642653352, 'httpOnly': False, 'name': 'iweb_admin_role_name', 'path': '/',
    #  'secure': False, 'value': '76bb1f91a1MTA5NTQwMDgwNTI3ZWY1NDg1MjU1bDE1bz5jZGA9OT%2FutoXmuqbgrqTnk4bll54'}
    # {'domain': '192.168.0.141', 'expiry': 1642653353, 'httpOnly': False, 'name': 'iweb_admin_right', 'path': '/',
    #  'secure': False, 'value': '825c711358NDUwMTA1MDAwMDQzZzo2YmhmNDc7YTMwMjljNTY1NjlgZGtsa2l3c3VmdG91'}
    # {'domain': '192.168.0.141', 'expiry': 1642653352, 'httpOnly': False, 'name': 'iweb_admin_pwd', 'path': '/',
    #  'secure': False,
    #  'value': '76bb1f91a1MTA5NTQwMDgwNWQwYjlmNGY3YTExPmxhMThgYmE%2FOTNjMTBgZGI0OTE5YWE1P2dgYmw1PmUwNTRmMzRuMT47ZQ'}
    # {'domain': '192.168.0.141', 'expiry': 1642653353, 'httpOnly': False, 'name': 'iweb_safecode', 'path': '/',
    #  'secure': False,
    #  'value': '825c711358NDUwMTA1MDAwMDFiMW0xZT1lMjFrM2AwNzhjNjJhZTI1MzQ1MDAzMmM2YjJhPGVqNWQyPzA0MTBlYzhhOD02Ng'}
    # {'domain': '192.168.0.141', 'expiry': 1642653352, 'httpOnly': False, 'name': 'iweb_admin_id', 'path': '/',
    #  'secure': False, 'value': '76bb1f91a1MTA5NTQwMDgwNWNjZTU2YDAxNTI4bjBgOGowNTI7YTA3'}
    # {'domain': '192.168.0.141', 'expiry': 1642653351, 'httpOnly': False, 'name': 'iweb_Captcha', 'path': '/',
    #  'secure': False, 'value': 'f4c38b0ec2MDkwOTAwOTMwMDRjbDhhYWc4PDdgM2BiOWVmYjAzYWZrb2dnZA'}

    def tearDown(self) -> None:
        pass

if __name__=='__main__':
    unittest.main();
import time
import unittest

from selenium import webdriver
import warnings

class Test(unittest.TestCase):
    def setUp(self) -> None:
        # 忽略警告信息
        warnings.simplefilter('ignore', ResourceWarning)
        pass
    def test01_login(self):
        #driver设置为全局变量,运行完之后谷歌浏览器不会自动关闭
        global driver
        #打开谷歌浏览器
        driver = webdriver.Chrome()
        driver.get("http://192.168.0.141:8080/iwebshop/index.php?controller=systemadmin&action=index")
        time.sleep(3)

        # 添加cookie信息
        driver.add_cookie(
            {"name": "iweb_admin_name", "value": "76bb1f91a1MTA5NTQwMDgwNWY1P2Y2MjZkM2EwPGwxOD01M2E4ZDdnZG1obg"})
        driver.add_cookie({"name": "iweb_admin_role_name",
                           "value": "76bb1f91a1MTA5NTQwMDgwNTI3ZWY1NDg1MjU1bDE1bz5jZGA9OT%2FutoXmuqbgrqTnk4bll54"})
        driver.add_cookie({"name": "iweb_admin_right",
                           "value": "825c711358NDUwMTA1MDAwMDQzZzo2YmhmNDc7YTMwMjljNTY1NjlgZGtsa2l3c3VmdG91"})
        driver.add_cookie({"name": "iweb_admin_pwd",
                           "value": "76bb1f91a1MTA5NTQwMDgwNWQwYjlmNGY3YTExPmxhMThgYmE%2FOTNjMTBgZGI0OTE5YWE1P2dgYmw1PmUwNTRmMzRuMT47ZQ"})
        driver.add_cookie({"name": "iweb_safecode",
                           "value": "825c711358NDUwMTA1MDAwMDFiMW0xZT1lMjFrM2AwNzhjNjJhZTI1MzQ1MDAzMmM2YjJhPGVqNWQyPzA0MTBlYzhhOD02Ng"})
        driver.add_cookie({"name": "iweb_admin_id", "value": "76bb1f91a1MTA5NTQwMDgwNWNjZTU2YDAxNTI4bjBgOGowNTI7YTA3"})
        driver.add_cookie(
            {"name": "iweb_Captcha", "value": "f4c38b0ec2MDkwOTAwOTMwMDRjbDhhYWc4PDdgM2BiOWVmYjAzYWZrb2dnZA"})
        # 直接加载登陆之后的页面
        driver.get("http://192.168.0.141:8080/iwebshop/index.php?controller=system&action=default")
        
        
        # 获取所有的cookie信息并保存到cks上,返回的是list,这是登陆前的cookie
        # cks = driver.get_cookies()
        # for ck in cks:
        #     print(ck)
        # 
        # time.sleep(3);
        # #手动登陆一次
        #  #获取所有的cookie信息并保存到cks上,返回的是list,这是登陆后的cookie
        # cks = driver.get_cookies()
        # for ck in cks:
        #     print(ck)
    #登录前的cookie信息
    # {'domain': '192.168.0.141', 'expiry': 1642653336, 'httpOnly': False, 'name': 'iweb_Captcha', 'path': '/',
    #  'secure': False, 'value': 'fd8b964624ODEyMDA4MDIwMDNjZDhlZmc4NzBlNGFrPWdmYzAzYWRobG9vZA'}
    # {'domain': '192.168.0.141', 'expiry': 1642653336, 'httpOnly': False, 'name': 'iweb_safecode', 'path': '/',
    #  'secure': False,
    #  'value': 'fd8b964624ODEyMDA4MDIwMDZiNGU1YTBlMTFjN2IwMzxlNjBiZDA0MDswNTUzM2QwajVgN2VrNWcyPDM4MTBsZT9jMTU3Mg'}

    #登陆后的cookie信息
    # {'domain': '192.168.0.141', 'expiry': 1642653352, 'httpOnly': False, 'name': 'iweb_admin_name', 'path': '/',
    #  'secure': False, 'value': '76bb1f91a1MTA5NTQwMDgwNWY1P2Y2MjZkM2EwPGwxOD01M2E4ZDdnZG1obg'}
    # {'domain': '192.168.0.141', 'expiry': 1642653352, 'httpOnly': False, 'name': 'iweb_admin_role_name', 'path': '/',
    #  'secure': False, 'value': '76bb1f91a1MTA5NTQwMDgwNTI3ZWY1NDg1MjU1bDE1bz5jZGA9OT%2FutoXmuqbgrqTnk4bll54'}
    # {'domain': '192.168.0.141', 'expiry': 1642653353, 'httpOnly': False, 'name': 'iweb_admin_right', 'path': '/',
    #  'secure': False, 'value': '825c711358NDUwMTA1MDAwMDQzZzo2YmhmNDc7YTMwMjljNTY1NjlgZGtsa2l3c3VmdG91'}
    # {'domain': '192.168.0.141', 'expiry': 1642653352, 'httpOnly': False, 'name': 'iweb_admin_pwd', 'path': '/',
    #  'secure': False,
    #  'value': '76bb1f91a1MTA5NTQwMDgwNWQwYjlmNGY3YTExPmxhMThgYmE%2FOTNjMTBgZGI0OTE5YWE1P2dgYmw1PmUwNTRmMzRuMT47ZQ'}
    # {'domain': '192.168.0.141', 'expiry': 1642653353, 'httpOnly': False, 'name': 'iweb_safecode', 'path': '/',
    #  'secure': False,
    #  'value': '825c711358NDUwMTA1MDAwMDFiMW0xZT1lMjFrM2AwNzhjNjJhZTI1MzQ1MDAzMmM2YjJhPGVqNWQyPzA0MTBlYzhhOD02Ng'}
    # {'domain': '192.168.0.141', 'expiry': 1642653352, 'httpOnly': False, 'name': 'iweb_admin_id', 'path': '/',
    #  'secure': False, 'value': '76bb1f91a1MTA5NTQwMDgwNWNjZTU2YDAxNTI4bjBgOGowNTI7YTA3'}
    # {'domain': '192.168.0.141', 'expiry': 1642653351, 'httpOnly': False, 'name': 'iweb_Captcha', 'path': '/',
    #  'secure': False, 'value': 'f4c38b0ec2MDkwOTAwOTMwMDRjbDhhYWc4PDdgM2BiOWVmYjAzYWZrb2dnZA'}

    def tearDown(self) -> None:
        pass

if __name__=='__main__':
    unittest.main();

上一篇:JAVA多线程--Thread(6)


下一篇:【无标题】校招面试必须会的线程同步(细解)