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