Agent Economy Report

Skill code audit

CAUTION version 1.2.0 · audited 2026-09-17

playwright-scraper-skill @waisimon

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 purposePlaywright-based web scraping OpenClaw Skill with anti-bot protection. Successfully tested on complex sites like Discuss.com.hk.
Observed behaviorThe 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 onlyCAUTION · runs subprocesses or eval/exec
Verdict, AICAUTION
Final verdictCAUTION (never better than either pass)

Capabilities

capabilityvs purposedetail
networkneededFetches arbitrary URLs supplied through process.argv; scripts/playwright-simple.js lines 12 and 32, and scripts/playwright-stealth.js line 84.
browserneededLaunches Chromium through Playwright; scripts/playwright-simple.js line 26 and scripts/playwright-stealth.js line 43.
filesystem_writeneededSaves 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_readneededtest.sh greps generated JSON files to verify output, for example at lines 12, 23, and 34.
shellneededThe skill is executed as Node.js or bash commands; package.json line 9 runs bash test.sh, and examples include shell scripts.
install_packagesneededInstalls the Playwright dependency and Chromium browser; package.json line 21 and SKILL.md lines 30-31.
otherneededAnti-bot camouflage: hides navigator.webdriver and uses an iPhone User-Agent; scripts/playwright-stealth.js lines 65 and 29.

Findings

severityfinding
infoDeclared 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.
infoURL 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];
infoFetches 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' });
infoExtracts 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),
mediumScreenshot 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 });
mediumSaves 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`;
infoHTML 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';
mediumChromium 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',
mediumSite isolation disabled
Disables Chromium site isolation, which weakens a major browser security boundary.
scripts/playwright-stealth.js:49 '--disable-features=IsolateOrigins,site-per-process',
mediumHides 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', {
mediumWrites 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);
mediumInstructions 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
mediumWildcard 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
infoExample 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"
lowDependency 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,
infoPublisher-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.

Network destinations in the code

domainservice ratingwhere
clawhub.ainot in the service indexskill-card.md:9
clawhub.comnot in the service indexSKILL.md:234
example.comnot in the service indexCONTRIBUTING.md:40
example.netnot in the service indexexamples/README.md:115
example.orgnot in the service indexexamples/README.md:114
forum.example.comnot in the service indexexamples/README.md:190
github.comnot in the service indexCONTRIBUTING.md:9
img.shields.ionot in the service indexREADME.md:3
m.discuss.com.hknot in the service indexINSTALL.md:67
news.example.comnot in the service indexexamples/README.md:176
nodejs.orgnot in the service indexREADME.md:4
opensource.orgnot in the service indexREADME.md:3
playwright.devnot in the service indexREADME.md:5
registry.npmjs.orgnot in the service indexpackage-lock.json:17
shop.example.comnot in the service indexexamples/README.md:184
www.youtube.comnot in the service indexSKILL.md:95

Other facts

Binaries invokedbash, chmod, git, node, npm, npx
Environment variables readBASH_SOURCE, HEADLESS, OUTPUT_FILE, SAVE_HTML, SCREENSHOT_PATH, SCRIPT_DIR, SKILL_DIR, URL, URLS, USER_AGENT, WAIT_TIME
Hard-coded walletsnone
Pipes a download to a shell0
eval / exec / subprocess2
base64 blobs0
File writes8
Persistence0

Files audited

filelinessha256
CHANGELOG.md65124b12f49a5abe7d…
CONTRIBUTING.md13284e39b85a36f685e…
INSTALL.md1218a9cbfe21c4aabb4…
README.md187eeb306a0f6842460…
README_ZH.md1848d440826643b5ee2…
SKILL.md234c2f4ec84a3a05471…
_meta.json6b9200a0a94964134…
examples/README.md2295dcca9d3116a6069…
examples/discuss-hk.sh1644846b58553d273a…
package-lock.json601b49631e50bb0485…
package.json23371e3356019ab665…
scripts/playwright-simple.js6097a8a7cfd0f96e7f…
scripts/playwright-stealth.js167b0eef508b8d56321…
skill-card.md6350d14788119618b8…
test.sh45f07de4f7807a6fbf…

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.

How this is computed

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).