BrowserForge

repository·main·Indexed 22 days ago

https://github.com/daijro/browserforge

An intelligent browser header and fingerprint generator designed to mimic real-world web traffic patterns to avoid detection. It provides tools like HeaderGenerator for realistic HTTP headers and FingerprintGenerator for comprehensive browser fingerprints including screen dimensions, navigator properties, and device characteristics. The library includes injectors for Playwright, Pyppeteer, and undetected-playwright-python, and utilizes a BayesianNetwork for probabilistic sampling of consistent browser fingerprints.

Tokens
4.4K
Snippets
15
Records
23
Agent score
79%

What's inside browserforge

  1. Understand the Fingerprint object structure

    main

    The Fingerprint object returned by .generate() is a comprehensive data structure containing:

    • screen: A ScreenFingerprint object containing dimensions (width, height, availWidth, etc.), devicePixelRatio, and hasHDR.
    • navigator: A NavigatorFingerprint object containing userAgent, userAgentData (architecture, brands, platform, etc.), language, webdriver status, and extraProperties.
    • headers: A dictionary of ordered HTTP headers (e.g., Accept, User-Agent, sec-ch-ua).
    • videoCodecs / audioCodecs: Dictionaries indicating supported media formats (e.g., {'h264': 'probably'}).
    • pluginsData: Information about installed browser plugins and MIME types.
    • battery: Battery status including charging and level.
    • videoCard: A VideoCard object with renderer and vendor details.
    • multimediaDevices: Details about micros, speakers, and webcams.
    • fonts: A list of available system fonts.
  2. Note on deprecated download functions

    main

    As of version 1.2.4, the functions Download, DownloadIfNotExists, IsDownloaded, and Remove are deprecated.

    BrowserForge model files (headers and fingerprints) are now bundled directly within their own Python package dependency. You no longer need to manually manage the downloading, verification, or removal of these model files via these functions.

  3. Constrain fingerprints by screen dimensions

    main

    You can restrict the generated fingerprints to specific screen size ranges using the Screen class. This is useful for simulating specific device types or viewport sizes.

    from browserforge.fingerprints import Screen, FingerprintGenerator
    
    screen = Screen(
        min_width=100,
        max_width=1280,
        min_height=400,
        max_height=720,
    )
    
    fingerprints = FingerprintGenerator(screen=screen)

    Note: You do not need to define all bounds; you can specify only the ones you want to constrain.

  4. Use generated headers with requests

    main

    To use generated headers in a requests session, assign the dictionary returned by headers.generate() to the session.headers attribute.

    import requests
    from browserforge.headers import HeaderGenerator
    
    headers = HeaderGenerator()
    session = requests.Session()
    session.headers = headers.generate()
  5. Constrain fingerprints by browser and OS

    main

    Since FingerprintGenerator inherits parameters from HeaderGenerator, you can pass browser and operating system constraints directly to the .generate() method.

    # Example: Generate a fingerprint specifically for Chrome on Windows
    fingerprint = FingerprintGenerator().generate(browser='chrome', os='windows')
    fingerprint = FingerprintGenerator().generate(browser='chrome', os='windows')
  6. Inject fingerprints into Playwright (Sync API)

    main

    To inject fingerprints into an existing Playwright synchronous workflow, replace browser.new_context() with NewContext from browserforge.injectors.playwright. This creates a new sync context with the specified fingerprint applied.

    Note: Fingerprint injection in BrowserForge is deprecated. It is recommended to use Camoufox instead.

    # Import the NewContext injector
    from browserforge.injectors.playwright import NewContext
    
    def main():
        with sync_playwright() as playwright:
            browser = playwright.chromium.launch()
            # Create a new context with the injected fingerprint
            context = NewContext(browser, fingerprint=fingerprint)
            page = context.new_page()
            ...
  7. Generate browser headers with HeaderGenerator

    main

    Use HeaderGenerator to create realistic browser headers that mimic actual web traffic. You can generate headers with default settings or apply constraints to specific browsers, operating systems, devices, locales, and HTTP versions.

    from browserforge.headers import HeaderGenerator
    headers = HeaderGenerator()
    headers_dict = headers.generate()
  8. Inject fingerprints into Pyppeteer

    main

    To inject fingerprints into Pyppeteer, replace browser.newPage() with NewPage from browserforge.injectors.pyppeteer. This creates a new page with the fingerprint applied directly to the browser object.

    Note: Fingerprint injection in BrowserForge is deprecated. It is recommended to use Camoufox instead.

    # Import the NewPage injector
    from browserforge.injectors.pyppeteer import NewPage
    from pyppeteer import launch
    
    async def test():
        browser = await launch()
        # Create a new page with the injected fingerprint
        page = await NewPage(browser, fingerprint=fingerprint)
        ...
  9. Define specific Browser specifications

    main

    For fine-grained control, use the Browser class to specify version ranges and HTTP versions for specific browsers.

    from browserforge.headers import HeaderGenerator, Browser
    
    browsers = [
        Browser(name='chrome', min_version=140, max_version=145),
        Browser(name='firefox', min_version=144),
        Browser(name='edge', max_version=140, http_version=1),
    ]
    headers = HeaderGenerator(browser=browsers)
  10. Generate browser fingerprints with FingerprintGenerator

    main

    Use the FingerprintGenerator class to create realistic browser fingerprints. A fingerprint includes a set of matching ordered headers, navigator properties, screen dimensions, and other device characteristics to help evade detection.

    To use it, initialize the generator and call .generate().

    from browserforge.fingerprints import FingerprintGenerator
    fingerprints = FingerprintGenerator()
    fingerprints.generate()
  11. Inject fingerprints into Playwright (Async API)

    main

    To inject fingerprints into an existing Playwright async workflow, replace await browser.new_context() with AsyncNewContext from browserforge.injectors.playwright. This creates a new async context with the specified fingerprint applied.

    Note: Fingerprint injection in BrowserForge is deprecated. It is recommended to use Camoufox instead.

    # Import the AsyncNewContext injector
    from browserforge.injectors.playwright import AsyncNewContext
    
    async def main():
        async with async_playwright() as playwright:
            browser = await playwright.chromium.launch()
            # Create a new async context with the injected fingerprint
            context = await AsyncNewContext(browser, fingerprint=fingerprint)
            page = await context.new_page()
            ...