CAUTION version 1.2.0 · audited 2026-09-17
This package is a web-scraping skill built on Playwright. It provides two command-line scripts: a simple scraper and a stealth scraper that hides browser automation signals. Both scripts take a URL from the command line and fetch the page; the stealth version can also save a screenshot and full HTML. The code does not show obvious credential theft, hidden malicious network destinations, or persistence, but it can access arbitrary websites and write page content to disk. Because of anti-bot evasion, Chromium security flags, and file output, a careful user should review it before installation.
| Declared purpose | Playwright-based web scraping OpenClaw Skill with anti-bot protection. Successfully tested on complex sites like Discuss.com.hk. |
| Observed behavior | The package defines two Node.js scraper scripts. scripts/playwright-simple.js launches Chromium, navigates to a URL from command-line arguments, waits, extracts title/URL/body text, and optionally saves a screenshot. scripts/playwright-stealth.js adds a mobile User-Agent, hides navigator.webdriver, detects Cloudflare challenges, and can save a screenshot and full HTML. Documentation and test.sh install or run Playwright/Chromium and invoke the scrapers against example.com and m.discuss.com.hk. No exfiltration, credential access, payment handling, or persistence behavior was found. |
| Verdict, rules only | CAUTION · runs subprocesses or eval/exec |
| Verdict, AI | CAUTION |
| Final verdict | CAUTION (never better than either pass) |
| capability | vs purpose | detail |
|---|---|---|
| network | needed | Fetches arbitrary URLs supplied through process.argv; scripts/playwright-simple.js lines 12 and 32, and scripts/playwright-stealth.js line 84. |
| browser | needed | Launches Chromium through Playwright; scripts/playwright-simple.js line 26 and scripts/playwright-stealth.js line 43. |
| filesystem_write | needed | Saves screenshots, HTML, and JSON output; scripts/playwright-stealth.js lines 25, 128, and 140, test.sh writes /tmp files, and examples write output files. |
| filesystem_read | needed | test.sh greps generated JSON files to verify output, for example at lines 12, 23, and 34. |
| shell | needed | The skill is executed as Node.js or bash commands; package.json line 9 runs bash test.sh, and examples include shell scripts. |
| install_packages | needed | Installs the Playwright dependency and Chromium browser; package.json line 21 and SKILL.md lines 30-31. |
| other | needed | Anti-bot camouflage: hides navigator.webdriver and uses an iPhone User-Agent; scripts/playwright-stealth.js lines 65 and 29. |
| severity | finding |
|---|---|
| info | Declared purpose The package declares itself as a Playwright web-scraping skill with anti-bot protection. SKILL.md:3 description: Playwright-based web scraping OpenClaw Skill with anti-bot protection. Successfully tested on complex sites like Discuss.com.hk. |
| info | URL is taken from command line The scraper takes the target URL directly from command-line arguments; any URL supplied by the caller will be fetched. scripts/playwright-simple.js:12 const url = process.argv[2]; |
| info | Fetches arbitrary page Navigates the browser to the supplied URL. This is expected for scraping but means the skill can make network requests to any address. scripts/playwright-simple.js:32 await page.goto(url, { waitUntil: 'domcontentloaded' }); |
| info | Extracts page text Reads the rendered page body text from the DOM and returns the first 5000 characters. scripts/playwright-simple.js:42 content: document.body.innerText.substring(0, 5000), |
| medium | Screenshot output If SCREENSHOT_PATH is set, the script writes a screenshot of the page to that path, which may contain sensitive page content. scripts/playwright-simple.js:49 await page.screenshot({ path: screenshotPath }); |
| medium | Saves screenshot by default The stealth script saves a screenshot even without the environment variable, writing a timestamped PNG in the current directory. scripts/playwright-stealth.js:25 const screenshotPath = process.env.SCREENSHOT_PATH || `./screenshot-${Date.now()}.png`; |
| info | HTML saving flag The script supports saving full page HTML when SAVE_HTML=true. scripts/playwright-stealth.js:26 const saveHtml = process.env.SAVE_HTML === 'true'; |
| medium | Chromium sandbox disabled Launches Chromium with --no-sandbox, reducing isolation between the browser and the host. A malicious page would have a larger potential impact. scripts/playwright-stealth.js:46 '--no-sandbox', |
| medium | Site isolation disabled Disables Chromium site isolation, which weakens a major browser security boundary. scripts/playwright-stealth.js:49 '--disable-features=IsolateOrigins,site-per-process', |
| medium | Hides automation marker The stealth script changes navigator.webdriver to false to defeat bot detection. This may violate the target site's terms or access controls. scripts/playwright-stealth.js:65 Object.defineProperty(navigator, 'webdriver', { |
| medium | Writes full page HTML When SAVE_HTML=true, the full HTML of the fetched page is written to disk, which can include authenticated or private page content. scripts/playwright-stealth.js:140 fs.writeFileSync(htmlPath, html); |
| medium | Instructions to install separate skill The documentation tells users to install a separate skill called deep-scraper. That package is outside this release and would need separate security review. SKILL.md:91 npx clawhub install deep-scraper |
| medium | Wildcard cleanup of screenshots The test cleanup deletes files matching screenshot-*.png in the current working directory, not only files created by the test. Running it in a directory with real screenshots could delete them. test.sh:43 rm -f /tmp/test-*.json screenshot-*.png |
| info | Example batch output Example loop writes each scraped result to a timestamped JSON file in the current directory. examples/README.md:120 node scripts/playwright-stealth.js "$url" > "output_$(date +%s).json" |
| low | Dependency has install script The optional fsevents dependency has an install script. This is normal for fsevents, but install scripts run code during npm install and should be acknowledged. package-lock.json:19 "hasInstallScript": true, |
| info | Publisher-disclosed risk The publisher itself notes that stealth mode can be used against sites where access is not authorized. skill-card.md:25 Risk: Stealth scraping weakens normal browser automation signals and can be used against sites where access is not authorized. |
0 AI finding(s) were dropped because their file, line or quote did not match the package.
| domain | service rating | where |
|---|---|---|
| clawhub.ai | not in the service index | skill-card.md:9 |
| clawhub.com | not in the service index | SKILL.md:234 |
| example.com | not in the service index | CONTRIBUTING.md:40 |
| example.net | not in the service index | examples/README.md:115 |
| example.org | not in the service index | examples/README.md:114 |
| forum.example.com | not in the service index | examples/README.md:190 |
| github.com | not in the service index | CONTRIBUTING.md:9 |
| img.shields.io | not in the service index | README.md:3 |
| m.discuss.com.hk | not in the service index | INSTALL.md:67 |
| news.example.com | not in the service index | examples/README.md:176 |
| nodejs.org | not in the service index | README.md:4 |
| opensource.org | not in the service index | README.md:3 |
| playwright.dev | not in the service index | README.md:5 |
| registry.npmjs.org | not in the service index | package-lock.json:17 |
| shop.example.com | not in the service index | examples/README.md:184 |
| www.youtube.com | not in the service index | SKILL.md:95 |
| Binaries invoked | bash, chmod, git, node, npm, npx |
| Environment variables read | BASH_SOURCE, HEADLESS, OUTPUT_FILE, SAVE_HTML, SCREENSHOT_PATH, SCRIPT_DIR, SKILL_DIR, URL, URLS, USER_AGENT, WAIT_TIME |
| Hard-coded wallets | none |
| Pipes a download to a shell | 0 |
| eval / exec / subprocess | 2 |
| base64 blobs | 0 |
| File writes | 8 |
| Persistence | 0 |
| file | lines | sha256 |
|---|---|---|
CHANGELOG.md | 65 | 124b12f49a5abe7d… |
CONTRIBUTING.md | 132 | 84e39b85a36f685e… |
INSTALL.md | 121 | 8a9cbfe21c4aabb4… |
README.md | 187 | eeb306a0f6842460… |
README_ZH.md | 184 | 8d440826643b5ee2… |
SKILL.md | 234 | c2f4ec84a3a05471… |
_meta.json | 6 | b9200a0a94964134… |
examples/README.md | 229 | 5dcca9d3116a6069… |
examples/discuss-hk.sh | 16 | 44846b58553d273a… |
package-lock.json | 60 | 1b49631e50bb0485… |
package.json | 23 | 371e3356019ab665… |
scripts/playwright-simple.js | 60 | 97a8a7cfd0f96e7f… |
scripts/playwright-stealth.js | 167 | b0eef508b8d56321… |
skill-card.md | 63 | 50d14788119618b8… |
test.sh | 45 | f07de4f7807a6fbf… |
For agents
JSON: https://agenteconomy.report/k/playwright-scraper-skill.audit.json · badge: https://agenteconomy.report/k/playwright-scraper-skill.audited.svg ·
skill rating: /k/playwright-scraper-skill · commission an audit of any skill: US$ 29 per version.
The complete published package of this exact version was downloaded from the registry and read statically; nothing was executed. A deterministic pass extracts network destinations, binaries, environment variables, writes, install commands, obfuscation markers, subprocesses and wallets, each with file and line. An AI then reads the whole package with those facts and writes the summary, the capabilities and the findings under a strict schema; every finding it produces must cite a file, a line and the exact text, or it is dropped. The final verdict is the worst of the two passes. The audit does not change the skill's trust tier (policy); the author may respond through the dispute channel and the response is published here. Commissioned by: the Agent Economy Report (free program: the 150 most downloaded skills, September 2026).