selenium中避免网页重复登录

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文件即可

猜你喜欢

转载自blog.csdn.net/weixin_44992225/article/details/130913379
今日推荐