PageSourceSearch

https://webscrape.ai/_nuxt/DZ4meWzx.js

js webscrape.ai collected 2026-09-25 21:52:39 UTC 12,819 bytes, 19 lines download raw bytes

1import{v as g,aE as y,O as l,R as s,ab as d,$ as u,a0 as b,a3 as e,A as r,Q as i,a6 as k,y as c,a7 as f,a1 as p,_}from"./DGTsr8sy.js";import{u as q}from"./4tnHmjdT.js";import{u as S,d as R,a as A}from"./CC1iKak1.js";const x={class:"pd-page"},P={class:"pd-hero"},I={class:"pd-hero-inner"},B={class:"pd-hero-copy"},E={class:"pd-bullets"},N={class:"pd-ctas"},T={class:"pd-hero-visual"},O={class:"pd-term"},C={class:"pd-browser"},$={class:"pd-browser-bar"},H={class:"pd-browser-nav"},L={class:"pd-browser-body"},X={class:"pd-brow-row is-target"},K={class:"pd-brow-more"},Y={class:"pd-section"},z={class:"pd-steps"},D={class:"pd-step-join"},F={class:"pd-code-grid"},J={class:"pd-term"},Q={class:"pd-term-tabs"},V={class:"pd-tab active"},W={class:"pd-term"},G={class:"pd-term-tabs"},j={class:"pd-tab active"},M={class:"pd-section"},U={class:"pd-caps"},Z={class:"pd-cap-icon"},ss={class:"pd-cap-title"},as={class:"pd-cap-desc"},es={class:"pd-section"},ts={class:"pd-links"},ns={class:"pd-link-icon"},is={class:"pd-link-body"},ds={class:"pd-link-name"},os={class:"pd-link-desc"},rs={class:"pd-final"},ps={class:"pd-final-term"},ls={class:"pd-final-body"},cs={class:"pd-ctas pd-ctas-center"},us=g({__name:"smartbrowse",setup(bs){const{gated:v}=q();y({title:"Browser Automation Recipes API — SmartBrowse | Webscrape AI",meta:[{name:"description",content:"Record a browser recipe once — clicks, logins, pagination — then replay it as an API. Real Chrome per run, drift-tolerant selectors, cron schedules and webhooks."},{property:"og:title",content:"SmartBrowse — record a recipe, replay as an API"},{property:"og:description",content:"Author interactions visually in a real browser, save them as a recipe, and dispatch runs over the API or on a schedule."}]}),S([R(),A({itemListElement:[{name:"Home",item:"/"},{name:"SmartBrowse",item:"/smartbrowse"}]})]);const m=[{icon:"i-lucide-mouse-pointer-click",label:"Record clicks, logins & pagination visually"},{icon:"i-lucide-repeat",label:"Replay any recipe as a single API call"},{icon:"i-lucide-zap",label:"2 credits per page, charged on success only"}],w=[{icon:"i-lucide-mouse-pointer-click",title:"Record, don’t script",desc:"Author a recipe by clicking through the page in a live browser. SmartBrowse synthesizes the selectors from what you picked — you never hand-write one."},{icon:"i-lucide-repeat",title:"Replay as an API",desc:"Every saved recipe gets a run endpoint. POST to it, get a run_id back immediately, then poll for the result. Same recipe, any time."},{icon:"i-lucide-globe",title:"A real browser per run",desc:v?"Each run drives a fresh, real Chrome — full JavaScript and real rendering — so a recipe behaves exactly as it did while you were recording it.":"Eac
1h run drives a fresh, real stealth Chrome — full JavaScript and real rendering — so a recipe behaves exactly as it did while you were recording it."},{icon:"i-lucide-list-ordered",title:"Pagination & action chains",desc:"Recipes follow next-page links and replay your recorded action chain, collecting items across every page into one merged result."},{icon:"i-lucide-git-branch",title:"Drift-tolerant replay",desc:"Replay is CSS-first with a structural fallback, so a recipe keeps returning data even when the page shifts underneath it."},{icon:"i-lucide-calendar-clock",title:"Schedules & webhooks",desc:"Attach a cron schedule to any recipe and have results delivered to your webhook on completion — no polling loop to babysit."}],h=[{to:"/smartscraper",icon:"i-lucide-sparkles",name:"SmartScraper",desc:"One static page, no interaction? Describe the fields and get JSON in a single call."},{to:"/scrape",icon:"picon:thunderbolt",name:"Scrape",desc:"Just need the raw page as HTML or Markdown? Fetch it without a browser."},{to:"/playground",icon:"i-lucide-play",name:"Playground",desc:"Try single-page extraction live in the browser — no signup needed."},{to:"/pricing",icon:"i-lucide-credit-card",name:"Pricing",desc:"2 credits per extracted page. Start with 500 free credits, no card."}];return(vs,a)=>{const t=f,o=k;return c(),l("div",x,[s("section",P,[s("div",I,[s("div",B,[a[2]||(a[2]=d('<span class="brand-eyebrow" data-v-771a26b0>// smartbrowse</span><h1 class="pd-title" data-v-771a26b0> Record it once.<br data-v-771a26b0><span class="pd-accent" data-v-771a26b0>Replay it as an API</span>. </h1><p class="pd-lead" data-v-771a26b0> Some data lives behind a click, a login, or a next-page button. SmartBrowse lets you record that path once in a real browser — a <strong class="pd-strong" data-v-771a26b0>recipe</strong> — then dispatch it as an API call whenever you need fresh data. </p>',3)),s("ul",E,[(c(),l(u,null,b(m,n=>s("li",{key:n.label},[e(t,{name:n.icon,class:"pd-bullet-icon"},null,8,["name"]),s("span",null,p(n.label),1)])),64))]),s("div",N,[e(o,{to:"/app/signup",class:"pd-btn pd-btn-primary"},{default:r(()=>[e(t,{name:"i-lucide-mouse-pointer-click",class:"pd-btn-icon"}),a[0]||(a[0]=i(" Record a recipe ",-1)),e(t,{name:"i-lucide-arrow-right",class:"pd-btn-arrow"})]),_:1}),e(o,{to:"/docs",external:"",class:"pd-btn pd-btn-ghost"},{default:r(()=>[a[1]||(a[1]=i(" Read the docs ",-1)),e(t,{name:"i-lucide-arrow-up-right",class:"pd-btn-arrow"})]),_:1})])]),s("div",T,[s("div",O,[a[10]||(a[10]=d('<div class="pd-term-bar" data-v-771a26b0><span class="pd-dots" data-v-771a26b0><i data-v-771a26b0></i><i data-v-771a26b0></i><i data-v-771a26b0></i></span><span class="pd-term-title" data-v-771a26b0>~/wsai — smartbrowse studio</span><span class="pd-spacer" data-v-771a26b0></span><span class="pd-rec" data-v-771a26b0><span class="pd-rec-dot" data-v-771a26b0></span>rec</span></div>',1)),s("div",C,[s("div",$,[s("span",H,[e(t,{name:"i-lucide-chevron-left"}),e(t,{name:"i-lucide-chevron-right"})]),a[3]||(a[3]=s("span",{class:"pd-urlbar"},"example.com/products",-1))]),s("div",L,[a[8]||(a[8]=s("div",{class:"pd-brow-row"},[s("span",{class:"pd-brow-skel"}),s("span",{class:"pd-brow-price"},"$129")],-1)),s("div",X,[a[4]||(a[4]=s("span",{class:"pd-brow-skel"},null,-1)),a[5]||(a[5]=s("span",{class:"pd-brow-price"},"$89",-1)),e(t,{name:"i-lucide-mouse-pointer-click",class:"pd-brow-cursor"}),a[6]||(a[6]=s("span",{class:"pd-brow-ring","aria-hidden":"true"},null,-1))]),a[9]||(a[9]=s("div",{class:"pd-brow-row"},[s("span",{class:"pd-brow-skel"}),s("span",{class:"pd-brow-price"},"$64")],-1)),s("div",K,[e(t,{name:"i-lucide-arrow-down",class:"pd-brow-more-icon"}),a[7]||(a[7]=i("next page",-1))])])]),a[11]||(a[11]=s("div",{class:"pd-browser-foot"},[s("span",{class:"pd-b"},"▸"),i(" recipe "),s("span",{class:"pd-flow-name"},'"product prices"'),i(" · 3 fields · replay ready ")],-1))])])])]),a[32]||(a[32]=s("div",{class:"section-glow-line"},null,-1)),s("section",Y,[a[24]||(a[24]=s("div",{class:"pd-sec-head"},[s("span",{class:"brand-eyebrow"},"// how recipes work"),s("h2",{class:"pd-sec-title"},"Author in the studio. Replay over HTTP."),s("p",{class:"pd-sec-desc"}," Recording happens visually in the dashboard studio. Once a recipe is saved, it has a run endpoint you can call from anywhere. ")],-1)),s("div",z,[a[12]||(a[12]=d('<div class="pd-step" data-v-771a26b0><span class="pd-step-num" data-v-771a26b0>1</span><div class="pd-step-text" data-v-771a26b0><h3 class="pd-step-title" data-v-771a26b0>Record a recipe</h3><p class="pd-step-desc" data-v-771a26b0>Click through the page in the live studio browser. SmartBrowse captures the fields and actions and saves a reusable recipe.</p></div></div>',1)),s("div",D,[e(t,{name:"i-lucide-arrow-right"})]),a[13]||(a[13]=d('<div class="pd-step" data-v-771a26b0><span class="pd-step-num" data-v-771a26b0>2</span><div class="pd-step-text" data-v-771a26b0><h3 class="pd-step-title" data-v-771a26b0>Replay via API</h3><p class="pd-step-desc" data-v-771a26b0>
1Dispatch a run against the saved recipe. It returns a run_id straight away; poll for the merged result or wait for the webhook.</p></div></div>',1))]),s("div",F,[s("div",J,[a[17]||(a[17]=s("div",{class:"pd-term-bar"},[s("span",{class:"pd-dots"},[s("i"),s("i"),s("i")]),s("span",{class:"pd-term-title"},"~/wsai — replay")],-1)),s("div",Q,[s("span",V,[e(t,{name:"i-simple-icons-curl",class:"pd-tab-icon"}),a[14]||(a[14]=i("curl",-1))]),a[15]||(a[15]=s("span",{class:"pd-tab-spacer"},null,-1)),a[16]||(a[16]=s("span",{class:"pd-tab-meta"},"POST /v1/smartbrowse/recipes/:id/run",-1))]),a[18]||(a[18]=d(`<div class="pd-term-body" data-v-771a26b0><pre class="pd-code" data-v-771a26b0><span class="c" data-v-771a26b0># replay a saved recipe — returns a run_id at once</span>
2<span class="kw" data-v-771a26b0>curl</span> -X <span class="m" data-v-771a26b0>POST</span> \\
3  <span class="u" data-v-771a26b0>https://api.webscrape.ai/v1/smartbrowse/recipes/m3Yc2tFvN8q/run</span> \\
4  -H <span class="s" data-v-771a26b0>&quot;X-API-Key: $WSG_KEY&quot;</span>
5
6<span class="c" data-v-771a26b0># then poll for the result</span>
7<span class="kw" data-v-771a26b0>curl</span> <span class="u" data-v-771a26b0>https://api.webscrape.ai/v1/smartbrowse/runs/k7Xb9dRmQ2p</span> \\
8  -H <span class="s" data-v-771a26b0>&quot;X-API-Key: $WSG_KEY&quot;</span></pre></div>`,1))]),s("div",W,[a[22]||(a[22]=s("div",{class:"pd-term-bar"},[s("span",{class:"pd-dots"},[s("i"),s("i"),s("i")]),s("span",{class:"pd-term-title"},"~/wsai — response")],-1)),s("div",G,[s("span",j,[e(t,{name:"i-lucide-braces",class:"pd-tab-icon"}),a[19]||(a[19]=i("response.json",-1))]),a[20]||(a[20]=s("span",{class:"pd-tab-spacer"},null,-1)),a[21]||(a[21]=s("span",{class:"pd-status-pill"},"202 Accepted",-1))]),a[23]||(a[23]=d(`<div class="pd-term-body" data-v-771a26b0><pre class="pd-code" data-v-771a26b0><span class="c" data-v-771a26b0>// dispatch returns a run to poll</span>
9{
10  <span class="k" data-v-771a26b0>&quot;status&quot;</span>: <span class="s" data-v-771a26b0>&quot;queued&quot;</span>,
11  <span class="k" data-v-771a26b0>&quot;data&quot;</span>: {
12    <span class="k" data-v-771a26b0>&quot;run_id&quot;</span>: <span class="s" data-v-771a26b0>&quot;k7Xb9dRmQ2p&quot;</span>,
13    <span class="k" data-v-771a26b0>&quot;recipe_id&quot;</span>: <span class="s" data-v-771a26b0>&quot;m3Yc2tFvN8q&quot;</span>,
14    <span class="k" data-v-771a26b0>&quot;run_status&quot;</span>: <span class="s" data-v-771a26b0>&quot;running&quot;</span>,
15    <span class="k" data-v-771a26b0>&quot;poll_url&quot;</span>: <span class="u" data-v-771a26b0>&quot;/v1/smartbrowse/runs/k7Xb9dRmQ2p&quot;</span>,
16    <span class="k" data-v-771a26b0>&quot;created_at&quot;</span>: <span class="s" data-v-771a26b0>&quot;2026-07-06T12:00:00Z&quot;</span>
17  },
18  <span class="k" data-v-771a26b0>&quot;request_id&quot;</span>: <span class="s" data-v-771a26b0>&quot;req_aB3xY9Kp&quot;</span>
19}</pre></div>`,1))])])]),a[33]||(a[33]=s("div",{class:"section-glow-line"},null,-1)),s("section",M,[a[25]||(a[25]=s("div",{class:"pd-sec-head"},[s("span",{class:"brand-eyebrow"},"// capabilities"),s("h2",{class:"pd-sec-title"},"Interaction, captured and repeatable"),s("p",{class:"pd-sec-desc"}," Everything a headless-browser script does — minus the script, the drift, and the maintenance. ")],-1)),s("div",U,[(c(),l(u,null,b(w,n=>s("div",{key:n.title,class:"pd-cap"},[s("span",Z,[e(t,{name:n.icon,class:"size-5"},null,8,["name"])]),s("h3",ss,p(n.title),1),s("p",as,p(n.desc),1)])),64))])]),a[34]||(a[34]=s("div",{class:"section-glow-line"},null,-1)),s("section",es,[a[26]||(a[26]=s("div",{class:"pd-sec-head"},[s("span",{class:"brand-eyebrow"},"// which endpoint"),s("h2",{class:"pd-sec-title"},"Not sure you need a browser?")],-1)),s("div",ts,[(c(),l(u,null,b(h,n=>e(o,{key:n.to,to:n.to,class:"pd-link-card"},{default:r(()=>[s("span",ns,[e(t,{name:n.icon,class:"size-4"},null,8,["name"])]),s("span",is,[s("span",ds,[i(p(n.name),1),e(t,{name:"i-lucide-arrow-up-right",class:"pd-link-arrow"})]),s("span",os,p(n.desc),1)])]),_:2},1032,["to"])),64))])]),a[35]||(a[35]=s("div",{class:"section-glow-line"},null,-1)),s("section",rs,[s("div",ps,[a[31]||(a[31]=s("div",{class:"pd-term-bar"},[s("span",{class:"pd-dots"},[s("i"),s("i"),s("i")]),s("span",{class:"pd-term-title"},"~/wsai — get started")],-1)),s("div",ls,[a[29]||(a[29]=s("h2",{class:"pd-final-title"},"Record your first recipe.",-1)),a[30]||(a[30]=s("p",{class:"pd-final-desc"}," Sign up free and open the studio — 500 credits on the house, no card required. ",-1)),s("div",cs,[e(o,{to:"/app/signup",class:"pd-btn pd-btn-primary"},{default:r(()=>[e(t,{name:"i-lucide-mouse-pointer-click",class:"pd-btn-icon"}),a[27]||(a[27]=i(" Record a recipe ",-1)),e(t,{name:"i-lucide-arrow-right",class:"pd-btn-arrow"})]),_:1}),e(o,{to:"/pricing",class:"pd-btn pd-btn-ghost"},{default:r(()=>[a[28]||(a[28]=i(" See pricing ",-1)),e(t,{name:"i-lucide-arrow-right",class:"pd-btn-arrow"})]),_:1})])])])])])}}}),gs=_(us,[["__scopeId","data-v-771a26b0"]]);export{gs as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.