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):# 獲取ctokenwith 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_decoderaise 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 格式會存在區別
- 獲取的cookies
- 使用的cookies
- 解決方案
需要重新手動組裝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一起探索測試之道。