一、背景
因为我们系统是用企业微信扫码登录的,就输入网址
 management-xxx.xxx.com以后,url就会重定向到企业微信授权的url :https://open.work.weixin.qq.com/wwopen/sso/3rd_qrConnect?state=xxx&redirect_uri=management-xxx.xxx.com
 ,直到获取auth_code之后登录成功,然后再跳回首页。
 但是因为重定向导致domain变了,cookie一直塞不进去,提示“invalid token domain”
 
二、解决方案
1、尝试把domain替换成微信的domain
 虽然可以登录成功,但是那个domain毕竟不是我们系统的,所以失败了
2、找开发mock一个授权扫码登录的接口
 这个方式可能可行,但是我找的开发对这块不熟悉,说不确定是否可以实现
3、增加等待时长,强制让它不跳转
 既然selenium只是通过地址栏里面的域名来写入cookie的,那么我们只需要通过某种方法来中断selenium 的加载使地址栏保持登录后的域名网址即可。这个方法就是python的try except的异常捕捉方法!
 参考文章:关于使用selenium免登陆爬取网页时,自动跳转登录页面从而导致写cookie失败的解决办法
 代码如下:
import json
import time
import yaml
from selenium import webdriver
'''
获取cookie
'''
class TestMALogin:
    def setup_class(self):
        self.driver = webdriver.Chrome()
        self.driver.implicitly_wait(10)
        self.driver.maximize_window()
    # def teardown_class(self):
    #     self.driver.quit()
    def test_save_cookies(self):
        """
        保存cookies
        :return:
        """
        # 1.访问MA的登录页面
        self.driver.get("management-xxx.xxx.com")
        # self.driver.get("management-xxx.xxx.com")
        # 2.手机扫码
        time.sleep(10)
        # 3.获取浏览器的cookies
        cookies = self.driver.get_cookies()
        print(cookies)
        # 4.保存cookies
        with open("./cookies2.yaml", "w") as f:
            yaml.safe_dump(data=cookies, stream=f)
    def test_get_cookie(self):
        """
        植入cookie跳过登录
        :return:
        """
        try:
            self.driver.set_page_load_timeout(1)
            # 1.访问MA首页
            self.driver.get("management-xxx.xxx.com")
        except:
            self.driver.set_page_load_timeout(10)
            # 2.获取本地的cookie
            with open("./cookies2.yaml", "r") as f:
                cookies = yaml.safe_load(f)
            # 3.植入cookie
            for c in cookies:
                self.driver.add_cookie(c)
                # 4.访问MA首页
                self.driver.get("management-xxx.xxx.com")
    time.sleep(5)



















