Requirements
- Target platform
- OpenClaw
- Install method
- Manual import
- Extraction
- Extract archive
- Prerequisites
- OpenClaw
- Primary doc
- SKILL.md
Automate Chrome and Chromium with Puppeteer for scraping, testing, screenshots, and browser workflows.
Automate Chrome and Chromium with Puppeteer for scraping, testing, screenshots, and browser workflows.
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete.
I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run.
On first use, read setup.md for integration guidelines.
User needs browser automation: web scraping, E2E testing, PDF generation, screenshots, or any headless Chrome task. Agent handles page navigation, element interaction, waiting strategies, and data extraction.
Scripts and outputs in ~/puppeteer/. See memory-template.md for structure. ~/puppeteer/ โโโ memory.md # Status + preferences โโโ scripts/ # Reusable automation scripts โโโ output/ # Screenshots, PDFs, scraped data
TopicFileSetup processsetup.mdMemory templatememory-template.mdSelectors guideselectors.mdWaiting patternswaiting.md
Never click or type immediately after navigation. Always wait for the element: await page.waitForSelector('#button'); await page.click('#button'); Clicking without waiting causes "element not found" errors 90% of the time.
Prefer stable selectors in this order: [data-testid="submit"] โ test attributes (most stable) #unique-id โ IDs form button[type="submit"] โ semantic combinations .class-name โ classes (least stable, changes often) Avoid: div > div > div > button โ breaks on any DOM change.
After clicks that navigate, wait for navigation: await Promise.all([ page.waitForNavigation(), page.click('a.next-page') ]); Without this, the script continues before the new page loads.
Always set viewport for consistent rendering: await page.setViewport({ width: 1280, height: 800 }); Default viewport is 800x600 โ many sites render differently or show mobile views.
Dismiss dialogs before they block interaction: page.on('dialog', async dialog => { await dialog.dismiss(); // or dialog.accept() }); Unhandled dialogs freeze the script.
Always wrap in try/finally: const browser = await puppeteer.launch(); try { // ... automation code } finally { await browser.close(); } Leaked browser processes consume memory and ports.
Add delays between requests to avoid blocks: await page.waitForTimeout(1000 + Math.random() * 2000); Hammering sites triggers CAPTCHAs and IP bans.
page.click() on invisible element โ fails silently, use waitForSelector with visible: true Screenshots of elements off-screen โ blank image, scroll into view first page.evaluate() returns undefined โ cannot return DOM nodes, only serializable data Headless blocked by site โ use headless: 'new' or set user agent Form submit reloads page โ page.waitForNavigation() or data is lost Shadow DOM elements invisible to selectors โ use page.evaluateHandle() to pierce shadow roots Cookies not persisting โ launch with userDataDir for session persistence
Data that stays local: All scraped data in ~/puppeteer/output/ Browser profile in specified userDataDir This skill does NOT: Send scraped data anywhere Store credentials (you provide them per-script) Access files outside ~/puppeteer/
Install with clawhub install <slug> if user confirms: playwright โ Cross-browser automation alternative chrome โ Chrome DevTools and debugging web โ General web development
If useful: clawhub star puppeteer Stay updated: clawhub sync
Code helpers, APIs, CLIs, browser automation, testing, and developer operations.
Largest current source with strong distribution and engagement signals.