selenium自动化的时候网址重定向问题的解决思路

一、背景

因为我们系统是用企业微信扫码登录的,就输入网址
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)