{
  "@context": "https://schema.org",
  "@id": "https://aggr.aymericbeaumet.com/items/simonwillison-net/2026-10-26-webframe-evaluated-as-a-scraper-and-a-sandbox/#webpage",
  "@type": [
    "WebPage",
    "ArchiveComponent"
  ],
  "articleBody": "[webframe: evaluated as a scraper and a sandbox](https://github.com/simonw/research/tree/main/webframe-evaluation#readme) — An evaluation of webframe found it to be a fast, lightweight browser-JavaScript runner suitable for scraping, with performance comparable to shot-scraper, but with important rough edges including CSP failures, a 0×0 viewport, hanging loads, missing HTTP metadata, and limited browser controls.\n\n[webframe](https://github.com/tractordev/webframe) is a neat little project from Jeff Lindsay which lets you \"run a web page like a program\" - you point it at a URL or file and it executes it in a hidden headless web view and outputs `console.log()` to standard output and any exceptions to standard error.\n\nIt's written in Go on top of the [glaze](https://github.com/crgimenes/glaze) library, which provides access to a system browser (\"WKWebView on macOS, WebKitGTK on Linux, WebView2 on Windows\") so it doesn't need to bundle its own browser engine.\n\nIt reminds me of my own [shot-scraper javascript](https://shot-scraper.datasette.io/en/stable/javascript.html) tool, albeit in a much smaller package that doesn't depend on Playwright.\n\nI had Claude Opus 5.5 [put it through its paces](https://claude.ai/code/cshk_01MX3aJH8vDGmGSj1xH9BYhj2HviVvLDaJbiELHyDoReYT) and prepare a research report for me. Here's the prompt I used:\n\n> `Explore https://github.com/tractordev/webframe try running it and put it though its paces, build a few exploratory prototypes, then evaluate it as a potential sandboxing tool and as a tool for scraping web pages using the same patterns encouraged by the \"shot-scraper JavaScript\" command (see simonw/shot-scraper on GitHub, docs directory)`\n",
  "authors": [],
  "captured_at": "2026-10-27T04:50:20.607730595+00:00",
  "category": "programming",
  "content_html": "<p><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/simonw/research/tree/main/webframe-evaluation#readme\">webframe: evaluated as a scraper and a sandbox</a> — An evaluation of webframe found it to be a fast, lightweight browser-JavaScript runner suitable for scraping, with performance comparable to shot-scraper, but with important rough edges including CSP failures, a 0×0 viewport, hanging loads, missing HTTP metadata, and limited browser controls.</p>\n<p><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/tractordev/webframe\">webframe</a> is a neat little project from Jeff Lindsay which lets you &quot;run a web page like a program&quot; - you point it at a URL or file and it executes it in a hidden headless web view and outputs <code>console.log()</code> to standard output and any exceptions to standard error.</p>\n<p>It's written in Go on top of the <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/crgimenes/glaze\">glaze</a> library, which provides access to a system browser (&quot;WKWebView on macOS, WebKitGTK on Linux, WebView2 on Windows&quot;) so it doesn't need to bundle its own browser engine.</p>\n<p>It reminds me of my own <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://shot-scraper.datasette.io/en/stable/javascript.html\">shot-scraper javascript</a> tool, albeit in a much smaller package that doesn't depend on Playwright.</p>\n<p>I had Claude Opus 5.5 <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://claude.ai/code/cshk_01MX3aJH8vDGmGSj1xH9BYhj2HviVvLDaJbiELHyDoReYT\">put it through its paces</a> and prepare a research report for me. Here's the prompt I used:</p>\n<blockquote>\n<p><code>Explore https://github.com/tractordev/webframe try running it and put it though its paces, build a few exploratory prototypes, then evaluate it as a potential sandboxing tool and as a tool for scraping web pages using the same patterns encouraged by the &quot;shot-scraper JavaScript&quot; command (see simonw/shot-scraper on GitHub, docs directory)</code></p>\n</blockquote>\n",
  "content_markdown": "[webframe: evaluated as a scraper and a sandbox](https://github.com/simonw/research/tree/main/webframe-evaluation#readme) — An evaluation of webframe found it to be a fast, lightweight browser-JavaScript runner suitable for scraping, with performance comparable to shot-scraper, but with important rough edges including CSP failures, a 0×0 viewport, hanging loads, missing HTTP metadata, and limited browser controls.\n\n[webframe](https://github.com/tractordev/webframe) is a neat little project from Jeff Lindsay which lets you \"run a web page like a program\" - you point it at a URL or file and it executes it in a hidden headless web view and outputs `console.log()` to standard output and any exceptions to standard error.\n\nIt's written in Go on top of the [glaze](https://github.com/crgimenes/glaze) library, which provides access to a system browser (\"WKWebView on macOS, WebKitGTK on Linux, WebView2 on Windows\") so it doesn't need to bundle its own browser engine.\n\nIt reminds me of my own [shot-scraper javascript](https://shot-scraper.datasette.io/en/stable/javascript.html) tool, albeit in a much smaller package that doesn't depend on Playwright.\n\nI had Claude Opus 5.5 [put it through its paces](https://claude.ai/code/cshk_01MX3aJH8vDGmGSj1xH9BYhj2HviVvLDaJbiELHyDoReYT) and prepare a research report for me. Here's the prompt I used:\n\n> `Explore https://github.com/tractordev/webframe try running it and put it though its paces, build a few exploratory prototypes, then evaluate it as a potential sandboxing tool and as a tool for scraping web pages using the same patterns encouraged by the \"shot-scraper JavaScript\" command (see simonw/shot-scraper on GitHub, docs directory)`\n",
  "dateCreated": "2026-10-27T04:50:20.607730595+00:00",
  "date_created": "2026-10-26T16:15:00+00:00",
  "date_modified": "2026-10-26T16:15:00+00:00",
  "date_published": "2026-10-26T16:15:00+00:00",
  "description": "Research: webframe: evaluated as a scraper and a sandbox webframe is a neat little project from Jeff Lindsay which lets you \"run a web page like a program\" - you point it at a URL or file and it executes it in a hidden headless web view…",
  "external_url": "https://simonwillison.net/2026/Oct/26/webframe-evaluation/",
  "git": {
    "commit": "20068632b65d2830a2d54f25ca1d90d697bea2c0",
    "path": "items/simonwillison-net/2026/10/2026-10-26-webframe-evaluated-as-a-scraper-and-a-sandbox.md",
    "permalink": "https://github.com/aymericbeaumet/aggr-instance/blob/20068632b65d2830a2d54f25ca1d90d697bea2c0/items/simonwillison-net/2026/10/2026-10-26-webframe-evaluated-as-a-scraper-and-a-sandbox.md"
  },
  "id": "urn:aggr:item:133852bf08c25650eb2235b3deea0f5dd9b0f95e",
  "isBasedOn": {
    "@id": "https://simonwillison.net/2026/Oct/26/webframe-evaluation/"
  },
  "mainEntity": {
    "@id": "https://simonwillison.net/2026/Oct/26/webframe-evaluation/",
    "@type": "CreativeWork",
    "archivedAt": {
      "@id": "https://aggr.aymericbeaumet.com/items/simonwillison-net/2026-10-26-webframe-evaluated-as-a-scraper-and-a-sandbox/#webpage"
    },
    "dateModified": "2026-10-26T16:15:00+00:00",
    "datePublished": "2026-10-26T16:15:00+00:00",
    "headline": "webframe: evaluated as a scraper and a sandbox",
    "timeRequired": "PT2M",
    "url": "https://simonwillison.net/2026/Oct/26/webframe-evaluation/",
    "wordCount": 234
  },
  "name": "Archived snapshot: webframe: evaluated as a scraper and a sandbox",
  "preview": null,
  "reading_minutes": 2,
  "replicated_at": null,
  "source": "simonwillison-net",
  "source_name": "Simon Willison's Weblog",
  "summary": "Research: webframe: evaluated as a scraper and a sandbox webframe is a neat little project from Jeff Lindsay which lets you \"run a web page like a program\" - you point it at a URL or file and it executes it in a hidden headless web view and outputs console.log() to standard output and any exceptions to standard error. It's written in Go on top of the glaze library, which provides access to a system browser (\"WKWebView on macOS, WebKitGTK on Linux, WebView2 on Windows\") so it doesn't need to bundle its own browser engine. It reminds me of my own shot-scraper javascript tool, albeit in a much smaller package that doesn't depend on Playwright. I had Claude Opus 5.5 put it through its paces and prepare a research report for me. Here's the prompt I used: Explore https://github.com/tractordev/webframe try running it and put it though its paces, build a few exploratory prototypes, then evaluate it as a potential sandboxing tool and as a tool for scraping web pages using the same patterns encouraged by the \"shot-scraper JavaScript\" command (see simonw/shot-scraper on GitHub, docs directory) Tags: browsers, go, javascript, jeff-lindsay, shot-scraper",
  "tags": [
    "browsers",
    "go",
    "javascript",
    "jeff-lindsay",
    "shot-scraper"
  ],
  "temporalCoverage": "2026-10-27T04:50:20.607730595+00:00",
  "title": "webframe: evaluated as a scraper and a sandbox",
  "url": "https://aggr.aymericbeaumet.com/items/simonwillison-net/2026-10-26-webframe-evaluated-as-a-scraper-and-a-sandbox/",
  "word_count": 234
}