How to Switch Between Chromium, Firefox, and WebKit Browsers in Crawl4AI
Set the browser_type parameter in BrowserConfig to "chromium", "firefox", or "webkit" to instantly switch between Playwright engines without changing your crawling logic.
Crawl4AI provides seamless multi-browser support through a unified configuration interface. Whether you need to test cross-browser compatibility, bypass anti-bot measures, or leverage engine-specific rendering, you can switch between Chromium, Firefox, and WebKit browsers in Crawl4AI using a single configuration field. The library abstracts Playwright's browser management through the BrowserConfig dataclass in crawl4ai/async_configs.py and the BrowserManager orchestrator in crawl4ai/browser_manager.py.
Understanding the Browser Configuration Architecture
The BrowserConfig Dataclass
In crawl4ai/async_configs.py, the BrowserConfig dataclass defines the browser_type field that controls engine selection. According to the source code at lines 62-65, this parameter accepts three string values: "chromium", "firefox", or "webkit". This configuration object centralizes all launch parameters—including headless mode, viewport dimensions, proxy settings, and user-agent strings—ensuring that switching browsers requires modifying only one property.
The BrowserManager Orchestrator
The BrowserManager class in crawl4ai/browser_manager.py handles the actual browser instantiation. When BrowserManager.start() executes, it reads the browser_type value from the provided configuration and calls the corresponding Playwright launch method at lines 710-716. The implementation uses conditional logic to invoke playwright.chromium.launch(), playwright.firefox.launch(), or playwright.webkit.launch() based on your configuration, making the browser selection completely transparent to the crawling logic.
Methods to Switch Browsers in Crawl4AI
Python SDK Configuration
Instantiate BrowserConfig with your desired browser_type and pass it to AsyncWebCrawler. This approach provides programmatic control and allows dynamic browser selection at runtime.
from crawl4ai import AsyncWebCrawler, BrowserConfig, CrawlerRunConfig
# Configure Firefox browser
browser_cfg = BrowserConfig(
browser_type="firefox", # ← Switch engine here
headless=False,
viewport_width=1280,
viewport_height=800,
)
crawler_cfg = CrawlerRunConfig(url="https://example.com")
async with AsyncWebCrawler(config=browser_cfg) as crawler:
result = await crawler.arun(config=crawler_cfg)
print(result.markdown)
To switch to WebKit, simply change the browser_type value:
browser_cfg = BrowserConfig(
browser_type="webkit", # ← Use WebKit engine
headless=True
)
CLI Configuration with YAML Files
Create a configuration file specifying the browser type and load it using the -B (or --browser-config) flag. This method is ideal for reproducible crawls and CI/CD pipelines.
Create browser.yml:
browser_type: firefox # Options: chromium | firefox | webkit
headless: true
viewport_width: 1080
viewport_height: 720
Execute the crawl:
crwl https://example.com -B browser.yml
CLI Inline Overrides
For rapid testing without creating configuration files, use the -b flag with comma-separated key-value pairs. The CLI parser converts these directly into BrowserConfig parameters.
Switch to WebKit with specific options:
crwl https://example.com -b "browser_type=webkit,headless=false"
Or use Firefox in headless mode:
crwl https://example.com -b "browser_type=firefox,headless=true"
Key Source Files and Implementation Details
The browser switching mechanism relies on these core files:
-
crawl4ai/async_configs.py(Line 354+): Defines theBrowserConfigdataclass that storesbrowser_typeand all other launch options. Thebrowser_typefield validation appears at lines 62-65. -
crawl4ai/browser_manager.py(Lines 710-716): Contains theBrowserManager.start()method that reads the configuration and launches the appropriate Playwright browser instance. -
crawl4ai/cli.py: Parses the-b/--browser-configarguments and constructsBrowserConfigobjects from YAML, JSON, or inline key-value strings. -
crawl4ai/__init__.py: Re-exportsBrowserConfigfor public API access (from crawl4ai import BrowserConfig).
Because the same BrowserConfig object is used across the Python SDK and CLI interfaces, changing the browser_type parameter affects all subsequent crawls while preserving other settings like proxy configurations and viewport sizes.
Summary
-
Single Parameter Control: The
browser_typefield inBrowserConfigaccepts"chromium","firefox", or"webkit"to select your Playwright engine. -
Universal Application: Browser configuration works identically in both the Python SDK (
BrowserConfiginstantiation) and the CLI (-bor-Bflags). -
Zero Logic Changes: Switching browsers requires no modifications to crawling code; the
BrowserManagerhandles all engine-specific instantiation internally. -
Cross-Platform Support: All three browser engines inherit the same configuration options for headless mode, viewport sizing, and network settings.
Frequently Asked Questions
What values does the browser_type parameter accept?
The browser_type parameter accepts three string values: "chromium", "firefox", and "webkit". These correspond to the three browser engines supported by Playwright. According to the source code in crawl4ai/async_configs.py at lines 62-65, any other value will result in a validation error when the configuration is processed.
Do I need to install separate browsers to use Firefox or WebKit?
Playwright automatically manages browser binaries. When you specify browser_type="firefox" or browser_type="webkit", Playwright downloads and caches the required browser binaries on first use. You do not need to manually install Firefox or WebKit on your system; Crawl4AI handles the dependencies through Playwright's built-in browser management.
Can I switch browsers between different crawls in the same Python script?
Yes. Because BrowserConfig is passed to each AsyncWebCrawler instance, you can create multiple crawler instances with different browser_type values in the same script. Each crawler maintains its own browser context, allowing you to run Chromium, Firefox, and WebKit crawls simultaneously or sequentially without conflicts.
Does changing the browser affect the markdown output format?
No. The markdown extraction and content processing logic remains identical across all browser engines. Changing from Chromium to Firefox or WebKit affects only the rendering engine and JavaScript execution environment. The final markdown structure, link extraction, and metadata parsing remain consistent regardless of which browser type you configure in BrowserConfig.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →