Playwright Browser Automation Runner | No-Code JSON Workflows avatar

Playwright Browser Automation Runner | No-Code JSON Workflows

Pricing

from $4.00 / 1,000 browser actions

Go to Apify Store
Playwright Browser Automation Runner | No-Code JSON Workflows

Playwright Browser Automation Runner | No-Code JSON Workflows

Run deterministic Playwright browser workflows from JSON: navigate, click, fill, extract, assert, wait, and screenshot without deploying a Playwright script.

Pricing

from $4.00 / 1,000 browser actions

Rating

0.0

(0)

Developer

ProdukDigitalAli

ProdukDigitalAli

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Run deterministic Playwright browser workflows from JSON — navigate, click, fill, press, select, extract, assert, wait, and screenshot — without writing or deploying a Playwright script.

This Actor is designed for public, login-free browser automation, smoke tests, QA checks, extraction from JavaScript-rendered pages, and backend/n8n/Make workflows that need predictable structured output and bounded cost.

Quick start

1. Verify a page and extract its heading

{
"startUrl": "https://example.com",
"actions": [
{
"type": "waitForSelector",
"locator": { "by": "css", "value": "h1" }
},
{
"type": "extractText",
"locator": { "by": "css", "value": "h1" }
},
{
"type": "textContains",
"locator": { "by": "css", "value": "h1" },
"expected": "Example Domain"
}
]
}

2. Fill and submit a public form with semantic Playwright locators

{
"startUrl": "https://www.selenium.dev/selenium/web/web-form.html",
"actions": [
{
"type": "fill",
"locator": { "by": "label", "value": "Text input" },
"value": "Playwright on Apify"
},
{
"type": "click",
"locator": { "by": "role", "value": "button", "name": "Submit", "exact": true }
},
{
"type": "urlContains",
"expected": "submitted-form.html"
},
{
"type": "screenshot",
"name": "submitted-form",
"fullPage": true
}
]
}

3. Extract text from a JavaScript-rendered page

{
"startUrl": "https://quotes.toscrape.com/js/",
"actions": [
{
"type": "waitForSelector",
"locator": { "by": "css", "value": ".quote" }
},
{
"type": "extractText",
"locator": { "by": "css", "value": ".quote .text", "index": 0 }
}
]
}

When to use this Actor

Use it when you want to:

  • run scheduled browser smoke tests without maintaining a Playwright codebase;
  • automate a deterministic public form or UI flow;
  • extract a small number of fields from JavaScript-rendered pages;
  • verify text or URL assertions in CI, n8n, Make, or API workflows;
  • capture screenshots as run artifacts;
  • generate browser workflows programmatically from a stable JSON contract.

For large recursive crawling jobs, use a crawler-oriented Actor instead. For natural-language, non-deterministic browser goals, use an AI browser agent rather than this deterministic runner.

Supported actions

ActionRequired fieldsWhat it does
gotourlNavigate to another public HTTP(S) URL.
waitForSelectorlocatorWait for an element state: visible, hidden, attached, or detached.
clicklocatorClick one element.
filllocator, valueFill an input-like element.
presslocator, keyPress a key/chord on an element.
selectOptionlocator, value or valuesSelect one or more option values.
extractTextlocatorReturn element text, capped at 200,000 characters.
extractAttributelocator, attributeReturn an HTML attribute value.
textContainslocator, expectedPass only if element text contains the expected substring.
urlContainsexpectedPass only if the current URL contains the expected substring.
screenshotnoneSave a PNG screenshot to the default key-value store.
waitdurationMsWait for a bounded duration.

timeoutMs can override the default timeout for an individual action where relevant. goto also supports waitUntil values load, domcontentloaded, networkidle, and commit.

Playwright locator model

The Actor supports both CSS selectors and Playwright's user-facing semantic locators:

{ "by": "css", "value": "article h2" }
{ "by": "text", "value": "Continue", "exact": true }
{ "by": "role", "value": "button", "name": "Submit", "exact": true }
{ "by": "label", "value": "Email" }
{ "by": "placeholder", "value": "Search" }
{ "by": "testId", "value": "checkout-button" }

If a locator intentionally matches several elements, use zero-based index:

{
"by": "css",
"value": ".product-card .title",
"index": 2
}

Playwright strictness is preserved. Prefer semantic locators or stable attributes over brittle positional CSS selectors.

Output

The default dataset contains one row for each executed workflow step, followed by a final summary row. This makes it easy for downstream tools to inspect individual actions without unpacking a large nested audit object.

Example step row:

{
"rowType": "step",
"actorVersion": "0.1.0",
"timestamp": "2026-09-06T06:00:00.000Z",
"inputHash": "...",
"stepIndex": 1,
"action": "extractText",
"passed": true,
"currentUrl": "https://example.com/",
"value": "Example Domain",
"durationMs": 12
}

Example summary row:

