Agent402 / tools / html-select

HTML select

FREE with proof-of-work · or $0.001 in USDC · POST /api/html-select

Run a CSS selector against an HTML string and return the matches (text, attrs, and optionally outerHTML for each). The deterministic alternative to regex when you already have the HTML and know the selector — pairs with /api/render or any page you've fetched yourself.

Input

FieldTypeDescription
html *stringRaw HTML string to query (max 5MB)
selector *stringCSS selector (e.g. "h1", ".price", "article > p:first-of-type")
limitnumberMax matches to return, 1-200 (default 25)
attrstringWhen set, return only this attribute's value per match (e.g. "href", "data-id") — keeps responses compact
includeHtmlbooleanInclude outerHTML of each match (default false — text + attrs only)

Example output

{
  "count": 2,
  "matches": [
    {
      "text": "One",
      "attrs": {}
    },
    {
      "text": "Two",
      "attrs": {}
    }
  ]
}

Try it — see the 402 challenge (free)

curl -i -X POST https://agent402.tools/api/html-select \
  -H "Content-Type: application/json" \
  -d '{"html":"<html><body><h1>One</h1><h1>Two</h1></body></html>","selector":"h1","limit":25}'

The response is HTTP 402 Payment Required with exact payment requirements. Any x402 v2 client pays automatically and retries:

Paid call (JavaScript agent)

import { wrapFetchWithPayment } from "@x402/fetch";
import { x402Client } from "@x402/core/client";
import { registerExactEvmScheme } from "@x402/evm/exact/client";
import { privateKeyToAccount } from "viem/accounts";

const client = new x402Client();
registerExactEvmScheme(client, { signer: privateKeyToAccount(KEY) });
const payFetch = wrapFetchWithPayment(fetch, client);

const res = await payFetch("https://agent402.tools/api/html-select", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    "html": "<html><body><h1>One</h1><h1>Two</h1></body></html>",
    "selector": "h1",
    "limit": 25
  }),
});

No wallet? Pay with compute

This is a pure-CPU tool, so an agent without a wallet can pay with proof-of-work instead of USDC: fetch a challenge, solve the sha256 puzzle (16 leading zero bits — a fraction of a second of CPU, no money, no AI tokens), and resend with the X-Pow-Solution header.

import { createHash } from "node:crypto";
const lz = (b) => { let t = 0; for (const x of b) { if (!x) { t += 8; continue; } t += Math.clz32(x) - 24; break; } return t; };
const c = await (await fetch("https://agent402.tools/api/pow/challenge?slug=html-select")).json();
let n = 0;
while (lz(createHash("sha256").update(c.challenge + ":" + n).digest()) < c.difficulty) n++;
await fetch("https://agent402.tools/api/html-select", { method: "POST", headers: { "X-Pow-Solution": c.token + ":" + n, "Content-Type": "application/json" }, body: JSON.stringify({"html":"

One

Two

","selector":"h1","limit":25}) });

Part of these workflows

This tool is one step in a curated multi-tool workflow — agents can fetch the whole sequence as an MCP prompt or call https://agent402.tools/api/skill-packs/{slug}/prompt.

Related tools

Extract article

USDC $0.010 · POST /api/extract

Extract the main article content from any public URL as clean markdown. Returns title, byline, excerpt, word count, and …

Page metadata

USDC $0.002 · GET /api/meta

Fetch page metadata for a URL: title, description, OpenGraph, Twitter cards, canonical URL, favicon.

Browser render

USDC $0.02 · POST /api/render

Render a page in a real headless Chromium browser (JavaScript executed), then extract the main content as clean markdown…