| 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 | |