{
"rowType": "summary",
"actorVersion": "0.1.0",
"timestamp": "2026-09-06T06:00:01.000Z",
"inputHash": "...",
"passed": true,
"currentUrl": "https://example.com/",
"durationMs": 821,
"totalSteps": 3,
"passedSteps": 3,
"failedSteps": 0,
"chargedActions": 3,
"chargeLimitReached": false,
"blockedEgress": 0,
"transferredBytes": 45123,
"warnings": []
}

Screenshots are stored as PNG records in the default key-value store and referenced from the corresponding step row.

Stop or continue after an error

stopOnError defaults to true.

  • true: stop after the first failed action and write the final summary.
  • false: record the failed step and continue with later actions when possible. This is useful when you intentionally place a screenshot action after an assertion so you still capture evidence if the assertion fails.

Failed workflow actions are not charged as successful browser actions.

Pricing

The launch billing model is Pay Per Event with the primary event:

  • browser-action: $0.004 per successfully completed action ($4 per 1,000 successful actions).

Examples for the browser-action portion of a run:

Successful actionsBrowser-action charge
5$0.020
20$0.080
100$0.400

The Actor checks the run's maximum charge limit before starting each billable action and stops before the next action when no charge budget remains. Apify may separately show its standard Actor-start event according to the Actor's pricing configuration.

Safety and limits

The MVP intentionally keeps a narrow security boundary:

  • public http:// and https:// destinations only;
  • ports 80 and 443 only;
  • localhost, loopback, RFC1918/private, link-local, metadata, multicast, documentation/reserved ranges, and non-public IPv6 ranges are blocked;
  • hostname resolution is checked before connecting, and mixed public/private DNS answers are rejected;
  • redirects and browser subresources remain behind the same validating local egress proxy;
  • URL-embedded credentials are rejected;
  • service workers are blocked, downloads are disabled, uncontrolled popups are closed, QUIC is disabled, and non-proxied WebRTC UDP is restricted;
  • maximum 100 actions per run;
  • maximum 60 seconds per action and 180 seconds per workflow;
  • maximum 300 proxied browser connections and 64 MiB aggregate browser transfer per run;
  • screenshot artifacts are capped at 8 MiB;
  • extracted strings are capped at 200,000 characters per action;
  • arbitrary user-supplied JavaScript/Node.js execution is not supported.

This Actor is not positioned as a CAPTCHA bypass or access-control evasion tool. A 403, 429, CAPTCHA, robots/terms restriction, or target-specific anti-bot rule should be treated as a target limitation.

Do not put secrets into workflow action values

The MVP is optimized for public/login-free flows. Actor input is persisted by the Apify run, so do not place passwords, API keys, session cookies, authorization headers, or other secrets inside actions[].value or URLs. Query parameters with common secret-like names are redacted from result URLs, but that does not turn the input itself into a secret store.

Proxy configuration

proxyConfiguration uses Apify's standard proxy input editor. You can disable proxies, use Apify Proxy if available to your account, or provide supported custom HTTP(S) proxies.

The upstream proxy does not replace the Actor's destination safety checks: public-destination validation remains in front of browser egress.

Reliability notes

Browser automation depends on target HTML, network availability, and site behavior. Use stable selectors, explicit assertions, and sensible timeouts. A page that changes its markup can cause a selector to fail even when the Actor runtime is healthy.

API, n8n, and Make

The Actor input is deliberately JSON-first. Typical integrations create an input object with startUrl and actions, run the Actor, then consume default dataset rows and optional screenshot artifacts.

For n8n or Make, map upstream fields into the JSON actions array and branch on the final dataset row where rowType is summary and passed is true or false.

For direct API usage, use the standard Apify Actor run endpoints generated on the Actor's API tab after publication.

Browser automation family

ToolChoose it when...
Puppeteer Browser Automation RunnerYou want simple Chrome/Puppeteer-style deterministic workflows.
Selenium Browser Automation RunnerYou think in WebDriver locators or maintain Selenium-based automation knowledge.
Chrome DevTools Automation RunnerYou need low-level CDP commands, rendering/emulation controls, or diagnostics.
Playwright Browser Automation RunnerYou want modern deterministic workflows with Playwright semantic locators and step-by-step dataset rows.
Browser Network & HAR Capture InspectorYou need XHR/fetch/API diagnostics and HAR export.
Browser Use AI Task RunnerYou want natural-language goals and can accept non-deterministic AI-driven actions.
Playwright MCP Browser Automation ServerYou need a live browser controlled one tool call at a time by an MCP agent.

The last three are separate product shapes in the developer-automation portfolio; use the product that matches the job rather than choosing by framework name alone.

Support

When reporting an issue, include:

  • the smallest public URL that reproduces it;
  • the minimal action list;
  • the failed stepIndex, action, errorCode, and errorMessage;
  • whether a proxy was enabled;
  • the Actor run ID.

Never post passwords, API keys, cookies, proxy credentials, or other secrets in an issue.