├── src ├── requirements.txt ├── genmousemovements.py └── datadomecookiegen.py └── README.md /src/requirements.txt: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # DataDome Cookie Generator (CH/LE) 2 | 3 | - I made this back in December of 2023 when I still had 0 clue on how anti-bots worked, so it may need some updating depending on the site. 4 | 5 | - Was originally part of a private pokemon center module I created which I will probably open-source soon as well. 6 | 7 | - Wanted to open source this to help those who are starting out with webautomation. 8 | 9 | - Honestly, if you're looking for a ready-made solution instead of training your own model, an API like [CapSolver](https://dashboard.capsolver.com/passport/register?inviteCode=K4aa2y7rcpfX) can handle GeeTest pretty well 10 | 11 | - Not much documentation is needed as the code should be self explanitory. 12 | 13 | - If you need help feel free to reach out to my discord @millionarc1 14 | 15 | - Please star if you find it helpful, it really motivates me to keep pushing things out. 16 | -------------------------------------------------------------------------------- /src/genmousemovements.py: -------------------------------------------------------------------------------- 1 | import random 2 | import math 3 | 4 | def simmouse_movements(num_events=100): 5 | events = [] 6 | for _ in range(num_events): 7 | event = { 8 | "clientX": random.randint(0, 1000), 9 | "clientY": random.randint(0, 1000), 10 | "movementX": random.randint(-50, 50), 11 | "movementY": random.randint(-50, 50), 12 | "screenX": random.randint(0, 1000), 13 | "screenY": random.randint(0, 1000), 14 | "timeStamp": random.uniform(0, 5000) 15 | } 16 | events.append(event) 17 | return events 18 | 19 | def calculate_mm_md(events): 20 | max_distance = 0 21 | prev_event = None 22 | for event in events: 23 | if prev_event: 24 | dx = event["clientX"] - prev_event["clientX"] 25 | dy = event["clientY"] - prev_event["clientY"] 26 | distance = math.sqrt(dx**2 + dy**2) 27 | if distance > max_distance: 28 | max_distance = distance 29 | prev_event = event 30 | return max_distance 31 | 32 | def calculate_es_sigmdn(events): 33 | x = sum(math.log(e["timeStamp"]) for e in events) 34 | q = len(events) 35 | y = sum(math.log(e["timeStamp"])**2 for e in events) 36 | return math.sqrt((q * y - x * x) / (q * (q - 1))) / 1000 37 | 38 | def calculate_es_mumdn(events): 39 | timestamps = [e["timeStamp"] for e in events] 40 | q = len(events) 41 | return (sum(timestamps) / q) / 1000 42 | 43 | def calculate_es_distmdn(events): 44 | distances = [] 45 | prev_event = None 46 | for event in events: 47 | if prev_event: 48 | dx = event["clientX"] - prev_event["clientX"] 49 | dy = event["clientY"] - prev_event["clientY"] 50 | distances.append(math.sqrt(dx**2 + dy**2)) 51 | prev_event = event 52 | distances.sort() 53 | mid = len(distances) // 2 54 | return distances[mid] 55 | 56 | def calculate_es_angsmdn(events): 57 | start_angles = [random.uniform(-math.pi, math.pi) for _ in events] 58 | start_angles.sort() 59 | mid = len(start_angles) // 2 60 | return start_angles[mid] 61 | 62 | def calculate_es_angemdn(events): 63 | end_angles = [random.uniform(-math.pi, math.pi) for _ in events] 64 | end_angles.sort() 65 | mid = len(end_angles) // 2 66 | return end_angles[mid] 67 | 68 | def calculate_event_variables(event_counters): 69 | m_s_c = event_counters["scroll"] 70 | m_m_c = event_counters["mousemove"] 71 | m_c_c = event_counters["click"] 72 | 73 | m_cm_r = m_c_c / m_m_c if m_m_c != 0 else 0 74 | m_ms_r = m_m_c / m_s_c if m_s_c != 0 else 0 75 | 76 | return { 77 | "m_s_c": m_s_c, 78 | "m_m_c": m_m_c, 79 | "m_c_c": m_c_c, 80 | "m_cm_r": m_cm_r, 81 | "m_ms_r": m_ms_r 82 | } 83 | def generate_mouse_movements(): 84 | mouse_events = simmouse_movements() 85 | 86 | mm_md = calculate_mm_md(mouse_events) 87 | es_sigmdn = calculate_es_sigmdn(mouse_events) 88 | es_mumdn = calculate_es_mumdn(mouse_events) 89 | es_distmdn = calculate_es_distmdn(mouse_events) 90 | es_angsmdn = calculate_es_angsmdn(mouse_events) 91 | es_angemdn = calculate_es_angemdn(mouse_events) 92 | 93 | 94 | # Change depending on device/use touch if automating on mobile user agent 95 | event_counters = { 96 | "mousemove": len(mouse_events), 97 | "click": random.randint(0, 10), 98 | "scroll": random.randint(0, 600), 99 | "touchstart": 0, 100 | "touchend": 0, 101 | "touchmove": 0, 102 | "keydown": 0, 103 | "keyup": 0 104 | } 105 | event_vars = calculate_event_variables(event_counters) 106 | 107 | return { 108 | "mp_cx": random.choice(mouse_events)["clientX"], 109 | "mp_cy": random.choice(mouse_events)["clientY"], 110 | "mm_md": mm_md, 111 | "es_sigmdn": es_sigmdn, 112 | "es_mumdn": es_mumdn, 113 | "es_distmdn": es_distmdn, 114 | "es_angsmdn": es_angsmdn, 115 | "es_angemdn": es_angemdn, 116 | **event_vars 117 | } 118 | -------------------------------------------------------------------------------- /src/datadomecookiegen.py: -------------------------------------------------------------------------------- 1 | import random 2 | import json 3 | import time 4 | import datetime 5 | import urllib.parse 6 | from genmousemovements import generate_mouse_movements 7 | 8 | def generate_random_string(): 9 | return f"{random.randint(5, 20)}.{random.randint(1000000000000, 9999999999999)}" 10 | 11 | ttst = str(f"{random.randint(5, 18)}.{random.randint(100000000000000, 999999999999999)}") 12 | ttst2 = str(f"{random.randint(5, 18)}.{random.randint(100000000000000, 999999999999999)}") 13 | tagpu = str(f"{random.randint(0, 2)}.{random.randint(1000000000000, 9999999999999)}") 14 | tagpu2 = str(f"{random.randint(0, 2)}.{random.randint(1000000000000, 9999999999999)}") 15 | 16 | async def datadome_cookie_ch(proxy, session): 17 | url = "https://dd.pokemoncenter.com/js/" 18 | headers = { 19 | "accept": "*/*", 20 | "accept-encoding": "gzip, deflate, br", 21 | "accept-language": "en-US,en;q=0.9", 22 | "content-type": "application/x-www-form-urlencoded", 23 | "Dnt": "1", 24 | "origin": "https://www.pokemoncenter.com", 25 | "sec-ch-ua": "\"Not_A Brand\";v=\"8\", \"Chromium\";v=\"120\", \"Google Chrome\";v=\"120\"", 26 | "sec-ch-ua-mobile": "?0", 27 | "sec-ch-ua-platform": "\"Windows\"", 28 | "sec-fetch-dest": "empty", 29 | "sec-fetch-mode": "cors", 30 | "sec-fetch-site": "same-site", 31 | "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" 32 | } 33 | 34 | jsData = { 35 | "log1": False, 36 | "opts": "ajaxListenerPath,endpoint", 37 | "ttst": ttst, 38 | "ifov": False, 39 | "hc": 16, 40 | "br_oh": 1032, 41 | "br_ow": 1920, 42 | "ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36", 43 | "wbd": False, 44 | "dp0": True, 45 | "tagpu": tagpu, 46 | "wdif": False, 47 | "wdifrm": False, 48 | "npmtm": False, 49 | "br_h": 1050, 50 | "br_w": 1400, 51 | "nddc": 0, 52 | "rs_h": 1080, 53 | "rs_w": 1920, 54 | "rs_cd": 24, 55 | "phe": False, 56 | "nm": False, 57 | "jsf": False, 58 | "lg": "en-US", 59 | "pr": 1, 60 | "ars_h": 1032, 61 | "ars_w": 1920, 62 | "tz": 300, 63 | "str_ss": True, 64 | "str_ls": True, 65 | "str_idb": True, 66 | "str_odb": False, 67 | "plgod": False, 68 | "plg": 5, 69 | "plgne": True, 70 | "plgre": True, 71 | "plgof": False, 72 | "plggt": False, 73 | "pltod": False, 74 | "hcovdr": False, 75 | "hcovdr2": False, 76 | "plovdr": False, 77 | "plovdr2": False, 78 | "ftsovdr": False, 79 | "ftsovdr2": False, 80 | "lb": False, 81 | "eva": 33, 82 | "lo": False, 83 | "ts_mtp": 0, 84 | "ts_tec": False, 85 | "ts_tsa": False, 86 | "vnd": "Google Inc.", 87 | "bid": "NA", 88 | "mmt": "application/pdf,text/pdf", 89 | "plu": "PDF Viewer,Chrome PDF Viewer,Chromium PDF Viewer,Microsoft Edge PDF Viewer,WebKit built-in PDF", 90 | "hdn": False, 91 | "awe": False, 92 | "geb": False, 93 | "dat": False, 94 | "med": "defined", 95 | "aco": "probably", 96 | "acots": False, 97 | "acmp": "probably", 98 | "acmpts": True, 99 | "acw": "probably", 100 | "acwts": False, 101 | "acma": "maybe", 102 | "acmats": False, 103 | "acaa": "probably", 104 | "acaats": True, 105 | "ac3": "", 106 | "ac3ts": False, 107 | "acf": "probably", 108 | "acfts": False, 109 | "acmp4": "maybe", 110 | "acmp4ts": False, 111 | "acmp3": "probably", 112 | "acmp3ts": False, 113 | "acwm": "maybe", 114 | "acwmts": False, 115 | "ocpt": False, 116 | "vco": "", 117 | "vcots": False, 118 | "vch": "probably", 119 | "vchts": True, 120 | "vcw": "probably", 121 | "vcwts": True, 122 | "vc3": "maybe", 123 | "vc3ts": False, 124 | "vcmp": "", 125 | "vcmpts": False, 126 | "vcq": "", 127 | "vcqts": False, 128 | "vc1": "probably", 129 | "vc1ts": True, 130 | "dvm": 8, 131 | "sqt": False, 132 | "so": "landscape-primary", 133 | "wdw": True, 134 | "cokys": "bG9hZFRpbWVzY3NpYXBwL=", 135 | "ecpc": False, 136 | "lgs": True, 137 | "lgsod": False, 138 | "psn": True, 139 | "edp": True, 140 | "addt": True, 141 | "wsdc": True, 142 | "ccsr": True, 143 | "nuad": True, 144 | "bcda": False, 145 | "idn": True, 146 | "capi": False, 147 | "svde": False, 148 | "vpbq": True, 149 | "ucdv": False, 150 | "spwn": False, 151 | "emt": False, 152 | "bfr": False, 153 | "dbov": False, 154 | "cfpfe": "ZnVuY3Rpb24oKXt2YXIgdD1kb2N1bWVudFsnXHg3MVx4NzVceDY1XHg3Mlx4NzlceDUzXHg2NVx4NmNceDY1XHg2M1x4NzRceDZmXHg3MiddKCdceDYyXHg3Mlx4NmZceDc3XHg3M1x4NjVceDcyXHg2Nlx4NmNceDZmXHg3N1x4MmRceDYzXHg2Zlx4NmVceDc0XHg2", 155 | "stcfp": "Oi8vZGQucG9rZW1vbmNlbnRlci5jb20vdGFncy5qczoyOjg3NDk3KQogICAgYXQgaHR0cHM6Ly9kZC5wb2tlbW9uY2VudGVyLmNvbS90YWdzLmpzOjI6NTE1MzUKICAgIGF0IG5yV3JhcHBlciAoaHR0cHM6Ly93d3cucG9rZW1vbmNlbnRlci5jb20vOjI6MTg2NTQp", 156 | "ckwa": True, 157 | "prm": True, 158 | "tzp": "America/New_York", 159 | "cvs": True, 160 | "usb": "defined", 161 | "glvd": "Google Inc. (Intel)", 162 | "glrd": "ANGLE (Intel, Intel(R) Arc(TM) A770 Graphics (0x000056A0) Direct3D11 vs_5_0 ps_5_0, D3D11)", 163 | "wwl": False, 164 | "jset": int(time.mktime(datetime.datetime.now().timetuple())) 165 | } 166 | data = { 167 | 'jsData': json.dumps(jsData), 168 | 'eventCounters': [], 169 | 'jsType': 'ch', 170 | 'cid': None, 171 | 'ddk': '5B45875B653A484CC79E57036CE9FC', 172 | 'Referer': 'https%3A%2F%2Fwww.pokemoncenter.com%2F', 173 | 'request': '%2F', 174 | 'responsePage': 'origin', 175 | 'ddv': '4.19.2' 176 | } 177 | datadome_cookie_value = next((c.value for c in session.cookies if c.name.lower() == 'datadome'), None) 178 | 179 | if datadome_cookie_value: 180 | data['cid'] = datadome_cookie_value 181 | else: 182 | print("ERR session invalid") 183 | form_data = urllib.parse.urlencode(data) 184 | 185 | print(data) 186 | response = await session.post(url, headers=headers, json=form_data, proxy=proxy) 187 | print(response.text) 188 | try: 189 | cookie_string = response.text.split('"cookie":"')[1].split('";')[0] 190 | cookie_parts = cookie_string.split('; ') 191 | for part in cookie_parts: 192 | if '=' in part: 193 | name, value = part.split('=', 1) 194 | name = name.strip() 195 | if name.lower() == 'datadome': 196 | if 'datadome' in session.cookies: 197 | del session.cookies['datadome'] 198 | 199 | session.cookies.set(name, value, domain='.pokemoncenter.com', path='/') 200 | print(f"datadome cookie updated/set for ch: {name}={value}") 201 | break 202 | 203 | except Exception as e: 204 | print(f"Error parsing for cookie: {e}") 205 | 206 | print("Cookies after ch gen attempt:", session.cookies) 207 | 208 | return session 209 | 210 | async def datadome_cookie_le(proxy, session): 211 | 212 | url = "https://dd.pokemoncenter.com/js/" 213 | headers = { 214 | "accept": "*/*", 215 | "accept-encoding": "gzip, deflate, br", 216 | "accept-language": "en-US,en;q=0.9", 217 | "content-type": "application/x-www-form-urlencoded", 218 | "Dnt": "1", 219 | "origin": "https://www.pokemoncenter.com", 220 | "sec-ch-ua": "\"Not_A Brand\";v=\"8\", \"Chromium\";v=\"120\", \"Google Chrome\";v=\"120\"", 221 | "sec-ch-ua-mobile": "?0", 222 | "sec-ch-ua-platform": "\"Windows\"", 223 | "sec-fetch-dest": "empty", 224 | "sec-fetch-mode": "cors", 225 | "sec-fetch-site": "same-site", 226 | "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" 227 | } 228 | random_data = generate_mouse_movements() 229 | 230 | jsData = { 231 | "log1": False, 232 | "opts": "ajaxListenerPath,endpoint", 233 | "ttst": ttst, 234 | "mp_cx": 568, 235 | "mp_cy": 472, 236 | "mp_tr": True, 237 | "mp_mx": 9, 238 | "mp_my": 5, 239 | "mp_sx": 568, 240 | "mp_sy": 559, 241 | "mm_md": 115, 242 | "ifov": False, 243 | "hc": 16, 244 | "br_oh": 1032, 245 | "br_ow": 1920, 246 | "ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36", 247 | "wbd": False, 248 | "dp0": True, 249 | "tagpu": tagpu, 250 | "wdif": False, 251 | "wdifrm": False, 252 | "npmtm": False, 253 | "br_h": 1050, 254 | "br_w": 1400, 255 | "nddc": 1, 256 | "rs_h": 1080, 257 | "rs_w": 1920, 258 | "rs_cd": 24, 259 | "phe": False, 260 | "nm": False, 261 | "jsf": False, 262 | "lg": "en-US", 263 | "pr": 1, 264 | "ars_h": 1032, 265 | "ars_w": 1920, 266 | "tz": 300, 267 | "str_ss": True, 268 | "str_ls": True, 269 | "str_idb": True, 270 | "str_odb": False, 271 | "plgod": False, 272 | "plg": 5, 273 | "plgne": True, 274 | "plgre": True, 275 | "plgof": False, 276 | "plggt": False, 277 | "pltod": False, 278 | "hcovdr": False, 279 | "hcovdr2": False, 280 | "plovdr": False, 281 | "plovdr2": False, 282 | "ftsovdr": False, 283 | "ftsovdr2": False, 284 | "lb": False, 285 | "eva": 33, 286 | "lo": False, 287 | "ts_mtp": 0, 288 | "ts_tec": False, 289 | "ts_tsa": False, 290 | "vnd": "Google Inc.", 291 | "bid": "NA", 292 | "mmt": "application/pdf,text/pdf", 293 | "plu": "PDF Viewer,Chrome PDF Viewer,Chromium PDF Viewer,Microsoft Edge PDF Viewer,WebKit built-in PDF", 294 | "hdn": False, 295 | "awe": False, 296 | "geb": False, 297 | "dat": False, 298 | "med": "defined", 299 | "aco": "probably", 300 | "acots": False, 301 | "acmp": "probably", 302 | "acmpts": True, 303 | "acw": "probably", 304 | "acwts": False, 305 | "acma": "maybe", 306 | "acmats": False, 307 | "acaa": "probably", 308 | "acaats": True, 309 | "ac3": "", 310 | "ac3ts": False, 311 | "acf": "probably", 312 | "acfts": False, 313 | "acmp4": "maybe", 314 | "acmp4ts": False, 315 | "acmp3": "probably", 316 | "acmp3ts": False, 317 | "acwm": "maybe", 318 | "acwmts": False, 319 | "ocpt": False, 320 | "vco": "", 321 | "vcots": False, 322 | "vch": "probably", 323 | "vchts": True, 324 | "vcw": "probably", 325 | "vcwts": True, 326 | "vc3": "maybe", 327 | "vc3ts": False, 328 | "vcmp": "", 329 | "vcmpts": False, 330 | "vcq": "", 331 | "vcqts": False, 332 | "vc1": "probably", 333 | "vc1ts": True, 334 | "dvm": 8, 335 | "sqt": False, 336 | "so": "landscape-primary", 337 | "wdw": True, 338 | "cokys": "bG9hZFRpbWVzY3NpYXBwL=", 339 | "ecpc": False, 340 | "lgs": True, 341 | "lgsod": False, 342 | "psn": True, 343 | "edp": True, 344 | "addt": True, 345 | "wsdc": True, 346 | "ccsr": True, 347 | "nuad": True, 348 | "bcda": False, 349 | "idn": True, 350 | "capi": False, 351 | "svde": False, 352 | "vpbq": True, 353 | "ucdv": False, 354 | "spwn": False, 355 | "emt": False, 356 | "bfr": False, 357 | "dbov": False, 358 | "cfpfe": "ZnVuY3Rpb24oKXt2YXIgdD1kb2N1bWVudFsnXHg3MVx4NzVceDY1XHg3Mlx4NzlceDUzXHg2NVx4NmNceDY1XHg2M1x4NzRceDZmXHg3MiddKCdceDYyXHg3Mlx4NmZceDc3XHg3M1x4NjVceDcyXHg2Nlx4NmNceDZmXHg3N1x4MmRceDYzXHg2Zlx4NmVceDc0XHg2", 359 | "stcfp": "Oi8vZGQucG9rZW1vbmNlbnRlci5jb20vdGFncy5qczoyOjg3NDk3KQogICAgYXQgaHR0cHM6Ly9kZC5wb2tlbW9uY2VudGVyLmNvbS90YWdzLmpzOjI6NTE1MzUKICAgIGF0IG5yV3JhcHBlciAoaHR0cHM6Ly93d3cucG9rZW1vbmNlbnRlci5jb20vOjI6MTg2NTQp", 360 | "ckwa": True, 361 | "prm": True, 362 | "tzp": "America/New_York", 363 | "cvs": True, 364 | "usb": "defined", 365 | "glvd": "Google Inc. (Intel)", 366 | "glrd": "ANGLE (Intel, Intel(R) Arc(TM) A770 Graphics (0x000056A0) Direct3D11 vs_5_0 ps_5_0, D3D11)", 367 | "wwl": False, 368 | "jset": int(time.mktime(datetime.datetime.now().timetuple())), 369 | "dcok": ".pokemoncenter.com", 370 | "log2": True, 371 | "es_sigmdn": 0.06111527681106614, 372 | "es_mumdn": 8.06412297519166, 373 | "es_distmdn": 270.06650801107634, 374 | "es_angsmdn": 2.427143017494427, 375 | "es_angemdn": 2.787279517525958, 376 | "m_s_c": 0, 377 | "m_m_c": 607, 378 | "m_c_c": 0, 379 | "m_cm_r": 0, 380 | "m_ms_r": -1 381 | } 382 | jsData.update({ 383 | "mp_cx": random_data["mp_cx"], 384 | "mp_cy": random_data["mp_cy"], 385 | "mp_tr": random_data.get("mp_tr", True), 386 | "mp_mx": random_data.get("mp_mx", 0), 387 | "mp_my": random_data.get("mp_my", 0), 388 | "mp_sx": random_data.get("mp_sx", 0), 389 | "mp_sy": random_data.get("mp_sy", 0), 390 | "mm_md": random_data["mm_md"], 391 | "es_sigmdn": random_data["es_sigmdn"], 392 | "es_mumdn": random_data["es_mumdn"], 393 | "es_distmdn": random_data["es_distmdn"], 394 | "es_angsmdn": random_data["es_angsmdn"], 395 | "es_angemdn": random_data["es_angemdn"], 396 | "m_s_c": random_data["m_s_c"], 397 | "m_m_c": random_data["m_m_c"], 398 | "m_c_c": random_data["m_c_c"], 399 | "m_cm_r": random_data["m_cm_r"], 400 | "m_ms_r": random_data["m_ms_r"] 401 | }) 402 | event_counters = { 403 | "mousemove": random_data["m_m_c"], 404 | "click": random_data["m_c_c"], 405 | "scroll": random_data["m_s_c"], 406 | "touchstart": 0, 407 | "touchend": 0, 408 | "touchmove": 0, 409 | "keydown": 0, 410 | "keyup": 0 411 | } 412 | data = { 413 | 'jsData': json.dumps(jsData), 414 | 'eventCounters': json.dumps(event_counters), 415 | 'jsType': 'le', 416 | 'cid': None, 417 | 'ddk': '5B45875B653A484CC79E57036CE9FC', 418 | 'Referer': 'https%3A%2F%2Fwww.pokemoncenter.com%2F', 419 | 'request': '%2F', 420 | 'responsePage': 'origin', 421 | 'ddv': '4.19.2' 422 | } 423 | datadome_cookie_value = next((c.value for c in session.cookies if c.name.lower() == 'datadome'), None) 424 | 425 | if datadome_cookie_value: 426 | data['cid'] = datadome_cookie_value 427 | else: 428 | print("Datadome cookie not found in the session.") 429 | 430 | form_data = urllib.parse.urlencode(data) 431 | response = await session.post(url, headers=headers, json=form_data, proxy=proxy) 432 | print(response.text) 433 | try: 434 | cookie_string = response.text.split('"cookie":"')[1].split('";')[0] 435 | cookie_parts = cookie_string.split('; ') 436 | for part in cookie_parts: 437 | if '=' in part: 438 | name, value = part.split('=', 1) 439 | name = name.strip() 440 | if name.lower() == 'datadome': 441 | if 'datadome' in session.cookies: 442 | del session.cookies['datadome'] 443 | 444 | session.cookies.set(name, value, domain='.pokemoncenter.com', path='/') 445 | print(f"datadome cookie updated/set for le: {name}={value}") 446 | break 447 | 448 | except Exception as e: 449 | print(f"Error parsing for cookie: {e}") 450 | 451 | print("Cookies after attempting to set le cookie:", session.cookies) 452 | return session 453 | 454 | --------------------------------------------------------------------------------