Apps/Google Chrome/Execute actions in the browser
Google Chrome
Google Chrome Action

Execute actions in the browser

Interact with the browser by executing a sequence of specific actions.

200+ apps to connect·Tested & maintained tasks·Human support in English & Spanish

In detail

What it does and what it's for

How it works

How it fits in an automated task

A Botize task pairs a trigger with one or more actions. This piece is one of them.

Pick a trigger

The event that starts the task, from this app or any other.

This action runs

Botize performs it automatically using the data the trigger delivers.

Turn it on and forget it

The task runs on its own from then on. If something's off, tweak it or we'll help you.

Already using Botize?

Connect your Google Chrome

Add a profile to use it in your tasks. There's a step-by-step guide if you need it.

Add a new profile Step-by-step guide

Your profiles

Your connected Google Chrome accounts

These are the accounts you already have linked to Botize, ready to use in your tasks. You can reconnect or remove any of them.

Setup

Customization options

Fields you can adjust when using it in your automation.

Control Google Chrome from Botize by sending a recipe: a JSON list of steps that the extension will play in order on the connected tab.

This page documents the full recipe format: how to build one, every action available, and how elements are matched on the page.

Recipe format

A recipe is a JSON object with a single steps array:

{
  "steps": [
    { "action": "navigate", "url": "https://example.com" },
    { "action": "click", "role": "button", "name": "Accept" }
  ]
}

Steps run sequentially. If any step fails, the recipe stops and reports the error back to Botize.

observe — get the resulting page state back automatically

An optional top-level observe key (sibling of steps) makes the recipe return a compact snapshot of what's actionable now once every step has run and the page has settled — so a recipe that only acts (e.g. a lone click) comes back self-describing instead of blind, with no separate get_aria_tree step or follow-up call. Especially handy for recipes driven by an AI assistant.

{
  "observe": "interactive",
  "steps": [
    { "action": "click", "role": "button", "name": "Menu" }
  ]
}
ValueMeaning
"interactive"Snapshot of interactive elements only (buttons, links, inputs…), each with role + name + backendDOMNodeId. Hard-capped, so it stays small.
"all"Same but keeps the full filtered tree, not just interactive roles.
omitted / "off"No snapshot — unchanged behaviour.

The snapshot is returned in the same Data from Browser output as get_aria_tree. If the recipe already contains an explicit get_aria_tree step, that wins and observe is ignored. It's best-effort: if the snapshot can't be captured it's silently skipped and never fails the job.

Recording a recipe

The fastest way to build a recipe is to record it:

  1. Open the Botize extension popup on the tab you want to automate.
  2. Click ● REC and perform the actions (click, type, navigate…).
  3. Click â–  STOP to finish.
  4. Click ↓ Export to download the recipe as JSON.

You can then tweak the JSON manually or import it again with ↑ Import.

How elements are matched

Actions that interact with the page (click, type, paste) locate elements using the ARIA accessibility tree, not CSS selectors. This makes recipes resilient to cosmetic HTML changes.

Each interactive step uses these fields to find its target:

FieldDescription
roleThe ARIA role of the element (button, link, textbox, checkbox…).
nameThe accessible name — usually the visible label or aria-label.
nameStartsWith(optional) Prefix match on the name. Useful when the name contains dynamic data (user names, counters, timestamps). When set, name is ignored.
parentRole(optional) Narrows the search to elements inside a specific parent role.
parentName(optional) Combined with parentRole, requires the parent to also match.
nth(optional) Zero-based index to pick the Nth match instead of the first. Use it when several elements share the same role and name — e.g. two unlabeled inputs in a login form: nth: 0 for the first, nth: 1 for the second.
backendDOMNodeId(optional) Skip ARIA matching entirely and act on this exact node id — the same id a query result or a get_aria_tree node reports. When set, role/name/etc. are ignored.

When several elements match, the first one in document order wins — so on a list of followers, a click step with nameStartsWith: "Follow" will always target the first follower. Set nth to target a specific one.

backendDOMNodeId is only valid within the tab/session that produced it. It's a shortcut for reacting to a node you just saw in an earlier step of the same recipe (or the same live tab, for the extension backend) — not a stable identifier to store and reuse later. On the cloud/Lambda backend in particular, every recipe launches a brand-new headless browser: a backendDOMNodeId (or an assumption that the previous page is still loaded) from a prior call is meaningless in the next one. A recipe step with neither role nor backendDOMNodeId fails immediately with a clear error instead of hanging.

Navigation actions

navigate

Load a URL in the current tab and wait for it to finish loading.

