Claude-skill-registry Core Browser Automation
General-purpose patterns for reliable browser automation (selectors, waiting, scrolling, overlays, HITL).
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/core-browser-automation" ~/.claude/skills/majiayu000-claude-skill-registry-core-browser-automation-ba121b && rm -rf "$T"
manifest:
skills/data/core-browser-automation/SKILL.mdsource content
Selector Strategy (Stability First)
- Priority 1:
,data-testid
,data-test
,data-cy
(if stable).id - Priority 2: Accessible roles with names (e.g.,
).getByRole('button', { name: 'Submit' }) - Priority 3: Text content (e.g.,
) - use with caution if text is dynamic.getByText('Submit') - Avoid: Brittle CSS selectors (e.g.,
), XPath, or selectors tied to visual layout.div > div:nth-child(3)
Waiting Strategy (No Flaky Sleeps)
- Explicit Waits: Wait for elements to be attached, visible, and enabled before interacting.
- State Changes: Wait for clear UI signals (spinners disappearing, success messages appearing).
- Bounded Polling: If no clear signal exists, use a loop with a short sleep (1-2s) and a max retry count.
- Avoid: Long blind sleeps (e.g.,
).sleep(5000)
Scroll Strategy
- Window vs. Container: Determine if the scrollbar belongs to the
or a specific container element.window - Incremental Scan: Scroll in small chunks (e.g., half viewport) to trigger lazy-loading or reveal elements.
- Check after Scroll: Re-evaluate the page state after scrolling (elements might become visible).
Handling Overlays & Modals
- Detection: Watch for common overlay selectors (dialogs, cookie banners, "interstitial" layers).
- Dismissal: Look for "Close", "X", "Accept", "Reject", "No thanks" buttons.
- Click Intercepted: If a click fails due to an overlay, find the overlay, dismiss it, and retry the click.
Frames & Iframes
- Detection: If an element is not found, check if it resides within an
.iframe - Switching: Switch context to the iframe before querying elements inside it.
Human-in-the-Loop (HITL) Policy
- Auth: Stop for Login/SSO/MFA/CAPTCHA. Ask user to complete and type "Done".
- Irreversible Actions: ALWAYS ask for explicit confirmation before clicking:
- Submit / Complete / Finish
- Attest / Certify
- Approve / Confirm / Yes
- Send / Pay
- Ambiguity: If unsure if an action is irreversible, ASK first.
Recovery Rules
- Element not found:
- Check for iframes.
- Check for shadow DOM.
- Check if the element is behind an overlay.
- Scroll to bring it into view.
- Click intercepted:
- Identify the obscuring element.
- Dismiss it (if it's a modal/banner).
- Wait for it to disappear (if it's a toast/spinner).
- Stale element:
- Re-query the element from the DOM before interacting.