自动保存cookie登录网站

python保存cookie自动登录网站**

class Test_loggin(object):
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
import json
from time import sleep
from datetime import datetime
import os

def __init__(self, log_url, home_url, cookie_path, cookie_name = 'cookie.txt', expiration_time = 120):
    '''
    :param log_url: 登录网址
    :param home_url: 首页网址
    :param cookie_path: cookie文件存放路径
    :param cookie_path: 文件命名
    :param expiration_time: cookie过期时间,默认30分钟
    '''
    self.log_url = log_url
    self.home_url = home_url
    self.cookie_path = cookie_path
    self.cookie_name = cookie_name
    self.expiration_time = expiration_time

def get_cookie(self):
    '''手动登录获取cookie'''
    driver = webdriver.Chrome()
    driver.get(self.log_url)
    driver.maximize_window()

    # 显性等待1,当页面某个元素消失时就执行下列的操作
    WebDriverWait(driver, 120, 2).until_not(lambda x: x.find_element_by_xpath("//button[@class='btn btn-login btn-block']"))
    print("登录成功")
    # 首页验证1
    WebDriverWait(driver, 120, 2).until(lambda x: x.find_element_by_xpath("//ul[@class='nav nav-second-level collapse']"))
    print("进入主页验证1成功")
    # 首页元素验证2
    WebDriverWait(driver, 120, 2).until(EC.presence_of_element_located((By.XPATH, "//div[@class='page-tabs-content']")))
    print("进入主页验证2成功")

    with open(os.path.join(self.cookie_path, self.cookie_name), 'w') as cookief:    # 创建文本覆盖保存cookie
        # 将cookies保存为json格式
        cookief.write(json.dumps(driver.get_cookies()))
    print("cookie保存成功")
    driver.close()
    print("浏览器退出")

def pd_Cookie(self):
    '''获取最新的cookie文件,判断是否过期'''
    cookie_list = os.listdir(self.cookie_path)  # 获取目录下所有文件
    if not cookie_list:  # 判断文件为空时,直接执行手动登录
        self.get_cookie()
    else:
        cookie_list2 = sorted(cookie_list)  # 升序排序文件,返回新列表;sort是对原列表进行排列
        new_cookie = os.path.join(cookie_path, cookie_list2[-1])    # 获取最新cookie文件的全路径

        file_time = os.path.getmtime(new_cookie)  # 获取最新文件的修改时间,返回为时间戳1590113596.768411
        t = datetime.fromtimestamp(file_time)  # 时间戳转化为字符串日期时间
        print('当前时间:', datetime.now().strftime("%H:%M:%S"))
        print('最新cookie文件修改时间:', t.strftime("%H:%M:%S"))
        date = (datetime.now() - t).seconds // 60  # 时间之差,seconds返回相距秒数//60,返回分数
        print('相距分钟:{0}分钟'.format(date))
        if date > self.expiration_time:  # 默认判断大于30分钟,即重新手动登录获取cookie
            print("cookie已经过期,请重新手动登录获取")
            return self.get_cookie()
        else:
            print("cookie未过期")

def cookie_loggin(self):
    '''自动登录操作'''
    self.pd_Cookie()  # 首先判断cookie是否已获取,是否过期
    driver = webdriver.Chrome()
    driver.get(self.log_url)
    driver.delete_all_cookies()     # 清除旧cookies

    # with可以上下文管理上文进行设置部署,下文进行处理,然后把处理的结果赋值给变量(cookie)
    with open(os.path.join(self.cookie_path, self.cookie_name),'r') as cookief:
        #使用json读取cookies 注意读取的是文件 所以用load而不是loads
        cookieslist = json.load(cookief)

        for cookie in cookieslist:
            #该字段有问题所以删除就可以  浏览器打开后记得刷新页面 有的网页注入cookie后仍需要刷新一下
            if 'expiry' in cookie:
                del cookie['expiry']
            driver.add_cookie(cookie)

        driver.maximize_window()
        driver.get(self.home_url)
        sleep(4)
        driver.close()
        if __name__ == "__main__":
# 注意:网址可以换成其他的
log_url = 'http://124.128.225.19:9090/plateform/'      # 登录页面url
home_url = 'http://124.128.225.19:9090/plateform//index'      # 首页url
cookie_path = 'D:\cookies'     # 存放cookie的路径

代码已经测试通过!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值