pprint.pprint(ckList) # 完美打印

说明:
1、ui自动化中,登录是必须执行的。
    1、对于没有验证码的系统,直接定位元素自动化操作就可以。
    2、对于有验证码的系统,可以用cookie绕过登录。

2、局限性
    1、cookie 必须有效,这就意味着我们需要先手动登陆一次,获取cookie。
    2、cookie若失效了,则需再次手动获取。
    3、介于这种方式的局限性,一般在遭遇验证码之后,我们还有如下的解决方案:
        1、万能验证码(开发在系统中写死一个验证码)。
        2、让开发在测试环境中取消人机验证(可以做一个开关,正式环境:关闭,测试环境:开启)。

一、获取/删除/添加cookie

from selenium import webdriver
import time

# 创建浏览器驱动对象
driver = webdriver.Chrome(r"D:\chromedriver\chromedriver_win32-V103.0.5060.53\chromedriver.exe")
driver.implicitly_wait(3)  # 智能等待_隐性等待
# 访问网址
driver.get("http://127.0.0.1:8088/")

# 数入用户名
driver.find_element_by_name("username").send_keys("ymnl")
# 输入密码
driver.find_element_by_name("password").send_keys("123456")
# 点击登录按钮
driver.find_element_by_tag_name("button").click()

1、获取所有cookie信息

# 1、get_cookies()
# 2、返回是一个列表,列表中存的是一个个的字典。
# 3、cookie 的内容是以键值对的形式存在。
ckList = driver.get_cookies()
print(ckList)
pprint.pprint(ckList)  # 完美打印

# 返回
# [{'domain': '127.0.0.1', 'httpOnly': False, 'name': 'Hm_lpvt_750463144f16fe69eb3ac11bea1c4436', 'path': '/', 'secure': False, 'value': '1656071460'},
#  {'domain': '127.0.0.1', 'expiry': 1687607459, 'httpOnly': False, 'name': 'Hm_lvt_750463144f16fe69eb3ac11bea1c4436', 'path': '/', 'secure': False, 'value': '1656071460'},
#  {'domain': '127.0.0.1', 'expiry': 1687607459, 'httpOnly': True, 'name': 'beegosessionID', 'path': '/', 'secure': False, 'value': 'c380886acb7d46580a4336568fee3174'}]

2、获取单个cookie信息

# 1、get_cookie()
# 2、参数为name的值:beegosessionID
ckOne = driver.get_cookie("beegosessionID")
print(ckOne)

# 返回
# {'domain': '127.0.0.1', 'expiry': 1687607687, 'httpOnly': True, 'name': 'beegosessionID', 'path': '/', 'secure': False, 'value': '64652743d4725f166338153efdf70bb7'}

3、添加cookie

# 1、add_cookie()
# 2、接收的参数是一个字典,必须有name和value值。
# 3、添加后返回的cookies列表会增加1条cookie。
ckAdd = driver.add_cookie({"name": "zs", "age": "18", "value": "123"})
# 获取所有cookie信息
ckList = driver.get_cookies()
print(ckList)

# 返回
# [{'domain': '127.0.0.1', 'httpOnly': False, 'name': 'zs', 'path': '/', 'secure': False, 'value': '123'},
#  {'domain': '127.0.0.1', 'httpOnly': False, 'name': 'Hm_lpvt_750463144f16fe69eb3ac11bea1c4436', 'path': '/', 'secure': False, 'value': '1656071837'},
#  {'domain': '127.0.0.1', 'expiry': 1687607836, 'httpOnly': False, 'name': 'Hm_lvt_750463144f16fe69eb3ac11bea1c4436', 'path': '/', 'secure': False, 'value': '1656071837'},
#  {'domain': '127.0.0.1', 'expiry': 1687607836, 'httpOnly': True, 'name': 'beegosessionID', 'path': '/', 'secure': False, 'value': 'ca10da34cdcce2352c79f1b38f7836f7'}]

4、删除所有的cookie

# 1、delete_all_cookies()
# 2、返回结果为:[]
driver.delete_all_cookies()
# 获取所有cookie信息
ckList = driver.get_cookies()
print(ckList)

5、删除某个指定的cookie

# 1、delete_all_cookies()
# 2、参数为name的值:zs
# 3、删除后返回的cookies列表会减少1条cookie。
driver.delete_cookie("zs")
# 获取所有cookie信息
ckList = driver.get_cookies()
print(ckList)

二、通过cookie绕过登录测试

1、先获取登录后的cookie信息列表

# 获取登录后的cookie信息列表
pprint.pprint(driver.get_cookies())  # 完美打印

cookieSli = [{'domain': '127.0.0.1',
              'httpOnly': False,
              'name': 'Hm_lpvt_750463144f16fe69eb3ac11bea1c4436',
              'path': '/',
              'secure': False,
              'value': '1656073218'},
             {'domain': '127.0.0.1',
              'expiry': 1687609218,
              'httpOnly': False,
              'name': 'Hm_lvt_750463144f16fe69eb3ac11bea1c4436',
              'path': '/',
              'secure': False,
              'value': '1656073218'},
             {'domain': '127.0.0.1',
              'expiry': 1687609218,
              'httpOnly': True,
              'name': 'beegosessionID',
              'path': '/',
              'secure': False,
              'value': '6e3626745ff7e70d5d19a76bb7b73f42'}]

2、通过cookie绕过登录测试

cookieSli = [{'domain': '127.0.0.1',
              'httpOnly': False,
              'name': 'Hm_lpvt_750463144f16fe69eb3ac11bea1c4436',
              'path': '/',
              'secure': False,
              'value': '1656073218'},
             {'domain': '127.0.0.1',
              'expiry': 1687609218,
              'httpOnly': False,
              'name': 'Hm_lvt_750463144f16fe69eb3ac11bea1c4436',
              'path': '/',
              'secure': False,
              'value': '1656073218'},
             {'domain': '127.0.0.1',
              'expiry': 1687609218,
              'httpOnly': True,
              'name': 'beegosessionID',
              'path': '/',
              'secure': False,
              'value': '6e3626745ff7e70d5d19a76bb7b73f42'}]

from selenium import webdriver

# 创建浏览器驱动对象
driver = webdriver.Chrome(r"D:\chromedriver\chromedriver_win32-V103.0.5060.53\chromedriver.exe")
driver.implicitly_wait(3)  # 智能等待_隐性等待
# 访问网址
driver.get("http://127.0.0.1:8088/")

# 清除所有的cookie,因为原先的cookie是无登录状态的。
driver.delete_all_cookies()

# 挨个将获取到的有登录状态的cookie添加进去。
for cookie in cookieSli:
    driver.add_cookie(cookie)

# 最后,要刷新一下
driver.refresh()
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