为了防止网站被恶意注册,很多的网站都在登录页面加入了识别文字,识别图片,拖动拼图的方式来识别机器人,但是如果我们要用这个网站做UI自动化测试,登录的时候就会很麻烦,每次都要手动输入验证码之类的,使用cookie登录就能很好的解决这个问题。
cookie登录原理:第一次登录网站的时候手动输入信息,然后把cookie保存下载,cookie信息中存了一些可以识别用户身份的信息,第二次登录网站的时候,加载cookie,服务器就会通过cookie中的信息去识别用户,然后登录成功。所以cookie登录主要分为两大步,一是获取cookie,二是添加cookie。
获取cookie
import requests
import time
import json
from selenium import webdriver
# 先打开需要登录的网址
driver = webdriver.Chrome()
driver.get("https://www.jianshu.com/sign_in")
# 输入用户名密码点击登录
driver.find_element_by_id("session_email_or_mobile_number").send_keys("username")
driver.find_element_by_id("session_password").send_keys("password")
driver.find_element_by_id("sign-in-form-submit-btn").click()
time.sleep(10) # 手动验证时间
# ---- 获得cookies -----
cookie = driver.get_cookies()
print(cookie) # list
# 将cookies数据存入文件
cookie_data_file = "D:\CookieData.json"
json.dump(cookie,open(cookie_data_file,"w"))
登录时添加cookie
# ---- cookie 登录-----
# 打开网址
driver = webdriver.Chrome()
driver.get("https://www.jianshu.com/sign_in")
# 从cookie json文件读取python数据
cookie_data_file = "D:\CookieData.json"
python_data = json.load(open(cookie_data_file))
print(python_data)
# 添加cookie
for cookie in python_data:
driver.add_cookie(cookie)
# 登录成功的页面地址
driver.get("https://www.jianshu.com/")
但是有一个问题是,使用cookie登录成功之后,页面就自动关闭了,没有办法进行后续操作,关闭原因是代码自动调用了service模块的stop方法,所以想要页面不关闭,可以设置足够的等待时间(time.sleep(n)
)来完成后续操作。