ParameterTypeRequiredDescription
urlstringyesThe URL to open.
{ "action": "navigate", "url": "https://example.com" }

wait

Pause the recipe for a fixed amount of time.

ParameterTypeRequiredDescription
msnumbernoMilliseconds to wait. Default: 1000.
{ "action": "wait", "ms": 2500 }

Interaction actions

click

Click on an element located via ARIA.

ParameterTypeRequiredDescription
rolestringyesARIA role of the target.
namestringyes*Accessible name. *Optional when using nameStartsWith.
nameStartsWithstringnoPrefix match for the name.
parentRolestringnoRestrict to a parent role.
parentNamestringnoRestrict to a parent name.
wait_for_navigationbooleannoIf true, waits for the page to reload after the click.
delaynumbernoDelay before executing the step, in ms.
{ "action": "click", "role": "button", "name": "Add to cart" }

type

Type text into an input or textbox. The field must already have focus — usually preceded by a click step on the input.

ParameterTypeRequiredDescription
rolestringyesARIA role of the input (textbox, searchbox, combobox…).
namestringyesAccessible name of the input.
textstringyesText to type.
parentRole, parentName, nameStartsWithnoSame matching fields as click.
{ "action": "type", "role": "searchbox", "name": "Search", "text": "botize" }

paste

Paste a file (image, document…) into a file-drop area or editor that accepts paste events.

ParameterTypeRequiredDescription
role, name, …Same matching fields as click.
file_urlstringyesPublic URL of the file to paste.
{
  "action": "paste",
  "role": "textbox",
  "name": "Message",
  "file_url": "https://cdn.example.com/photo.jpg"
}

Inspection actions

query

Inspect the ARIA tree to see what a matcher would select without performing any action. Useful when authoring a recipe to verify selectors before committing to a click/type/extract, or when debugging why an existing recipe stopped matching.

Read-only and side-effect-free: a query step never alters the page or the recipe state — it just reports what the matcher resolves to right now.

ParameterTypeRequiredDescription
rolestringyesARIA role to look for.
namestringnoAccessible name. Empty/omitted means "match any name" — combined with role returns the first node of that role in document order.
nameStartsWithstringnoPrefix match for the name; takes precedence over name.
parentRole, parentNamestringnoSame matching fields as click.
limitnumbernoMax matches to return in matches array. Default 1 (only the first match in match). Set to e.g. 10 to inspect a list.
labelstringnoOptional tag returned in the response, useful when a recipe contains several query steps.

The response is appended to data.query (one entry per query step, in recipe order):

{
  "label": null,
  "match": {
    "role": "gridcell",
    "name": "Item label",
    "backendDOMNodeId": 1234,
    "children_count": 1,
    "parent": { "role": "row", "name": "Item label" }
  },
  "total_matches": 3
}

When the matcher finds nothing, match is null, total_matches is 0, and a diagnostics payload is added with hints — count of nodes that have the role, count of nodes that match the name, and a sample of nodes with the role to help understand what is actually in the tree.

{
  "match": null,
  "total_matches": 0,
  "diagnostics": {
    "nodes_with_role": 8,
    "nodes_with_matching_name": 0,
    "sample_nodes_with_role": [
      { "role": "gridcell", "name": "First item..." },
      { "role": "gridcell", "name": "Second item..." }
    ]
  }
}
{ "action": "query", "role": "gridcell", "name": "" }

Data extraction actions

Extraction actions populate the Data from Browser output returned to Botize. You can combine several in the same recipe.

get_aria_tree

Return the accessibility tree of the current page. Ideal for letting an AI understand the page structure.

ParameterTypeDefaultDescription
filterstringinteractiveinteractive keeps only actionable nodes (buttons, links, inputs…). all keeps everything.
include_headingsbooleanfalseInclude heading nodes even in interactive mode.
max_nodesnumber500Hard cap to prevent huge payloads.
{ "action": "get_aria_tree", "filter": "interactive", "include_headings": true }

get_landmark_text

Extract the visible text of the page grouped by ARIA landmark (main, navigation, banner, contentinfo, complementary, search, region). Best suited for product pages, articles and content-heavy pages.

ParameterTypeDefaultDescription
sectionsstring[]allLimit the output to specific landmarks.
include_linksbooleanfalseInclude the list of links inside each landmark.
include_imagesbooleanfalseInclude the list of images inside each landmark.
{
  "action": "get_landmark_text",
  "sections": ["main"],
  "include_links": true,
  "include_images": true
}

extract_repeating_items

