Free tools Windows power users keep installed
One-click scans. No signup required.
Configure a browser automation session in layers: install a compatible browser and its dependencies, choose the browser and headed or headless mode, decide whether state should persist, then set network, identity, permissions and timeouts. In Playwright, shared test settings usually go in the test configuration’s use object, with launch and context options applied to the browser session. In Selenium 4, use the browser’s Options class and pass it to WebDriver; capabilities describe the session the driver should create.
The examples below cover both frameworks. Choose Playwright when its BrowserContext and test-runner configuration fit your work; choose Selenium when you need its WebDriver session model or the browser and driver support available in your environment. Browser channels, defaults and option names can change, so check the official documentation for the version you install.
1. Install the browser before configuring a session
A framework package alone does not guarantee that a usable browser binary and all required system libraries are available. Install the browser that matches the framework and target environment before trying to launch a session.
Playwright
Install Playwright’s browser binaries with:
npx playwright install
For a clean Linux or CI image, install Chromium and its browser dependencies together:
Do these 3 things before closing this tab:
1Fix the driver behind crashes, sound loss and screen glitches2Clear out junk files and repair common Windows errors3Scan for outdated or missing drivers - takes under a minute#1 Best Overall
npx playwright install --with-deps chromium
Playwright supports Chromium, Firefox and WebKit, as well as branded Chrome and Edge channels. If browser downloads must pass through a firewall, set HTTPS_PROXY for the installation command. For example, in a POSIX shell:
HTTPS_PROXY=http://proxy.example:3128 npx playwright install chromium
Playwright’s default headless path uses a separate Chromium headless shell unless you select a browser channel. If you are comparing behavior with a branded Chrome or Edge installation, explicitly select its channel rather than assuming the default headless browser is the same executable.
Selenium
Selenium’s session is created through a driver for the requested browser. Use the browser-specific Options class and pass that object to WebDriver. The example below uses Chrome:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument('--headless=new')
driver = webdriver.Chrome(options=options)
try:
driver.get('https://example.test')
print(driver.title)
finally:
driver.quit()
Confirm that the browser and driver setup in the target environment is compatible. If startup fails, verify the installed browser and driver versions before debugging page selectors or application behavior.
Recommended Free Tools
2. Choose a framework and session model
| Configuration question | Playwright | Selenium 4 |
|---|---|---|
| Where session settings live | Test-runner settings in use, plus browser launch and BrowserContext options. |
Browser-specific Options objects and WebDriver session capabilities. |
| Browser selection | Chromium, Firefox, WebKit, or branded Chrome and Edge channels. | Use the corresponding browser Options class; supported browsers and fields depend on the driver and browser. |
| State model | Fresh BrowserContexts isolate cookies, local storage, permissions and cache; storage state or a user-data directory can preserve intentional state. | Session behavior is set through the browser’s driver and Options object; keep browser-specific configuration in the appropriate class. |
| Timeout configuration | Separate settings such as action timeout can be set in test configuration. | Configure page-load, script and implicit-wait timeouts through WebDriver. |
| Configuration trade-off | First-class context settings make isolated test setup direct. | WebDriver capabilities provide a standardized session description, while details often remain browser-specific. |
Selenium’s documentation says that, as of Selenium 4, browser Options classes are required. WebDriver capabilities describe supported session features, but browser vendors may add extension capabilities. Do not assume a browser-specific field or behavior transfers unchanged to another browser.
Rank #2
- HTML CSS Design and Build Web Sites
- Comes with secure packaging
- It can be a gift option
3. Configure a Playwright test session
For a Playwright Test project, put settings shared by tests in playwright.config.ts. This example uses Chromium, headless mode, a saved login state, an HTTP proxy and an action timeout:
import { defineConfig } from '@playwright/test';
export default defineConfig({
use: {
baseURL: 'https://example.test',
browserName: 'chromium',
headless: true,
storageState: 'state.json',
proxy: {
server: 'http://proxy.example:3128',
bypass: 'localhost',
},
actionTimeout: 10_000,
},
});
With baseURL set, tests can navigate to relative paths such as /account. storageState loads cookies and local storage from the named file. The proxy settings route browser traffic through the proxy server and bypass it for the specified host. actionTimeout limits an individual action rather than defining how long every kind of navigation or script may run.
Make the run visible when debugging
Set headless: false to watch the browser while investigating a selector, permission prompt, download flow or login. Once the issue is understood, restore headless mode for a run that does not need a visible window. For branded Chrome or Edge, set a channel such as chrome or msedge in the relevant browser configuration.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Add context and launch settings only where needed
Playwright’s configuration also supports settings such as extra HTTP headers, HTTP credentials, ignoring HTTPS errors, offline emulation, recording and traces. Browser APIs provide launch options, user-data directories, locale, permissions and proxy credentials. Put a setting at the layer that owns the behavior: a browser launch choice belongs to launch configuration, while per-session identity and permissions belong with the browser context.
A headed run and a headless run can expose different operational issues, so debug in headed mode when you need to see the browser, but validate the final configuration in the same mode and environment used by the automation job.
Rank #3
4. Decide whether browser state should persist
State persistence is a deliberate choice, not a default convenience. A fresh Playwright BrowserContext gives a test an isolated starting point rather than carrying over cookies, local storage, permissions or cache from another run. That makes failures easier to reproduce and reduces accidental coupling between tests.
Reuse a prepared login state
Use storageState when a repeatable test suite needs to begin already authenticated. The referenced file can contain authentication cookies, so treat it like a credential: keep it out of source control and restrict access. Generate or provide the state through your own controlled setup rather than relying on a developer’s active browser profile.
Use a persistent profile only for intentional continuity
A user-data directory preserves browser profile data across runs. Use a separate directory for automation, not a profile that a person is actively using. Playwright MCP also distinguishes persistent profiles, which preserve login state, from isolated profiles, which start fresh; it supports an explicit --user-data-dir. The same underlying decision applies in ordinary automation: persist only what the workflow needs, and isolate everything else.
5. Configure a Selenium session
Selenium’s Options class is the right place to assemble browser-specific arguments before creating WebDriver. Here is a Python Chrome example with headless mode, an eager page-load strategy, a manual proxy and an explicit page-load timeout:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument('--headless=new')
options.page_load_strategy = 'eager'
options.proxy = {
'proxyType': 'manual',
'httpProxy': 'proxy.example:3128',
}
driver = webdriver.Chrome(options=options)
try:
driver.set_page_load_timeout(30)
driver.get('https://example.test')
print(driver.title)
finally:
driver.quit()
The example’s eager page-load strategy is a choice about when navigation is considered ready; it is not a guarantee that every application has finished rendering or fetching data. Choose among WebDriver’s normal, eager and none strategies according to what the next automation step requires, then use explicit waits or application-specific checks where the page’s readiness matters.
Rank #4
- Brand: Wiley
- Set of 2 Volumes
- A handy two-book set that uniquely combines related technologies Highly visual format and accessible language makes these books highly effective learning tools Perfect for beginning web designers and front-end developers
Set timeouts for the operation that can stall
WebDriver exposes page-load, script and implicit-wait timeouts. Set page-load limits for navigation, script limits for asynchronous scripts, and implicit waits only when that behavior is intended for element lookup. Avoid treating a single timeout as a universal session deadline; a page can navigate successfully while a later script or element lookup still stalls.
Keep browser-specific capabilities in their lane
Session capabilities include values such as browser name, optional browser version, platform name, certificate acceptance and page-load strategy. Selenium standardizes the session description, but vendors can add extension capabilities. Put Chrome-specific arguments in Chrome Options, Firefox-specific settings in Firefox Options, and verify browser-specific behavior against that browser’s supported options.
6. Set network, identity and browser behavior
Before adding settings, identify what the job actually needs. A proxy, authentication credentials, custom request headers, locale and permissions solve different problems; configuring all of them indiscriminately makes failures harder to isolate.
- Proxy: Set the proxy at the browser session or context layer. Test that the proxy itself routes traffic and that bypass domains behave as intended before investigating website behavior. Playwright also supports proxy credentials.
- HTTP credentials and headers: Playwright can apply HTTP credentials and extra HTTP headers through its configuration. Keep secrets out of checked-in configuration and use the credential mechanism appropriate to the site.
- Locale and permissions: Playwright context options can set locale and permissions for a session. Do not assume that routing through a proxy alone also configures the browser’s locale or permissions.
- Certificate handling: Playwright offers an option to ignore HTTPS errors; Selenium capabilities include certificate acceptance. Use relaxed certificate checks only when the test requires them, rather than as a blanket fix for a broken trust setup.
- Offline and recording behavior: Playwright configuration includes offline emulation and recording or trace options. Enable only what a test needs, and retain diagnostic output for failures you need to investigate.
When a request fails, separate the layers: first check browser startup, then proxy reachability and credentials, then the application response, and finally any page-specific waits. Changing several layers at once can make the cause less clear.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.7. Set timeout and reliability expectations
A timeout should reflect the operation, not a wish that the page will eventually succeed. Playwright’s actionTimeout controls actions; Selenium separately exposes page-load, script and implicit-wait timeouts. Tune the relevant limit to the application’s real latency, and set explicit limits so a slow or stalled job fails in a diagnosable way instead of waiting indefinitely.
Best Value
- Use a page-load strategy appropriate to the site, then verify the specific content your next step needs.
- Do not interpret a successful navigation as proof that late-loading application content is ready.
- Use isolated browser state for reproducibility; stale cookies, local storage or extensions can make a run behave differently from a clean CI session.
- Capture a trace, screenshot or driver log when a failure occurs only in CI. Such artifacts help distinguish a selector problem from a startup, timing or network issue.
- Keep saved state files and automation user-data directories out of source control because they may preserve authentication or other sensitive profile data.
8. Troubleshoot the common failure modes
| Symptom | Likely cause | What to check |
|---|---|---|
| Browser will not launch | Browser binaries, system dependencies or driver/browser compatibility are missing or mismatched. | Install the framework’s browser binaries and required dependencies; verify the browser and driver setup in the target environment. |
| Works locally, fails on CI | Different dependencies, headless behavior, timing, stale state or environment-specific network access. | Capture traces, screenshots or driver logs; run headed during diagnosis where possible, then validate again in the CI mode. |
| Login works once but not on the next run | State was not saved or loaded, or the session is using a fresh isolated context. | Confirm the intended storage state or dedicated profile is used, and that the file or directory is available to the run. |
| Unexpected login, stale page or extension behavior | A profile is being reused when a clean session was expected. | Start with an isolated profile or fresh BrowserContext; add persistence only when intentional. |
| Requests time out only through a proxy | The proxy, credentials or bypass rules are not routing the expected host. | Test proxy routing and bypass domains independently before debugging selectors or page behavior. |
| Navigation ends but the next step cannot find content | The selected page-load strategy or navigation completion point is earlier than the application content the test expects. | Wait for the relevant selector or application condition and set an appropriate action or page-load timeout. |
| One browser accepts an option and another does not | The setting is browser-specific or implemented differently by the vendor. | Move the field into the correct browser Options object and check the current browser and framework reference. |
9. When a screenshot API is a better fit than a browser session
If the task is to capture a page rather than interact with it, you may not need to install and maintain Playwright or Selenium at all. ScreenshotNeo is a website screenshot API and MCP server: a GET request with a URL returns a PNG, JPEG, WebP or PDF. It is not a replacement for a session that must click through an application, run a test, or preserve interactive browser state.
Or skip the browser setup
For a capture-only task, call the API directly. The example saves a WebP screenshot of Stripe; replace the target URL as needed. See the ScreenshotNeo API documentation for request parameters.
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
ScreenshotNeo accepts cookie or consent banners like a visitor and removes more than 60 known consent platforms, newsletter popups and chat widgets before capture; each step can be turned off. Bot checks or CAPTCHAs, blank pages, timeouts, failed loads and cache hits cost nothing, and response headers say whether the page was billed. Its MCP server provides take_screenshot, get_page_info and capture_pdf for Claude, Cursor and other MCP clients.
The free plan includes 1,000 shots a month with no card; paid plans start at $5 for 3,000 shots. Every feature is on every plan. Sign up for ScreenshotNeo’s free plan to try a capture without a card.
The Tool Desk
Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Frequently Asked Questions
Does a browser proxy set the locale a website sees?
No. A proxy controls network routing, while browser locale is a separate session or context setting. Configure and test each independently when both matter.
Can I use a screenshot API instead of configuring Playwright or Selenium?
Only when the job is to capture a page. A screenshot endpoint does not replace interactive automation steps such as clicking through an application or running a browser test.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

