PhantomJsCloud example pages

Use these pages to test PhantomJsCloud features. Each page has a try it request: POST its JSON to https://phantomjscloud.com/api/browser/v2/a-demo-key-with-low-quota-per-ip-address/, or click run to open it in your browser.

Renders with the demo key may use scripts, request headers, cookies, login details, inline content and the other limited request fields only on these example pages, at https://examples.phantomjscloud.com/examples/ or https://phantomjscloud.com/examples/, and every request of such a render must stay on these pages. Pages marked as loading other sites refuse demo-key renders that use a limited field; a plain render of them works. To use the limited fields on other sites, create a free account at dashboard.phantomjscloud.com and use its API key; free accounts (accounts holding less than 0.05 credits) may also be limited the same way, while accounts holding 0.05 credits or more never are.

Basic pages

PageWhat it shows and a try-it request
basic.htmltitle, heading, a #target box, text, an image and a script (#img-loaded and #script-ran appear when they load)
{"url":"https://examples.phantomjscloud.com/examples/corpus/basic.html","renderType":"png","renderSettings":{"selector":"#target"}}
simple.htmla minimal static page with links to the helpers
{"url":"https://examples.phantomjscloud.com/examples/corpus/simple.html","renderType":"pdf"}
example.com.htmla copy of example.com for scripts, overseerScript and queryJson
{"url":"https://examples.phantomjscloud.com/examples/corpus/example.com.html","renderType":"automation","overseerScript":"await page.waitForNavigation(); page.render.content(); await page.render.screenshot();"}
redirect.htmlredirects to simple.html with JavaScript
{"url":"https://examples.phantomjscloud.com/examples/corpus/redirect.html","renderType":"plainText"}
flower.pngan image (renderSettings.selector "img")
{"url":"https://examples.phantomjscloud.com/examples/corpus/flower.png","renderType":"png","renderSettings":{"selector":"img"}}

Timing and waiting

PageWhat it shows and a try-it request
slow-load.htmlits load event fires about ?ms= milliseconds late (resourceWait, maxWait, waitForNavigation)
{"url":"https://examples.phantomjscloud.com/examples/corpus/slow-load.html?ms=3000","renderType":"plainText","requestSettings":{"maxWait":20000}}
late-element.htmla .late element appears ?ms= after load (waitForSelector, manualWait/done)
{"url":"https://examples.phantomjscloud.com/examples/corpus/late-element.html?ms=2000","renderType":"png","overseerScript":"page.manualWait(); await page.waitForSelector('.late'); page.done();"}
ajax.htmlloads data while rendering (doneWhen, passThroughStatusCode); it also loads files from other sites
{"url":"https://examples.phantomjscloud.com/examples/corpus/ajax.html","requestSettings":{"doneWhen":[{"text":"\"statusCode\":206","statusCode":202},{"selector":"pre#fill-target","statusCode":201}],"waitInterval":0},"renderSettings":{"passThroughStatusCode":true}}
ajax-fast.htmlloads data quickly while rendering; it also loads files from other sites
{"url":"https://examples.phantomjscloud.com/examples/corpus/ajax-fast.html","renderType":"plainText"}
timezone.htmla live clock #clock in the browser's time zone (page.emulateTimezone)
{"url":"https://examples.phantomjscloud.com/examples/corpus/timezone.html","renderType":"png","renderSettings":{"selector":"#clock"},"overseerScript":"await page.emulateTimezone('Asia/Tokyo');"}

Automation

