Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message
Browser Kit

Browser Kit Laravel Package

symfony/browser-kit

Symfony BrowserKit simulates a web browser in PHP for testing and automation. Make requests, follow links, and submit forms programmatically, with a built-in implementation that uses Symfony HttpClient to perform real HTTP requests.

View on GitHub
Deep Wiki
Context7

Simulates the behavior of a web browser, allowing you to make requests, click on links and submit forms programmatically

Frequently asked questions about Browser Kit
Can Symfony BrowserKit replace Laravel Dusk for browser testing in Laravel?
No, BrowserKit doesn’t execute JavaScript, so it’s not a direct replacement for Dusk. Use BrowserKit for server-side testing (e.g., form submissions, link clicks) and pair it with Symfony Panther or Laravel Dusk for JavaScript-heavy workflows. For pure API or non-JS interactions, BrowserKit is a lightweight alternative.
How do I install Symfony BrowserKit in a Laravel project?
Run `composer require symfony/browser-kit` to install the core package. For HTML parsing, add `symfony/dom-crawler` and `symfony/css-selector` as optional dependencies. Laravel’s Composer autoloader will handle the rest—no additional configuration is needed unless you’re extending the client.
Does BrowserKit support Laravel’s testing utilities like RefreshDatabase or MigrateFresh?
Yes, BrowserKit integrates with Laravel’s testing tools. Use it alongside `RefreshDatabase` or `MigrateFresh` by instantiating a `BrowserKitTestCase` or extending Laravel’s `TestCase` class. The component works with Laravel’s database testing helpers out of the box.
Can I use BrowserKit for web scraping in Laravel, and how does it handle cookies/sessions?
BrowserKit is capable of scraping, but cookie/session management requires manual handling. For simple auth flows, use Laravel’s `actingAs()` helper. For complex scenarios (e.g., CSRF tokens), store cookies in the `Client` instance or use Laravel’s session middleware. Avoid relying on `unserialize` for session data due to security risks.
What Laravel versions does Symfony BrowserKit support, and are there breaking changes?
BrowserKit is framework-agnostic but works with Laravel 8.x–11.x due to its Symfony component dependencies (v6.x–v8.x). No Laravel-specific breaking changes exist, but Symfony’s HttpClient (used internally) may introduce minor API tweaks. Always check the [Symfony BrowserKit changelog](https://github.com/symfony/symfony/blob/master/CHANGELOG.md) for updates.
How do I mock BrowserKit’s HttpClient for unit testing in Laravel?
BrowserKit provides a `ClientInterface` contract for mocking. Use Laravel’s `Mockery` or PHPUnit’s `createMock()` to stub the client. For example, inject a mock into your service and assert interactions with `->shouldReceive('request')->once()`. This is ideal for isolating logic from external HTTP calls.
Is BrowserKit safe for production scraping at scale (e.g., 10K+ requests/day)?
BrowserKit isn’t optimized for high-scale scraping—expect performance overhead due to PHP’s process limits. For production, throttle requests using Laravel Queues or a dedicated microservice. Pair with Symfony’s `CurlHttpClient` for better performance, but monitor memory usage and consider rate-limiting APIs.
Does BrowserKit support JavaScript rendering or SPAs (e.g., React, Vue)?
No, BrowserKit doesn’t execute JavaScript. For SPAs, use Symfony Panther (headless Chrome) or Laravel Dusk. BrowserKit is designed for server-side interactions like form submissions, link clicks, and static HTML parsing. If you need JS, integrate Panther via `composer require symfony/panther`.
How can I debug failed requests or interactions in BrowserKit within Laravel?
Use Laravel Telescope to log BrowserKit interactions by extending the `Client` or wrapping requests in a middleware. Enable Telescope’s request logging to inspect headers, payloads, and responses. For debugging, also check Symfony’s `HttpClient` logs or use `dd($client->getResponse())` to inspect raw responses.
Are there alternatives to BrowserKit for Laravel that offer better JavaScript support?
For JavaScript-heavy testing, consider Laravel Dusk (official) or Symfony Panther (headless Chrome). For lightweight scraping without JS, BrowserKit is superior due to its simplicity. If you need a balance, use BrowserKit for static content and Panther/Dusk for dynamic interactions. Guzzle + custom logic is another option for API-focused scraping.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
calmfox/watch-sylius
damienfern/grpc-symfony-bundle
atoolo/index-bundle
atoolo/genai-bundle
coprotoai/laravel-ticket
davidjln/llm-carbon-bundle
cryonighter/valid-request-bundle
coolms/taxonomy-bundle
coolms/field-bundle
articulate-orm/symfony
aaix/laravel-tall-architect
ephoto/akeneo-connector
emmanuelballery/eb-plantumlbundle
emielburgman/symfony-visitor-beacon
emielburgman/symfony-visit-storage
emielburgman/symfony-security-headers
emielburgman/symfony-log-viewer
emarref/xdebug-bundle
emarref/pubnub-bundle
elriseio/finance-money-bundle