0


selenium处理cookie问题实战

1. cookie获取不完整

需要进入的资损平台(web)首页,才会出现有效的ctoken等信息

1.1. 原因说明

未进入指定页面而获取的 cookie 与进入页面后获取的 cookie 可能会有一些差异,这取决于网站的具体实现和 cookie 的设置方式。

通常情况下,一些网站会在用户进入页面后生成一些特定的 cookie,这些 cookie 可能包含用户会话信息、跟踪信息等。因此,未进入指定页面时获取的 cookie 可能不包含这些信息。

另一方面,有些网站的 cookie 是在用户访问任意页面时就会生成并存储在浏览器中的。在这种情况下,未进入指定页面时获取的 cookie 与进入页面后获取的 cookie 可能没有太大差异。

总的来说,获取的 cookie 是否有差异取决于网站的具体实现和 cookie 的使用方式。如果您需要精确获取特定页面生成的 cookie 信息,最好在访问该页面后再获取 cookie,以确保获取到完整的信息

2. cookie数据解析异常

原始数据:

[{'domain': '.antdigital.com', 'httpOnly': False, 'name': 'ctoken', 'path': '/', 'sameSite': 'Lax', 'secure': False, 'value': 'bigfish_ctoken_1965hjgh1k'}, {'domain': '.antdigital.com', 'httpOnly': False, 'name': 'authorization', 'path': '/', 'sameSite': 'None', 'secure': True, 'value': 'hmac%200144145205-2%3AYjgzT1VyM0xMR1FIeEU1cHFXZjVhbGVFeWVkbE92blY%3D~0'}, {'domain': '.antdigital.com', 'expiry': 1748313361, 'httpOnly': True, 'name': 'receive-cookie-deprecation', 'path': '/', 'sameSite': 'None', 'secure': True, 'value': '1'}, {'domain': '.antdigital.com', 'httpOnly': False, 'name': 'ALIPAYJSESSIONID', 'path': '/', 'sameSite': 'None', 'secure': True, 'value': 'a4dgrBlrGO2LycGAp9ISLbKlhltzDJp8ternbase'}, {'domain': 'console.sofa.antdigital.com', 'expiry': 1716779163, 'httpOnly': True, 'name': 'acw_tc', 'path': '/', 'sameSite': 'Lax', 'secure': False, 'value': '2f61f26f17167773639898915e1415a864af5bda3a434801717cf15188cbe4'}, {'domain': '.antdigital.com', 'expiry': 1732502161, 'httpOnly': False, 'name': 'UM_distinctid', 'path': '/', 'sameSite': 'Lax', 'secure': False, 'value': '18fb7e7a1737e8-03debf79208018-26001c51-1fa400-18fb7e7a1747d6'}, {'domain': '.antdigital.com', 'httpOnly': False, 'name': '_CHIPS-ALIPAYJSESSIONID', 'path': '/', 'sameSite': 'None', 'secure': True, 'value': 'a4dgrBlrGO2LycGAp9ISLbKlhltzDJp8ternbase'}]

2.1. json库解析异常

data_list = json.loads(cookie)

    def get_token(self):
        # 获取ctoken
        with open("cookie.txt", "r", encoding="utf8") as file:
            # 读取数据
            cookie = file.read()
            print(f"cookie的数据类型为:{type(cookie)}")
            print(f"cookie的数据为:{cookie}")

        # 添加双引号修复属性名
        cookie = cookie.replace("'", "\"")
        # 将字符串转换为字典列表
        data_list = json.loads(cookie)

错误日志:

File "D:\Program Files\Python12\Lib\json\decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 44 (char 43)

2.2. 解决方案

data_list = ast.literal_eval(cookie)

说明:

使用 **ast.literal_eval()** 解析给定的字符串数据。如果数据格式符合 Python 表达式的规则,ast.literal_eval() 将能够成功解析字符串并转换为对应的数据结构

3. 使用cookie异常

获取的 cookies 与 实际要使用的 cookies 格式会存在区别

  1. 获取的cookies

  1. 使用的cookies

  1. 解决方案

需要重新手动组装cookies:

driver.get_cookies() 获取到的 cookies 转换为请求头(headers)中的 cookie 格式,你需要将每个 cookie 对象中的 **'name**''**value**' 键值对转换为符合请求头中 cookie 格式的形式

# 将 cookies 转换为请求头中的 cookie 格式
cookie_str = "; ".join([f"{cookie['name']}={cookie['value']}" for cookie in cookies])

获取数据:

ctoken=bigfish_ctoken_1966236jjg; authorization=hmac%200144145205-2%3AWUttZTlldlNZT2prMU8wUDRJNGVqWkd1NVh3QTA1RGs%3D~0; receive-cookie-deprecation=1; ALIPAYJSESSIONID=BqeDLcccF1d50BvqmzG8KZ2D2Kwaxdg0ternbase; acw_tc=0a47329a17168095857613765e004ac76293e2b2a9afc04ba5901f2ca7fd41; UM_distinctid=18fb9d349b9135-0b5e7625d4afa6-26001c51-1fa400-18fb9d349bad4; _CHIPS-ALIPAYJSESSIONID=BqeDLcccF1d50BvqmzG8KZ2D2Kwaxdg0ternbase

欢迎关注公众号,与Joker一起探索测试之道。

标签: 自动化 selenium

本文转载自: https://blog.csdn.net/wl18271672781/article/details/140192649
版权归原作者 Anthony_路人甲 所有, 如有侵权,请联系我们删除。

“selenium处理cookie问题实战”的评论:

还没有评论