import json import random import uuid import ua_generator from ua_generator.data.version import VersionRange from ua_generator.options import Options import utils.globals as globals from utils import configs def get_fp(req_token): fp = globals.fp_map.get(req_token, {}) if fp and fp.get("user-agent") and fp.get("impersonate"): if "proxy_url" in fp.keys() and (fp["proxy_url"] is None or fp["proxy_url"] not in configs.proxy_url_list): fp["proxy_url"] = random.choice(configs.proxy_url_list) if configs.proxy_url_list else None globals.fp_map[req_token] = fp with open(globals.FP_FILE, "w", encoding="utf-8") as f: json.dump(globals.fp_map, f, indent=4) if globals.impersonate_list and "impersonate" in fp.keys() and fp["impersonate"] not in globals.impersonate_list: fp["impersonate"] = random.choice(globals.impersonate_list) globals.fp_map[req_token] = fp with open(globals.FP_FILE, "w", encoding="utf-8") as f: json.dump(globals.fp_map, f, indent=4) if configs.user_agents_list and "user-agent" in fp.keys() and fp["user-agent"] not in configs.user_agents_list: fp["user-agent"] = random.choice(configs.user_agents_list) globals.fp_map[req_token] = fp with open(globals.FP_FILE, "w", encoding="utf-8") as f: json.dump(globals.fp_map, f, indent=4) fp = {k.lower(): v for k, v in fp.items()} return fp else: options = Options(version_ranges={ 'chrome': VersionRange(min_version=124), 'edge': VersionRange(min_version=124), }) ua = ua_generator.generate( device=configs.device_tuple if configs.device_tuple else ('desktop'), browser=configs.browser_tuple if configs.browser_tuple else ('chrome', 'edge', 'firefox', 'safari'), platform=configs.platform_tuple if configs.platform_tuple else ('windows', 'macos'), options=options ) fp = { "user-agent": ua.text if not configs.user_agents_list else random.choice(configs.user_agents_list), "impersonate": random.choice(globals.impersonate_list), "proxy_url": random.choice(configs.proxy_url_list) if configs.proxy_url_list else None, "oai-device-id": str(uuid.uuid4()) } if ua.device == "desktop" and ua.browser in ("chrome", "edge"): fp["sec-ch-ua-platform"] = ua.ch.platform fp["sec-ch-ua"] = ua.ch.brands fp["sec-ch-ua-mobile"] = ua.ch.mobile if not req_token: return fp else: globals.fp_map[req_token] = fp with open(globals.FP_FILE, "w", encoding="utf-8") as f: json.dump(globals.fp_map, f, indent=4) return fp