File size: 7,699 Bytes
38a5f07
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
#!/usr/bin/env python3
"""

Browser Configurations

Browser configuration with User-Agent and Sec-CH-UA data for TLS fingerprinting

"""

import random
from typing import Dict, List, Tuple, Optional


class BrowserConfig:
    """Class for working with browser configurations"""
    
    SEC_CH_UA_CONFIGS = {
        "chrome": {
            "139": "\"Not;A=Brand\";v=\"99\", \"Google Chrome\";v=\"139\", \"Chromium\";v=\"139\"",
            "138": "\"Not)A;Brand\";v=\"8\", \"Chromium\";v=\"138\", \"Google Chrome\";v=\"138\"",
            "137": "\"Google Chrome\";v=\"137\", \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\"",
            "136": "\"Chromium\";v=\"136\", \"Google Chrome\";v=\"136\", \"Not.A/Brand\";v=\"99\""
        },
        "edge": {
            "139": "\"Not;A=Brand\";v=\"99\", \"Microsoft Edge\";v=\"139\", \"Chromium\";v=\"139\"",
            "138": "\"Not)A;Brand\";v=\"8\", \"Chromium\";v=\"138\", \"Microsoft Edge\";v=\"138\"",
            "137": "\"Microsoft Edge\";v=\"137\", \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\""
        },
        "avast": {
            "138": "\"Not)A;Brand\";v=\"8\", \"Chromium\";v=\"138\", \"Avast Secure Browser\";v=\"138\"",
            "137": "\"Avast Secure Browser\";v=\"137\", \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\""
        },
        "brave": {
            "139": "\"Not;A=Brand\";v=\"99\", \"Brave\";v=\"139\", \"Chromium\";v=\"139\"",
            "138": "\"Not)A;Brand\";v=\"8\", \"Chromium\";v=\"138\", \"Brave\";v=\"138\"",
            "137": "\"Brave\";v=\"137\", \"Chromium\";v=\"137\", \"Not/A)Brand\";v=\"24\""
        }
    }
    
    USER_AGENT_CONFIGS = {
        "chrome": {
            "139": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36",
            "138": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36",
            "137": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36",
            "136": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36"
        },
        "edge": {
            "139": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36 Edg/139.0.0.0",
            "138": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36 Edg/138.0.0.0",
            "137": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36 Edg/137.0.0.0"
        },
        "avast": {
            "138": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36 Avast/138.0.0.0",
            "137": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36 Avast/137.0.0.0"
        },
        "brave": {
            "139": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36",
            "138": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36",
            "137": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36"
        }
    }
    
    
    def __init__(self):
        self.available_browsers = list(self.USER_AGENT_CONFIGS.keys())
    
    def get_random_browser_config(self, browser_type=None) -> Tuple[str, str, str, str]:
        """

        Get random browser configuration

        

        Args:

            browser_type: Browser type for filtering (chrome, chromium, camoufox)

            

        Returns:

            Tuple[str, str, str, str]: (browser_name, version, user_agent, sec_ch_ua)

        """
        if browser_type in ['chrome', 'chromium', 'msedge', 'avast']:
            chromium_browsers = ['chrome', 'edge', 'avast', 'brave']
            browser = random.choice(chromium_browsers)
        elif browser_type == 'camoufox':
            return 'firefox', 'custom', '', ''
        else:
            browser = random.choice(self.available_browsers)
            
        versions = list(self.USER_AGENT_CONFIGS[browser].keys())
        version = random.choice(versions)
        
        user_agent = self.USER_AGENT_CONFIGS[browser][version]
        
        if version in self.SEC_CH_UA_CONFIGS.get(browser, {}):
            sec_ch_ua = self.SEC_CH_UA_CONFIGS[browser][version]
        else:
            sec_ch_ua = ""
            
        return browser, version, user_agent, sec_ch_ua
    
    def get_browser_config(self, browser: str, version: str) -> Optional[Tuple[str, str]]:

        try:
            user_agent = self.USER_AGENT_CONFIGS[browser][version]
            
            if version in self.SEC_CH_UA_CONFIGS.get(browser, {}):
                sec_ch_ua = self.SEC_CH_UA_CONFIGS[browser][version]
            else:
                sec_ch_ua = ""
                
            return user_agent, sec_ch_ua
        except KeyError:
            return None
    
    def get_all_configs(self) -> List[Tuple[str, str, str, str]]:

        configs = []
        for browser in self.available_browsers:
            for version in self.USER_AGENT_CONFIGS[browser].keys():
                user_agent = self.USER_AGENT_CONFIGS[browser][version]
                
                if version in self.SEC_CH_UA_CONFIGS.get(browser, {}):
                    sec_ch_ua = self.SEC_CH_UA_CONFIGS[browser][version]
                else:
                    sec_ch_ua = ""
                    
                configs.append((browser, version, user_agent, sec_ch_ua))
        
        return configs
    
    def get_browser_versions(self, browser: str) -> List[str]:

        return list(self.USER_AGENT_CONFIGS.get(browser, {}).keys())
    
    def get_available_browsers(self) -> List[str]:

        return self.available_browsers.copy()
    
    def print_all_configs(self):
        """Print all available configurations to console"""
        print("=== AVAILABLE BROWSER CONFIGURATIONS ===\n")
        
        for browser in self.available_browsers:
            print(f"🌐 {browser.upper()}:")
            for version in self.USER_AGENT_CONFIGS[browser].keys():
                user_agent = self.USER_AGENT_CONFIGS[browser][version]
                
                if version in self.SEC_CH_UA_CONFIGS.get(browser, {}):
                    sec_ch_ua = self.SEC_CH_UA_CONFIGS[browser][version]
                else:
                    sec_ch_ua = "NOT SUPPORTED"
                    
                print(f"  πŸ“± Version {version}:")
                print(f"    User-Agent: {user_agent}")
                print(f"    Sec-CH-UA: {sec_ch_ua}")
                print()
            print("-" * 50)


browser_config = BrowserConfig()


if __name__ == '__main__':
    config = BrowserConfig()
    
    print("🎯 Random configuration:")
    browser, version, ua, sec_ua = config.get_random_browser_config()
    print(f"Browser: {browser} {version}")
    print(f"User-Agent: {ua}")
    print(f"Sec-CH-UA: {sec_ua}")
    print()
    
    print("πŸ“‹ All available browsers:")
    for browser in config.get_available_browsers():
        versions = config.get_browser_versions(browser)
        print(f"  {browser}: {', '.join(versions)}")
    print()
    
    config.print_all_configs()