selenium中使用cookies避免网页重复登录问题
此处以 qq音乐网页版为例 网址
y.qq.com
编写程序 完成 qq音乐的输入账号密码方式的登录自动化测试 记录登录后产生的cookies并将其存储在代码所在路径的cookie.pickle文件中
import os
import pickle
import time
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
brower = webdriver.Chrome()
wait = WebDriverWait(brower, 10)
url = "https://y.qq.com/"
brower.get(url)
bcookies = brower.get_cookies()
# 登录前的cookie 输出登录前的cookie
cookies_nologin = {}
for item in bcookies:
cookies_nologin[item['name']] = item['value']
print(cookies_nologin)
print("\n\n")
# 完成qq音乐登录相关的一系列操作,
# 包括点击登录---点击密码登录---输入账号密码--点击登录 最终完成登录
# 记录登录后的cookies信息存储在 当前代码路径下的 cookie.pickle文件中
# 点击登录
brower.find_element(By.XPATH,'//*[@id="app"]/div/div[1]/div/div[2]/span/a').click()
time.sleep(3)
# 切换两个窗口frame 进入登录窗口
login_frame = brower.find_element(By.ID,'login_frame')
brower.switch_to.frame(login_frame)
ptlogin_iframe = brower.find_element(By.ID,'ptlogin_iframe')
brower.switch_to.frame(ptlogin_iframe)
# 点击密码登录
brower.find_element(By.XPATH,'//*[@id="switcher_plogin"]').click()
time.sleep(3)
# 输入qq号
brower.find_element(By.XPATH,'//*[@id="u"]').send_keys('qq号码')
time.sleep(2)
# 输入密码
brower.find_element(By.XPATH,'//*[@id="p"]').send_keys('密码')
time.sleep(2)
# 点击登录
brower.find_element(By.XPATH,'//*[@id="login_button"]').click()
time.sleep(3)
# 得到登录后的cookies信息
bcookies = brower.get_cookies()
# 登录后的cookie 输出登录后的cookie
cookies = {}
for item in bcookies:
cookies[item['name']] = item['value']
outputPath = open('cookie.pickle','wb')
pickle.dump(cookies,outputPath)
#print(browser.get_cookies())
print(cookies)
print("\n\n")
或者
import os
import pickle
import time
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
brower = webdriver.Chrome()
wait = WebDriverWait(brower, 10)
url = "https://y.qq.com/"
brower.get(url)
bcookies = brower.get_cookies()
# 登录前的cookie 输出登录前的cookie
cookies_nologin = {}
for item in bcookies:
cookies_nologin[item['name']] = item['value']
print(cookies_nologin)
print("\n\n")
# 60s内手动完成qq音乐网页登录的一系列操作
# 包括点击登录---点击密码登录---输入账号密码--点击登录 最终完成登录
# 记录登录后的cookies信息存储在 当前代码路径下的 cookie.pickle文件中
time.sleep(60)
# 得到登录后的cookies信息
bcookies = brower.get_cookies()
# 登录后的cookie 输出登录后的cookie
cookies = {}
for item in bcookies:
cookies[item['name']] = item['value']
outputPath = open('cookie.pickle','wb')
pickle.dump(cookies,outputPath)
#print(browser.get_cookies())
print(cookies)
print("\n\n")
操作使用上述代码中产生的cookie文件就可以实现qq音乐网页的免登陆了,代码如下
import os
import pickle
import time
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
# 存储登录后状态的cookie 的文件 cookie.pickle
cookie_pickle= pickle.load(open('cookie.pickle','rb'))
brower = webdriver.Chrome()
wait = WebDriverWait(brower, 10)
url = "https://y.qq.com/"
brower.get(url)
for cookie in cookie_pickle:
brower.add_cookie({
"domain":".y.qq.com",
"name":cookie,
"value":cookie_pickle[cookie],
"path": '/'
#"expires": None
})
brower.get(url)
time.sleep(5)
使用上述selenium自动化测试程序打开y.qq.com网页,此时qq音乐处于登录状态
注意:
如间隔了一段时间或者其他原因造成使用上述代码打开y.qq.com qq音乐未处于登录状态
其原因可能是 cookie.pickle 文件中的存储的登录后的cookies信息失效
再次运行第一段代码重新生成cookie.pickle文件即可