Patchright Stealth Browsing Skill
> [!IMPORTANT]
> Hard Dependency Warning:
> This skill is strictly dependent on the patchright-mcp server. It will not work unless the patchright-mcp server is correctly installed, configured, and running in the OpenClaw environment.
>
> Repository Access:
> The patchright-mcp server repository is private. Accessing, cloning, and managing the server requires proper authentication credentials and repository privileges.
This skill enables the OpenClaw agent to automate browser interactions stealthily on websites protected by active anti-bot systems (e.g., Cloudflare, Akamai, Datadome). It runs over the patchright-mcp server, which uses a patched Chromium browser.
The browser capabilities are consolidated into four core tools:
1. patchright_navigation: Manages page lifecycle, navigation, HTML content retrieval, and screenshot captures.
2. patchright_interaction: Executes clicks, text typing, option selections, scrolling, global keys, and elements synchronization.
3. patchright_session: Handles reading, writing, and clearing context cookies.
4. patchright_execution: Evaluates page scripts and extracts structured interactive element snapshots.
Guidelines for the Agent
-
Sequential Lifecycle Management:
- Begin by navigating directly usingpatchright_navigationwith actionnavigateand the targeturl.
- Always finish execution by callingpatchright_navigationwith actioncloseto safely release the browser process and memory. -
Stealth Interaction Flow:
- To interact with a page, first get the structure usingpatchright_executionwith actionsnapshot. This extracts all visible interactive elements (buttons, links, inputs) along with their CSS selectors.
- Use the retrieved selectors to trigger clicks, hovers, or inputs viapatchright_interaction. -
Performance Optimization (Bulk Fill):
- When filling forms with multiple inputs, do not callfillrepeatedly. Instead, usepatchright_interactionwith actionbulk_filland pass the list of fields in theitemsarray. This reduces roundtrips and handles fallback evaluations automatically. -
Synchronizations and Waits:
- If pages load elements dynamically, synchronize usingpatchright_interactionwith actionwait_fortargeting the element's selector and expected state (visible,hidden,attached, ordetached). -
Visual Validation:
- Capture screenshots usingpatchright_navigationwith actionscreenshotafter major actions (like form submissions or clicks) to verify the visual state of the page. -
Authentication & Session Reuse:
- Usepatchright_sessionwith actionget_cookiesto save authentication state, andset_cookiesto restore sessions without needing to re-login. -
Custom Client Configurations:
- You can dynamically override browser launch settings by passing parameters such asheadless,userAgent,viewport(e.g.{ "width": 800, "height": 600 }), anddeviceScaleFactorto theopenornavigateactions insidepatchright_navigation.
- Use these overrides to simulate different device types (mobile/desktop viewports) or rotate user agents to prevent fingerprint-based blockings.
Edge Cases and Failure Handling
-
Element Selector Timeouts:
- If an interaction (e.g.,click,fill) fails due to a timeout, verify if the element is loaded by callingpatchright_interactionwith actionwait_forand statevisible.
- If an element is hidden or obstructed by a modal, usepatchright_executionwith actionevaluateto trigger a native JS click:document.querySelector('selector').click(). -
Isolated Context Variable Sharing:
- Remember thatevaluatescripts execute in an isolated context (utility world) for anti-bot stealth.
- If you need to verify or set properties on the page's main execution context, store them as custom DOM attributes (e.g.,element.setAttribute('data-state', 'value')) rather than attaching them directly towindow.propertyName. -
Anti-bot Block Pages / CAPTCHAs:
- If you encounter a CAPTCHA or blocker page, do not repeat failing navigation commands.
- Runpatchright_navigationwith actionscreenshotto verify if a challenge is present.
- If a challenge page appears, instruct the user or wait for manual solver actions, rather than retrying automated scripts recursively. -
CDP Connection Disconnects:
- If the remote CDP port9222falls back to a subprocess launch, verify if the process crashed by retryingopen. The server automatically spins up a local fallback browser if the remote socket is unresponsive.