PageWhat it shows and a try-it request
button-click.htmla button that fills #demo_result one second after a click
{"url":"https://examples.phantomjscloud.com/examples/corpus/button-click.html","renderType":"jpeg","overseerScript":"page.manualWait(); await page.waitForSelector('button#dateBtn'); page.click('button#dateBtn'); await page.waitForFunction(()=>document.querySelector('#demo_result').textContent!==''); page.done();"}
button-click-navigate.htmla button that opens navigation-complete.html
{"url":"https://examples.phantomjscloud.com/examples/corpus/button-click-navigate.html","renderType":"jpeg","overseerScript":"await page.waitForSelector('button#navBtn'); page.click('button#navBtn'); await page.waitForNavigation();"}
navigation-complete.htmlshows the page you came from (document.referrer)
{"url":"https://examples.phantomjscloud.com/examples/corpus/navigation-complete.html","renderType":"plainText"}
automation.htmlbuttons, labels and a login box (user / pass) for overseerScript
{"url":"https://examples.phantomjscloud.com/examples/corpus/automation.html","renderType":"jpeg","overseerScript":"await page.waitForSelector('input[name=id]'); await page.type('input[name=id]','user'); await page.type('input[name=pass]','pass'); await Promise.all([page.waitForNavigation(), page.click('input[value=Login]')]);"}
form.html · welcome.htmla sign-in form (any name and password) that opens welcome.html; press Enter or click #submit
{"url":"https://examples.phantomjscloud.com/examples/corpus/form.html","renderType":"jpeg","overseerScript":"await page.waitForSelector('#user'); await page.type('#user','demo'); await page.type('#pass','secret'); await Promise.all([page.waitForNavigation(), page.click('#submit')]); await page.waitForSelector('#welcome');"}
links.htmllinks to other example pages (click, waitForNavigation, goBack, goForward)
{"url":"https://examples.phantomjscloud.com/examples/corpus/links.html","renderType":"plainText","overseerScript":"await Promise.all([page.waitForNavigation(), page.click('#to-basic')]); await page.goBack();"}
post-link.htmlforms that post to /examples/helpers/requestdata (same site)
{"url":"https://examples.phantomjscloud.com/examples/corpus/post-link.html","renderType":"html"}
search-results.htmla search page: consent overlay, search box, results and a next-page link
{"url":"https://examples.phantomjscloud.com/examples/corpus/search-results.html","renderType":"jpeg","overseerScript":"await page.waitForSelector('#consent-accept'); await page.click('#consent-accept'); await page.type('#q','cloud browser'); await Promise.all([page.waitForNavigation(), page.keyboard.press('Enter')]); await page.waitForSelector('.result');"}

Data pages

PageWhat it shows and a try-it request
listing.html · listing-item.htmla catalog listing (?kind=equipment, property or product) whose items load after the page; each item links to its detail page
{"url":"https://examples.phantomjscloud.com/examples/corpus/listing.html?kind=equipment","renderType":"automation","overseerScript":"await page.waitForSelector('#results .item'); await page.meta.store.set('items', await page.evaluate(() => [...document.querySelectorAll('#results .item h3')].map(e => e.textContent)));"}
rates-table.htmla table of rates and exchange prices loaded after the page (plainText, selector, queryJson)
{"url":"https://examples.phantomjscloud.com/examples/corpus/rates-table.html","renderType":"png","renderSettings":{"selector":"#rates"}}
chart.htmla bar chart drawn and animated by script, with a tooltip on hover (viewport, zoomFactor, clipRectangle)
{"url":"https://examples.phantomjscloud.com/examples/corpus/chart.html","renderType":"jpeg","renderSettings":{"viewport":{"width":1280,"height":800},"zoomFactor":0.8,"quality":70,"clipRectangle":{"top":0,"left":0,"width":640,"height":500}}}
third-party-standins.htmla page full of add-ons (tag manager, beacon, pixel, consent banner, library, web font), each a stand-in on this site; paying accounts can block them with requestSettings.resourceModifier regex ".*/standins/.*"
{"url":"https://examples.phantomjscloud.com/examples/corpus/third-party-standins.html","renderType":"html","outputAsJson":true,"requestSettings":{"ignoreImages":true,"resourceTimeout":3000}}
news.ycombinator.com.htmla copy of a long news list (scrolling, plainText); its links point to other sites
{"url":"https://examples.phantomjscloud.com/examples/corpus/news.ycombinator.com.html","renderType":"plainText"}

Demo sites

Small made-up websites of the kinds people automate. All names and data are fictional; each site keeps its data in the browser and loads nothing from other sites.