(Renamed from get_page_elements on 2026-07-07 — the old name read as "get all elements on the page", which repeatedly misled callers into expecting general page content instead of its actual, narrower job.)

Extract repeating items (search results, product cards, posts…) grouped by their semantic section and parent. It only picks up nodes whose ARIA role exactly matches item_role (default listitem, i.e. <li>) — it does not capture inputs, buttons, or standalone links that aren't part of a repeating list. If a page returns nothing, first run get_aria_tree to see what role its repeating content actually uses, then pass that as item_role (e.g. "article" for a blog, "row" for a table). For a single input/button/link, use get_aria_tree or get_landmark_text instead.

ParameterTypeDefaultDescription
item_rolestringlistitemARIA role of the items to extract.
sectionsstring[]allLimit to specific landmarks.
pathsstring[]—Narrow the output to specific branches, e.g. "main > list_results".
{ "action": "extract_repeating_items", "item_role": "listitem", "sections": ["main"] }

Each extracted item includes its text, outbound links and images.

screenshot

Capture a JPEG screenshot of the current tab.

ParameterTypeDefaultDescription
full_pagebooleanfalseIf true, captures the full scrollable page instead of just the viewport.
max_widthnumber—Downscale the capture so its width is at most this many pixels (keeps aspect ratio). Omit for original size.
qualitynumber75JPEG quality, 10–100. Lower means a lighter file.
{ "action": "screenshot", "max_width": 1024, "quality": 40 }

Lower resolution/quality makes captures lighter and faster — ideal when an AI assistant reads the screen rather than a person keeping the image. Both max_width and quality can also be set once on the step (the Screenshot resolution / Screenshot quality fields of this action's form) so they apply to every screenshot in the recipe; a value on the action itself overrides that default.

The screenshot is returned in the Screenshot URL output.

extract

Extract a single value (text or image) from the page. Typically generated by clicking Extract on the recorder; manual use is uncommon.

ParameterTypeDescription
namestringName of the variable to store the value under.
xpathsstring[]XPath candidates. The extension picks the value confirmed by most paths.
isImagebooleanIf true, extracts src instead of text.
{ "action": "extract", "name": "price", "xpaths": ["//span[@data-price]"] }

get_cookies

Return the cookies of the current tab. Read via the debugger protocol, so it also includes httpOnly cookies (session tokens) that document.cookie can't see. Mainly useful for capturing a login session to reuse in later HTTP calls.

ParameterTypeDefaultDescription
namesstring[]allOnly return cookies whose name is in this list. Omit to return every cookie.

The cookies are returned in the Data from Browser output under cookies, each as { name, value, domain, path, secure, httpOnly, expires }.

{ "action": "get_cookies", "names": ["JSESSIONID", "cd-token", "LB"] }

Example: capture a login session

{
  "steps": [
    { "action": "navigate", "url": "https://example.com/login" },
    { "action": "type",  "role": "textbox", "name": "User",     "text": "me@example.com" },
    { "action": "type",  "role": "textbox", "name": "Password", "text": "••••••" },
    { "action": "click", "role": "button",  "name": "Sign in", "wait_for_navigation": true },
    { "action": "get_cookies" }
  ]
}

Example: product page scrape

{
  "steps": [
    { "action": "navigate", "url": "https://example-shop.com/product/123" },
    {
      "action": "get_landmark_text",
      "sections": ["main"],
      "include_images": true
    },
    { "action": "screenshot" }
  ]
}

Example: click the first follow-back button on X

{
  "steps": [
    { "action": "navigate", "url": "https://x.com/your-handle/followers" },
    {
      "action": "click",
      "role": "button",
      "nameStartsWith": "Follow back",
      "parentRole": "generic",
      "parentName": "Follow back"
    }
  ]
}

Output data

Information provided

When executed, this operation delivers the following data, which can be used in the same automatic task.

  • Tags

  • URL {{url}}

    URL

  • Data from Browser {{browser_data}}

    Data from Browser

  • Screenshot URL {{screenshot_url}}

    Public URL of the screenshot taken by the browser (if a screenshot action was included in the recipe)

  • Status Code {{status_code}}

    Status Code

Learn by watching

Video tutorials

Short videos where you watch a real task being built from start to finish.

Need a hand?

Real people behind it

Email us

info@botize.com
Monday to Friday from 7 a.m. to 1 p.m. (Spain).

Message us on Telegram

t.me/botize
Monday to Friday from 7 a.m. to 1 p.m. (Spain).

Come with an idea.
Leave with an automation.

Create your first task in minutes. Do it once and forget about it forever.

Start automating