python自动化-使用cookie实现自动登录

本文由以下几个部分组成
1.实现过程
2.环境
3.代码
4.代码优化计划
代码已优化,见具体代码

实现过程:

  • 打开网站——登录——获取cookie——将cookie存储到Python小型数据库——后续再需要登录时直接从本地数据库获取cookie即可
  • cookie中有时候有过期时间,可以去掉,避免登录受影响
  • 当cookie失效后,再次获取即可,此方法避免了每次都要去获取cookie,在有效期获取一次即可
  • 如果失效,重新获取即可

环境
开发环境:python+pycharm
测试网站:ceshiren.com
验证情况:有一些网站只有登录后可以查看,验证带着cookie去登录是否能访问到正确的网站即可

代码
git地址:https://github.com/karen-liu01/login_through_cookie
具体代码:

import shelve
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By


class TestDemo1:
    def setup(self):
        url = "https://ceshiren.com/t/topic/6223/21"
        self.driver = webdriver.Chrome()
        # self.driver.get(url)
        self.driver.get("https://ceshiren.com")
        self.driver.maximize_window()
        self.driver.implicitly_wait(5)
        sleep(3)

    def teardown(self):
        self.driver.quit()

    def get_cookies(self):
        self._username = "XXX"
        self._password = "XXX"

        print("打开界面点击登录按钮")
        self.driver.find_element(By.XPATH, "//*[@id='ember5']/header/div/div/div[2]/span/button[2]/span").click()
        sleep(3)
        print("输入用户名和密码点击登录")
        self.driver.find_element(By.XPATH, '//*[@id="login-account-name"]').send_keys(self._username)
        self.driver.find_element(By.XPATH, '//*[@id="login-account-password"]').send_keys(self._password)
        self.driver.find_element(By.XPATH, '//*[@id="login-button"]/span').click()
        sleep(7)
        print("获取cookie")
        self.driver.get("https://ceshiren.com/t/topic/4496/2")
        cookies = self.driver.get_cookies()
        print(cookies)
        return cookies

    def handle_cookies(self):
        cookies_test = self.get_cookies()
        print(cookies_test)
        db = shelve.open("cookies")
        db["cookie"] = cookies_test
        c = db["cookie"]
        for cookie in c:
            if "expiry" in cookie.keys():
                cookie.pop("expiry")
            self.driver.add_cookie(cookie)
        db.close()
        return c

    def test_login(self):
        db = shelve.open("cookies")
        cookies = db["cookie"]
        db.close()
        print(cookies)
        for cookie in cookies:
            self.driver.add_cookie(cookie)
        sleep(3)
        self.driver.get("https://ceshiren.com/t/topic/6223/21")
        sleep(3)
        print(f"***** {self.driver.title}")
        title = self.driver.title
        key = "到课率查询贴"
        if key in title:
            print("cookies有效,登录成功")
            assert key  in title
        else:
            print("cookies无效,需要重新获取并存储")
            cookies = self.handle_cookies()
            self.driver.get("https://ceshiren.com/t/topic/6223/21")
            sleep(3)
            title = self.driver.title
            assert key in title

代码优化计划
1.将cookie是否有效加一个判断,如果有效,直接登录,如果失效,再去获取即可
2.浏览器打开及退出等操作,可以放在setup和teardown中
3.username和password可以提取成变量
已优化,见代码

你可能感兴趣的:(python自动化-使用cookie实现自动登录)