SiteWhat it shows and a try-it request
demo/crm/a CRM: sign-in page (demo account shown on the page), a contact list with search, stage filter, sorting, paging, pipeline summary and a new-contact dialog, and contact pages with activity notes, inline edit and delete
{"url":"https://examples.phantomjscloud.com/examples/corpus/demo/crm/index.html","renderType":"jpeg","overseerScript":"await page.waitForSelector('#email'); await page.type('#email','demo@example.com'); await page.type('#password','demo1234'); await Promise.all([page.waitForNavigation(), page.click('#signin-submit')]); await page.waitForSelector('#search'); await page.type('#search','Acme'); await page.waitForSelector('#contacts tbody tr a'); await Promise.all([page.waitForNavigation(), page.click('#contacts tbody tr a')]); await page.waitForSelector('#contact-detail');"}
demo/todo/a todo list: add on Enter, toggle, double-click to edit, delete, All/Active/Completed filters and items left; items stay in the browser's storage
{"url":"https://examples.phantomjscloud.com/examples/corpus/demo/todo/index.html","renderType":"jpeg","renderSettings":{"selector":"#todoapp"},"overseerScript":"await page.waitForSelector('#new-todo'); await page.type('#new-todo','Buy milk'); await page.keyboard.press('Enter'); await page.type('#new-todo','Render a page'); await page.keyboard.press('Enter'); await page.click('#todo-list li:last-child .toggle');"}
demo/news/a news feed: category tabs, article cards, a cookie consent bar, a load-more button, infinite scroll that reacts to any scrolling (window.scrollTo included) and a subscribe overlay after the first mouse-wheel, touch or keyboard scroll; article pages load comments on demand
{"url":"https://examples.phantomjscloud.com/examples/corpus/demo/news/index.html","renderType":"plainText","overseerScript":"await page.waitForSelector('#consent-accept'); await page.click('#consent-accept'); await page.evaluate(()=>document.querySelector('#load-more').click()); await page.waitForFunction(()=>document.querySelectorAll('#feed .card').length>=20);"}
demo/shop/a shop: product grid, product pages, a cart with quantities and totals, a three-step checkout (invoice only, no card fields) and an order confirmation
{"url":"https://examples.phantomjscloud.com/examples/corpus/demo/shop/index.html","renderType":"jpeg","overseerScript":"await page.waitForSelector('.product a'); await Promise.all([page.waitForNavigation(), page.click('.product a')]); await page.waitForSelector('#add-to-cart'); await page.click('#add-to-cart'); await Promise.all([page.waitForNavigation(), page.click('#view-cart')]); await Promise.all([page.waitForNavigation(), page.click('#checkout')]); await page.waitForSelector('#name'); await page.type('#name','Pat Example'); await page.type('#email','pat@example.com'); await page.type('#address','123 Example Street'); await page.type('#city','Springfield'); await page.type('#zip','12345'); await page.click('#to-step-2'); await page.waitForSelector('#step-2:not([hidden])'); await page.click('#to-step-3'); await page.waitForSelector('#step-3:not([hidden])'); await Promise.all([page.waitForNavigation(), page.click('#place-order')]); await page.waitForSelector('#order-number');"}
demo/booking/a booking calendar: January to March 2026, free and booked time slots, a booking form with checks and a confirmation page
{"url":"https://examples.phantomjscloud.com/examples/corpus/demo/booking/index.html","renderType":"jpeg","overseerScript":"await page.waitForSelector('.slot'); await page.click('.slot'); await page.waitForSelector('#booking-form:not([hidden])'); await page.type('#name','Pat Example'); await page.type('#email','pat@example.com'); await Promise.all([page.waitForNavigation(), page.click('#confirm-booking')]); await page.waitForSelector('#booking-confirmation');"}

Frames, workers, large pages

PageWhat it shows and a try-it request
frames-shadow.htmlan iframe of basic.html and an open shadow root holding #shadow-text
{"url":"https://examples.phantomjscloud.com/examples/corpus/frames-shadow.html","renderType":"plainText","renderSettings":{"shadowDom":"output","iFrameMaxDepth":3}}
iframe.html · iframe-child.htmlthree frames (renderIFrame, iFrameMaxCount)
{"url":"https://examples.phantomjscloud.com/examples/corpus/iframe.html","renderType":"jpeg","outputAsJson":true}
workers.htmla background worker and two worklets; #worker shows the worker's reply
{"url":"https://examples.phantomjscloud.com/examples/corpus/workers.html","renderType":"plainText"}
tall.htmla block ?h= pixels tall (h=70000 passes the JPEG height limit; PNG keeps the whole page)
{"url":"https://examples.phantomjscloud.com/examples/corpus/tall.html?h=70000","renderType":"jpeg"}

PDF and print

