Profiles
Profiles describe browser-visible settings such as viewport, locale, timezone, language headers, and device characteristics.
Built-in profiles
from webskrap import get_profile, list_profiles
for profile in list_profiles():
print(profile.name)
profile = get_profile("desktop-chrome")Built-in profile names:
desktop-chromedesktop-edgemobile-chrome
get_profile() returns a copy, so you can adjust it without mutating the
bundled profile:
profile = get_profile("desktop-chrome")
profile.locale = "fr-FR"
profile.navigator_languages = ["fr-FR", "fr", "en-US", "en"]Custom profile
from webskrap import BrowserProfile, Viewport
profile = BrowserProfile(
name="fr-desktop",
viewport=Viewport(width=1440, height=900),
screen=Viewport(width=1440, height=900),
locale="fr-FR",
timezone_id="Europe/Paris",
navigator_languages=["fr-FR", "fr", "en-US", "en"],
)Pass it to a session:
session = await client.session("fr", profile=profile)Or use it for a one-shot fetch:
result = await client.fetch("https://example.com", profile=profile)Language headers
BrowserProfile keeps locale, navigator_languages, and the generated
Accept-Language header coherent. The first language gets full weight and later
languages get descending quality weights:
profile = BrowserProfile(
name="fr",
locale="fr-FR",
navigator_languages=["fr-FR", "fr", "en-US", "en"],
)
print(profile.accept_language())
# fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7Extra headers are merged after WebSkrap's defaults:
profile = BrowserProfile(
name="api-docs",
extra_http_headers={"DNT": "1"},
)Mobile profile
Use the built-in mobile profile when viewport, touch, and mobile user-agent settings should move together:
result = await client.fetch("https://example.com", profile="mobile-chrome")For custom mobile profiles, keep viewport, screen, device_scale_factor,
is_mobile, has_touch, and user_agent coherent.