| 142 | |
| 143 | |
| 144 | def generate_random_user_agent(device_type='android', browser_type='chrome'): |
| 145 | firefox_versions = list(range(100, 127)) # Last 10 versions of Firefox |
| 146 | |
| 147 | browser_version = random.choice(firefox_versions) |
| 148 | |
| 149 | if browser_type == 'chrome': |
| 150 | major_version = random.choice(list(existing_versions.keys())) |
| 151 | browser_version = random.choice(existing_versions[major_version]) |
| 152 | |
| 153 | |
| 154 | if device_type == 'android': |
| 155 | android_versions = ['7.0', '7.1', '8.0', '8.1', '9.0', '10.0', '11.0', '12.0', '13.0', '14.0', '15.0'] |
| 156 | android_device = random.choice([ |
| 157 | 'SM-G960F', 'SM-G973F', 'SM-G980F', 'SM-G960U', 'SM-G973U', 'SM-G980U', |
| 158 | 'SM-A505F', 'SM-A515F', 'SM-A525F', 'SM-N975F', 'SM-N986B', 'SM-N981B', |
| 159 | 'SM-F711B', 'SM-F916B', 'SM-G781B', 'SM-G998B', 'SM-G991B', 'SM-G996B', |
| 160 | 'SM-G990E', 'SM-G990B2', 'SM-G990U', 'SM-G990B', 'SM-G990', 'SM-G990', |
| 161 | 'Pixel 2', 'Pixel 2 XL', 'Pixel 3', 'Pixel 3 XL', 'Pixel 4', 'Pixel 4 XL', |
| 162 | 'Pixel 4a', 'Pixel 5', 'Pixel 5a', 'Pixel 6', 'Pixel 6 Pro', 'Pixel 6 XL', |
| 163 | 'Pixel 6a', 'Pixel 7', 'Pixel 7 Pro', 'IN2010', 'IN2023', |
| 164 | 'LE2117', 'LE2123', 'OnePlus Nord', 'IV2201', 'NE2215', 'CPH2423', |
| 165 | 'NE2210', 'Mi 9', 'Mi 10', 'Mi 11', 'Mi 12', 'Redmi Note 8', |
| 166 | 'Redmi Note 8 Pro', 'Redmi Note 9', 'Redmi Note 9 Pro', 'Redmi Note 10', |
| 167 | 'Redmi Note 10 Pro', 'Redmi Note 11', 'Redmi Note 11 Pro', 'Redmi Note 12', |
| 168 | 'Redmi Note 12 Pro', 'VOG-AL00', 'ANA-AL00', 'TAS-AL00', |
| 169 | 'OCE-AN10', 'J9150', 'J9210', 'LM-G820', 'L-51A', 'Nokia 8.3', |
| 170 | 'Nokia 9 PureView', 'POCO F5', 'POCO F5 Pro', 'POCO M3', 'POCO M3 Pro' |
| 171 | ]) |
| 172 | android_version = random.choice(android_versions) |
| 173 | if browser_type == 'chrome': |
| 174 | return (f"Mozilla/5.0 (Linux; Android {android_version}; {android_device}) AppleWebKit/537.36 " |
| 175 | f"(KHTML, like Gecko) Chrome/{browser_version} Mobile Safari/537.36") |
| 176 | elif browser_type == 'firefox': |
| 177 | return (f"Mozilla/5.0 (Android {android_version}; Mobile; rv:{browser_version}.0) " |
| 178 | f"Gecko/{browser_version}.0 Firefox/{browser_version}.0") |
| 179 | |
| 180 | elif device_type == 'ios': |
| 181 | ios_versions = ['13.0', '14.0', '15.0', '16.0', '17.0', '18.0'] |
| 182 | ios_version = random.choice(ios_versions) |
| 183 | if browser_type == 'chrome': |
| 184 | return (f"Mozilla/5.0 (iPhone; CPU iPhone OS {ios_version.replace('.', '_')} like Mac OS X) " |
| 185 | f"AppleWebKit/537.36 (KHTML, like Gecko) CriOS/{browser_version} Mobile/15E148 Safari/604.1") |
| 186 | elif browser_type == 'firefox': |
| 187 | return (f"Mozilla/5.0 (iPhone; CPU iPhone OS {ios_version.replace('.', '_')} like Mac OS X) " |
| 188 | f"AppleWebKit/605.1.15 (KHTML, like Gecko) FxiOS/{browser_version}.0 Mobile/15E148 Safari/605.1.15") |
| 189 | |
| 190 | elif device_type == 'windows': |
| 191 | windows_versions = ['10.0', '11.0'] |
| 192 | windows_version = random.choice(windows_versions) |
| 193 | if browser_type == 'chrome': |
| 194 | return (f"Mozilla/5.0 (Windows NT {windows_version}; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) " |
| 195 | f"Chrome/{browser_version} Safari/537.36") |
| 196 | elif browser_type == 'firefox': |
| 197 | return (f"Mozilla/5.0 (Windows NT {windows_version}; Win64; x64; rv:{browser_version}.0) " |
| 198 | f"Gecko/{browser_version}.0 Firefox/{browser_version}.0") |
| 199 | |
| 200 | elif device_type == 'ubuntu': |
| 201 | if browser_type == 'chrome': |