PageWhat it shows and a try-it request
print.htmla long text page that fills several PDF pages
{"url":"https://examples.phantomjscloud.com/examples/corpus/print.html","renderType":"pdf","renderSettings":{"pdfOptions":{"format":"A4","landscape":false}}}
invoice.htmlan invoice with backgrounds and a repeated table header (pdfOptions printBackground, preferCSSPageSize)
{"url":"https://examples.phantomjscloud.com/examples/corpus/invoice.html","renderType":"pdf","renderSettings":{"emulateMedia":"print","pdfOptions":{"format":"letter","printBackground":true}}}
css-media-query-print.htmllooks different on screen and in print (emulateMedia)
{"url":"https://examples.phantomjscloud.com/examples/corpus/css-media-query-print.html","renderType":"pdf","renderSettings":{"emulateMedia":"print"}}
header-template.htmlfor PDF header and footer templates
{"url":"https://examples.phantomjscloud.com/examples/corpus/header-template.html","renderType":"pdf","renderSettings":{"pdfOptions":{"format":"letter","headerTemplate":"<span style='font-size:10px'>Page <span class='pageNumber'></span> of <span class='totalPages'></span></span>","margin":{"top":"1in","bottom":"1in"}}}}

Fonts and layout

PageWhat it shows and a try-it request
fonts.htmlmany scripts and languages; it also loads a script from platform.twitter.com
{"url":"https://examples.phantomjscloud.com/examples/corpus/fonts.html","renderType":"png"}
unicode.htmlHindi and Latin text in a web font; it loads the font from fonts.googleapis.com
{"url":"https://examples.phantomjscloud.com/examples/corpus/unicode.html","renderType":"png"}
flexbox.htmla flexbox layout (viewport sizes)
{"url":"https://examples.phantomjscloud.com/examples/corpus/flexbox.html","renderType":"png","renderSettings":{"viewport":{"width":600,"height":800}}}
translate.htmla page translated by script; it loads the translator from other sites
{"url":"https://examples.phantomjscloud.com/examples/corpus/translate.html","renderType":"jpeg"}

Helpers

PageWhat it shows and a try-it request
/examples/helpers/requestdatashows the request it received: method, body, headers, cookies, user agent (urlSettings, customHeaders, userAgent)
{"url":"https://examples.phantomjscloud.com/examples/helpers/requestdata","renderType":"plainText","urlSettings":{"operation":"POST","data":"{\"hello\":\"world\"}","contentType":"application/json"},"requestSettings":{"customHeaders":{"X-Example":"1"},"userAgent":"ExampleBot/1.0"}}
/examples/helpers/two-cookiessets two cookies (c1, c2)
{"url":"https://examples.phantomjscloud.com/examples/helpers/two-cookies","renderType":"plainText","outputAsJson":true}
requestSettings.cookiessend your own cookies: set each cookie's domain to examples.phantomjscloud.com
{"url":"https://examples.phantomjscloud.com/examples/helpers/requestdata","renderType":"plainText","requestSettings":{"cookies":[{"domain":"examples.phantomjscloud.com","name":"myCookie","value":"value1"}]}}
/examples/helpers/authHTTP Basic sign-in; any user name and password work (requestSettings.authentication)
{"url":"https://examples.phantomjscloud.com/examples/helpers/auth","renderType":"plainText","requestSettings":{"authentication":{"userName":"guest","password":"guest"}}}
/examples/helpers/statusCode/{code}answers the status code you name (passThroughStatusCode)
{"url":"https://examples.phantomjscloud.com/examples/helpers/statusCode/404","renderType":"plainText","renderSettings":{"passThroughStatusCode":true}}
/examples/helpers/ipshows the address the request came from (proxy checks)
{"url":"https://examples.phantomjscloud.com/examples/helpers/ip","renderType":"plainText"}
/examples/helpers/pageRequestDefaultsthe default value of every request field
{"url":"https://examples.phantomjscloud.com/examples/helpers/pageRequestDefaults","renderType":"plainText"}
/examples/scripts/scripts to load into a page (page.addScriptTag, scripts)
{"url":"https://examples.phantomjscloud.com/examples/corpus/example.com.html","renderType":"jpeg","overseerScript":"await page.waitForNavigation(); await page.addScriptTag({url:'https://examples.phantomjscloud.com/examples/scripts/hilitor.js'}); await page.evaluate(()=>{new Hilitor().apply('Example');});"}