admin管理员组

文章数量:1616675

验证码在当今的软件中应用非常广泛,如手机App,网页网站等,很多地方在利用这种机制来规避一些安全和隐私问题。
在自动化测试过程时,其中验证码的一种处理思路是通过cookie操作的形式来绕过验证码甚至是二维码等安全机制。而且这种方法和思路相对来说也是简便一些。

示例:通过百度网盘的登录场景来演示cookie实现自动化登录。
步骤1:通过脚本抓取初次打开百度网盘首页的cookie:

from selenium import webdriver

driver = webdriver.Chrome()
driver.get('https://pan.baidu/')
cookies = driver.get_cookies()
print(cookies)
driver.quit()

执行代码后得到cookie的详情:
[{‘domain’: ‘.baidu’, ‘expiry’: 1679491301, ‘httpOnly’: False, ‘name’: ‘BAIDUID_BFESS’, ‘path’: ‘/’, ‘sameSite’: ‘None’, ‘secure’: True, ‘value’: ‘95FF9F733C38131EAA8CE70BF5C423A9:FG=1’}, {‘domain’: ‘.baidu’, ‘expiry’: 1679491300, ‘httpOnly’: False, ‘name’: ‘BAIDUID’, ‘path’: ‘/’, ‘secure’: False, ‘value’: ‘95FF9F733C38131EAA8CE70BF5C423A9:FG=1’}]

步骤2:登录百度网盘,再抓取一次cookie:

from selenium import webdriver

driver = webdriver.Chrome()
driver.maximize_window()
driver.get('https://pan.baidu/')
driver.implicitly_wait(10)
driver.find_element_by_xpath('//input[@id="TANGRAM__PSP_4__userName"]').send_keys('输入账号')
driver.find_element_by_xpath('//input[@id="TANGRAM__PSP_4__password"]').send_keys('输入密码')
driver.find_element_by_xpath('//input[@id="TANGRAM__PSP_4__submit"]').click()
cookies = driver.get_cookies()
print(cookies)
driver.quit()

步骤3:比较一下两次得到的cookie值的差别,找出哪些项是在第一次cookie值中没有的。通过添加这些缺少的值,来实现自动化登录。

# coding = utf-8
# Author: wh
# Date: 2022/3/22 21:09

from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get('https://pan.baidu/')
cookies= [{'domain': '.pan.baidu', 'httpOnly': False, 'name': 'Hm_lpvt_7a3960b6f067eb0085b7f96ff5e660b0', 'path': '/', 'secure': False, 'value': '1613827179'},
          {'domain': '.pan.baidu', 'expiry': 1645363178, 'httpOnly': False, 'name': 'Hm_lvt_7a3960b6f067eb0085b7f96ff5e660b0', 'path': '/', 'secure': False, 'value': '1613827179'},
          {'domain': '.pan.baidu', 'expiry': 1616505578, 'httpOnly': True, 'name': 'STOKEN', 'path': '/', 'secure': False, 'value': 'a1abe64bd378e143476f2d856a1e5a7080aff1abc2ecd89f32ea5e90a9345e17'},
          {'domain': 'pan.baidu', 'httpOnly': False, 'name': 'csrfToken', 'path': '/', 'secure': False, 'value': 'DllTNBH92jJnSmaaheqBlCVP'},
          {'domain': 'pan.baidu', 'expiry': 4205827178, 'httpOnly': False, 'name': 'pan_login_way', 'path': '/', 'secure': False, 'value': '1'},
          {'domain': '.baidu', 'expiry': 1873027176, 'httpOnly': True, 'name': 'BDUSS_BFESS', 'path': '/', 'sameSite': 'None', 'secure': True, 'value': 'dBZktEYzQxVH5WVzBBYndldVN1SFpzNHJXM1B5ajBLamZvcE9PbmJ1eG9tVmhnSVFBQUFBJCQAAAAAAAAAAAEAAACR-JXzu6LHxbe76srX0wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGgMMWBoDDFgQ1'},
          {'domain': '.pan.baidu', 'expiry': 1613913578, 'httpOnly': True, 'name': 'PANPSC', 'path': '/', 'secure': False, 'value': '7228614414795236799%3AHSTAF2Xekfpr2hRSrOsG6kYemHfSgA%2FTpMk%2BQbyzAbdSghkg9EtPCY8c7lMN%2Fy07vd10u1h12sgr2wqYbSNJzI5Z7CUEEVIfuYpAOs4Qb65E2OlLZIpvWpwI2lYmdZVOf9Ocgd2LBDwKxMOTh0nUJJC9qgHiau%2FldS8c7ndIzLExGZiuUUeCaoX0p6z9lD8V7g%2B5PM2vWus%3D'},
          {'domain': '.baidu', 'expiry': 1873027176, 'httpOnly': True, 'name': 'BDUSS', 'path': '/', 'secure': False, 'value': 'dBZktEYzQxVH5WVzBBYndldVN1SFpzNHJXM1B5ajBLamZvcE9PbmJ1eG9tVmhnSVFBQUFBJCQAAAAAAAAAAAEAAACR-JXzu6LHxbe76srX0wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGgMMWBoDDFgQ1'},
          {'domain': '.baidu', 'expiry': 1645363164, 'httpOnly': False, 'name': 'BAIDUID', 'path': '/', 'secure': False, 'value': '9B84713A7600A60235F0E15E206A8C3D:FG=1'}]
# 写入cookie
for cookie in cookies:
    driver.add_cookie(cookie)
time.sleep(3)
# 访问网站,查看是否是登录状态
driver.get('https://pan.baidu/')
# 关闭浏览器
driver.quit()

本文标签: 验证码形式操作cookie