102 lines
3.9 KiB
Python
102 lines
3.9 KiB
Python
"""
|
||
Тест создания браузера Camoufox с разными параметрами.
|
||
Запуск: python test_browser.py
|
||
"""
|
||
|
||
import asyncio
|
||
import time
|
||
from camoufox.async_api import AsyncCamoufox
|
||
from camoufox import DefaultAddons
|
||
|
||
|
||
PROXY = None # Вставь прокси если нужно: "http://127.0.0.1:PORT"
|
||
|
||
async def try_browser(label: str, **kwargs) -> bool:
|
||
t = time.time()
|
||
try:
|
||
async with AsyncCamoufox(**kwargs) as browser:
|
||
page = await browser.new_page()
|
||
await page.goto("about:blank", timeout=10000)
|
||
await page.close()
|
||
elapsed = time.time() - t
|
||
print(f" ✅ {label} ({elapsed:.1f}s)")
|
||
return True
|
||
except ValueError as e:
|
||
print(f" ❌ {label} — fingerprint error: {e}")
|
||
return False
|
||
except Exception as e:
|
||
print(f" ⚠️ {label} — {type(e).__name__}: {str(e)[:80]}")
|
||
return False
|
||
|
||
|
||
async def main():
|
||
base = dict(headless=True, exclude_addons=[DefaultAddons.UBO])
|
||
proxy_kwargs = {"proxy": {"server": PROXY}} if PROXY else {}
|
||
|
||
print("\n=== Без прокси ===")
|
||
tests_no_proxy = [
|
||
("geoip=False, locale=ru-RU", dict(geoip=False, locale="ru-RU")),
|
||
("geoip=False, locale=en-US", dict(geoip=False, locale="en-US")),
|
||
("geoip=True", dict(geoip=True)),
|
||
("geoip=True, locale=ru-RU", dict(geoip=True, locale="ru-RU")),
|
||
("geoip=True, locale=en-US", dict(geoip=True, locale="en-US")),
|
||
("geoip=True, os=windows", dict(geoip=True, os="windows")),
|
||
]
|
||
for label, kwargs in tests_no_proxy:
|
||
await try_browser(label, **base, **kwargs)
|
||
|
||
if PROXY:
|
||
print(f"\n=== С прокси ({PROXY}) ===")
|
||
tests_proxy = [
|
||
("geoip=True", dict(geoip=True)),
|
||
("geoip=True, locale=ru-RU", dict(geoip=True, locale="ru-RU")),
|
||
("geoip=True, locale=en-US", dict(geoip=True, locale="en-US")),
|
||
("geoip=True, os=windows", dict(geoip=True, os="windows")),
|
||
("geoip=False, locale=ru-RU", dict(geoip=False, locale="ru-RU")),
|
||
("geoip=False, locale=en-US", dict(geoip=False, locale="en-US")),
|
||
]
|
||
for label, kwargs in tests_proxy:
|
||
await try_browser(label, **base, **proxy_kwargs, **kwargs)
|
||
|
||
print("\n=== Fingerprint generation напрямую ===")
|
||
from camoufox.fingerprints import generate_fingerprint
|
||
fp_tests = [
|
||
("без параметров", {}),
|
||
("locale=ru-RU", {"locale": "ru-RU"}),
|
||
("locale=en-US", {"locale": "en-US"}),
|
||
("locale=ru-Cyrl-RU", {"locale": "ru-Cyrl-RU"}),
|
||
("os=windows, locale=ru-RU", {"os": "windows", "locale": "ru-RU"}),
|
||
("os=windows, locale=en-US", {"os": "windows", "locale": "en-US"}),
|
||
]
|
||
for label, kwargs in fp_tests:
|
||
try:
|
||
fp = generate_fingerprint(**kwargs)
|
||
print(f" ✅ generate_fingerprint({label})")
|
||
except ValueError as e:
|
||
print(f" ❌ generate_fingerprint({label}) — {e}")
|
||
|
||
print("\n=== Geoip данные ===")
|
||
from camoufox.utils import get_geolocation
|
||
ips = ["127.0.0.1"]
|
||
if PROXY:
|
||
host = PROXY.replace("http://", "").split(":")[0]
|
||
if host not in ("127.0.0.1", "localhost"):
|
||
ips.append(host)
|
||
import urllib.request
|
||
try:
|
||
ext = urllib.request.urlopen("https://api.ipify.org", timeout=5).read().decode()
|
||
ips.append(ext)
|
||
except Exception:
|
||
pass
|
||
|
||
for ip in ips:
|
||
try:
|
||
geo = get_geolocation(ip)
|
||
print(f" {ip}: lang={geo.locale.language} region={geo.locale.region} script={geo.locale.script} tz={geo.timezone}")
|
||
except Exception as e:
|
||
print(f" {ip}: ошибка — {e}")
|
||
|
||
|
||
if __name__ == "__main__":
|
||
asyncio.run(main())
|