From 3a0e5691fd057d12687ff870f491c64a61f813c9 Mon Sep 17 00:00:00 2001 From: "release-please[bot]" <55107282+release-please[bot]@users.noreply.github.com> Date: Mon, 3 Jun 2024 09:10:13 +0000 Subject: [PATCH] deploy: 80e5077ffba26534eee663a72219803676102f41 --- 404.html | 2 +- api/index.html | 2 +- api/puppeteer.accessibility.snapshot/index.html | 2 +- api/puppeteer.accessibility/index.html | 2 +- api/puppeteer.actionoptions/index.html | 2 +- api/puppeteer.actionresult/index.html | 2 +- api/puppeteer.autofilldata/index.html | 2 +- api/puppeteer.awaitable/index.html | 2 +- api/puppeteer.awaitableiterable/index.html | 2 +- api/puppeteer.awaitablepredicate/index.html | 2 +- api/puppeteer.awaitedlocator/index.html | 2 +- api/puppeteer.boundingbox/index.html | 2 +- api/puppeteer.boxmodel/index.html | 2 +- api/puppeteer.browser.browsercontexts/index.html | 2 +- api/puppeteer.browser.close/index.html | 2 +- api/puppeteer.browser.createbrowsercontext/index.html | 2 +- api/puppeteer.browser.defaultbrowsercontext/index.html | 2 +- api/puppeteer.browser.disconnect/index.html | 2 +- api/puppeteer.browser.isconnected/index.html | 2 +- api/puppeteer.browser.newpage/index.html | 2 +- api/puppeteer.browser.pages/index.html | 2 +- api/puppeteer.browser.process/index.html | 2 +- api/puppeteer.browser.target/index.html | 2 +- api/puppeteer.browser.targets/index.html | 2 +- api/puppeteer.browser.useragent/index.html | 2 +- api/puppeteer.browser.version/index.html | 2 +- api/puppeteer.browser.waitfortarget/index.html | 2 +- api/puppeteer.browser.wsendpoint/index.html | 2 +- api/puppeteer.browser/index.html | 2 +- api/puppeteer.browserconnectoptions/index.html | 2 +- api/puppeteer.browsercontext.browser/index.html | 2 +- .../index.html | 2 +- api/puppeteer.browsercontext.close/index.html | 2 +- api/puppeteer.browsercontext.isincognito/index.html | 2 +- api/puppeteer.browsercontext.newpage/index.html | 2 +- api/puppeteer.browsercontext.overridepermissions/index.html | 2 +- api/puppeteer.browsercontext.pages/index.html | 2 +- api/puppeteer.browsercontext.targets/index.html | 2 +- api/puppeteer.browsercontext.waitfortarget/index.html | 2 +- api/puppeteer.browsercontext/index.html | 2 +- api/puppeteer.browsercontextevent/index.html | 2 +- api/puppeteer.browsercontextevents/index.html | 2 +- api/puppeteer.browsercontextoptions/index.html | 2 +- api/puppeteer.browserevent/index.html | 2 +- api/puppeteer.browserevents/index.html | 2 +- api/puppeteer.browserlaunchargumentoptions/index.html | 2 +- api/puppeteer.cdpevents/index.html | 2 +- api/puppeteer.cdpsession.connection/index.html | 2 +- api/puppeteer.cdpsession.detach/index.html | 2 +- api/puppeteer.cdpsession.id/index.html | 2 +- api/puppeteer.cdpsession.send/index.html | 2 +- api/puppeteer.cdpsession/index.html | 2 +- api/puppeteer.cdpsessionevent.sessionattached/index.html | 2 +- api/puppeteer.cdpsessionevent.sessiondetached/index.html | 2 +- api/puppeteer.cdpsessionevent/index.html | 2 +- api/puppeteer.cdpsessionevents/index.html | 2 +- api/puppeteer.chromereleasechannel/index.html | 2 +- api/puppeteer.clearcustomqueryhandlers/index.html | 2 +- api/puppeteer.clickoptions/index.html | 2 +- api/puppeteer.commandoptions/index.html | 2 +- api/puppeteer.commoneventemitter.emit/index.html | 2 +- api/puppeteer.commoneventemitter.listenercount/index.html | 2 +- api/puppeteer.commoneventemitter.off/index.html | 2 +- api/puppeteer.commoneventemitter.on/index.html | 2 +- api/puppeteer.commoneventemitter.once/index.html | 2 +- .../index.html | 2 +- api/puppeteer.commoneventemitter/index.html | 2 +- api/puppeteer.configuration/index.html | 2 +- api/puppeteer.connect/index.html | 2 +- api/puppeteer.connection._constructor_/index.html | 2 +- api/puppeteer.connection.createsession/index.html | 2 +- api/puppeteer.connection.dispose/index.html | 2 +- api/puppeteer.connection.fromsession/index.html | 2 +- api/puppeteer.connection.send/index.html | 2 +- api/puppeteer.connection.session/index.html | 2 +- api/puppeteer.connection.url/index.html | 2 +- api/puppeteer.connection/index.html | 2 +- api/puppeteer.connectiontransport.close/index.html | 2 +- api/puppeteer.connectiontransport.send/index.html | 2 +- api/puppeteer.connectiontransport/index.html | 2 +- api/puppeteer.connectoptions/index.html | 2 +- api/puppeteer.consolemessage._constructor_/index.html | 2 +- api/puppeteer.consolemessage.args/index.html | 2 +- api/puppeteer.consolemessage.location/index.html | 2 +- api/puppeteer.consolemessage.stacktrace/index.html | 2 +- api/puppeteer.consolemessage.text/index.html | 2 +- api/puppeteer.consolemessage.type/index.html | 2 +- api/puppeteer.consolemessage/index.html | 2 +- api/puppeteer.consolemessagelocation/index.html | 2 +- api/puppeteer.consolemessagetype/index.html | 2 +- api/puppeteer.continuerequestoverrides/index.html | 2 +- api/puppeteer.cookie/index.html | 2 +- api/puppeteer.cookieparam/index.html | 2 +- api/puppeteer.cookiepriority/index.html | 2 +- api/puppeteer.cookiesamesite/index.html | 2 +- api/puppeteer.cookiesourcescheme/index.html | 2 +- api/puppeteer.coverage._constructor_/index.html | 2 +- api/puppeteer.coverage.startcsscoverage/index.html | 2 +- api/puppeteer.coverage.startjscoverage/index.html | 2 +- api/puppeteer.coverage.stopcsscoverage/index.html | 2 +- api/puppeteer.coverage.stopjscoverage/index.html | 2 +- api/puppeteer.coverage/index.html | 2 +- api/puppeteer.coverageentry/index.html | 2 +- api/puppeteer.credentials/index.html | 2 +- api/puppeteer.csscoverage._constructor_/index.html | 2 +- api/puppeteer.csscoverage.start/index.html | 2 +- api/puppeteer.csscoverage.stop/index.html | 2 +- api/puppeteer.csscoverage/index.html | 2 +- api/puppeteer.csscoverageoptions/index.html | 2 +- api/puppeteer.customqueryhandler/index.html | 2 +- api/puppeteer.customqueryhandlernames/index.html | 2 +- api/puppeteer.debuginfo/index.html | 2 +- .../index.html | 2 +- api/puppeteer.defaultargs/index.html | 2 +- api/puppeteer.deletecookiesrequest/index.html | 2 +- api/puppeteer.device/index.html | 2 +- api/puppeteer.devicerequestprompt.cancel/index.html | 2 +- api/puppeteer.devicerequestprompt.select/index.html | 2 +- api/puppeteer.devicerequestprompt.waitfordevice/index.html | 2 +- api/puppeteer.devicerequestprompt/index.html | 2 +- api/puppeteer.devicerequestpromptdevice/index.html | 2 +- api/puppeteer.dialog.accept/index.html | 2 +- api/puppeteer.dialog.defaultvalue/index.html | 2 +- api/puppeteer.dialog.dismiss/index.html | 2 +- api/puppeteer.dialog.message/index.html | 2 +- api/puppeteer.dialog.type/index.html | 2 +- api/puppeteer.dialog/index.html | 2 +- api/puppeteer.elementfor/index.html | 2 +- api/puppeteer.elementhandle._/index.html | 2 +- api/puppeteer.elementhandle.__/index.html | 2 +- api/puppeteer.elementhandle.__eval/index.html | 2 +- api/puppeteer.elementhandle._eval/index.html | 2 +- api/puppeteer.elementhandle.autofill/index.html | 2 +- api/puppeteer.elementhandle.boundingbox/index.html | 2 +- api/puppeteer.elementhandle.boxmodel/index.html | 2 +- api/puppeteer.elementhandle.click/index.html | 2 +- api/puppeteer.elementhandle.clickablepoint/index.html | 2 +- api/puppeteer.elementhandle.contentframe/index.html | 2 +- api/puppeteer.elementhandle.contentframe_1/index.html | 2 +- api/puppeteer.elementhandle.drag/index.html | 2 +- api/puppeteer.elementhandle.draganddrop/index.html | 2 +- api/puppeteer.elementhandle.dragenter/index.html | 2 +- api/puppeteer.elementhandle.dragover/index.html | 2 +- api/puppeteer.elementhandle.drop/index.html | 2 +- api/puppeteer.elementhandle.drop_1/index.html | 2 +- api/puppeteer.elementhandle.focus/index.html | 2 +- api/puppeteer.elementhandle.hover/index.html | 2 +- api/puppeteer.elementhandle.ishidden/index.html | 2 +- api/puppeteer.elementhandle.isintersectingviewport/index.html | 2 +- api/puppeteer.elementhandle.isvisible/index.html | 2 +- api/puppeteer.elementhandle.press/index.html | 2 +- api/puppeteer.elementhandle.screenshot/index.html | 2 +- api/puppeteer.elementhandle.screenshot_1/index.html | 2 +- api/puppeteer.elementhandle.scrollintoview/index.html | 2 +- api/puppeteer.elementhandle.select/index.html | 2 +- api/puppeteer.elementhandle.tap/index.html | 2 +- api/puppeteer.elementhandle.toelement/index.html | 2 +- api/puppeteer.elementhandle.touchend/index.html | 2 +- api/puppeteer.elementhandle.touchmove/index.html | 2 +- api/puppeteer.elementhandle.touchstart/index.html | 2 +- api/puppeteer.elementhandle.type/index.html | 2 +- api/puppeteer.elementhandle.uploadfile/index.html | 2 +- api/puppeteer.elementhandle.waitforselector/index.html | 2 +- api/puppeteer.elementhandle/index.html | 2 +- api/puppeteer.elementscreenshotoptions/index.html | 2 +- api/puppeteer.errorcode/index.html | 2 +- api/puppeteer.evaluatefunc/index.html | 2 +- api/puppeteer.evaluatefuncwith/index.html | 2 +- api/puppeteer.eventemitter.emit/index.html | 2 +- api/puppeteer.eventemitter.listenercount/index.html | 2 +- api/puppeteer.eventemitter.off/index.html | 2 +- api/puppeteer.eventemitter.on/index.html | 2 +- api/puppeteer.eventemitter.once/index.html | 2 +- api/puppeteer.eventemitter.removealllisteners/index.html | 2 +- api/puppeteer.eventemitter/index.html | 2 +- api/puppeteer.eventswithwildcard/index.html | 2 +- api/puppeteer.eventtype/index.html | 2 +- api/puppeteer.executablepath/index.html | 2 +- api/puppeteer.experimentsconfiguration/index.html | 2 +- api/puppeteer.extensiontransport.close/index.html | 2 +- api/puppeteer.extensiontransport.connecttab/index.html | 2 +- api/puppeteer.extensiontransport.send/index.html | 2 +- api/puppeteer.extensiontransport/index.html | 2 +- api/puppeteer.filechooser.accept/index.html | 2 +- api/puppeteer.filechooser.cancel/index.html | 2 +- api/puppeteer.filechooser.ismultiple/index.html | 2 +- api/puppeteer.filechooser/index.html | 2 +- api/puppeteer.flattenhandle/index.html | 2 +- api/puppeteer.frame._/index.html | 2 +- api/puppeteer.frame.__/index.html | 2 +- api/puppeteer.frame.__eval/index.html | 2 +- api/puppeteer.frame._eval/index.html | 2 +- api/puppeteer.frame.addscripttag/index.html | 2 +- api/puppeteer.frame.addstyletag/index.html | 2 +- api/puppeteer.frame.addstyletag_1/index.html | 2 +- api/puppeteer.frame.childframes/index.html | 2 +- api/puppeteer.frame.click/index.html | 2 +- api/puppeteer.frame.content/index.html | 2 +- api/puppeteer.frame.evaluate/index.html | 2 +- api/puppeteer.frame.evaluatehandle/index.html | 2 +- api/puppeteer.frame.focus/index.html | 2 +- api/puppeteer.frame.frameelement/index.html | 2 +- api/puppeteer.frame.goto/index.html | 2 +- api/puppeteer.frame.hover/index.html | 2 +- api/puppeteer.frame.isdetached/index.html | 2 +- api/puppeteer.frame.isoopframe/index.html | 2 +- api/puppeteer.frame.locator/index.html | 2 +- api/puppeteer.frame.locator_1/index.html | 2 +- api/puppeteer.frame.name/index.html | 2 +- api/puppeteer.frame.page/index.html | 2 +- api/puppeteer.frame.parentframe/index.html | 2 +- api/puppeteer.frame.select/index.html | 2 +- api/puppeteer.frame.setcontent/index.html | 2 +- api/puppeteer.frame.tap/index.html | 2 +- api/puppeteer.frame.title/index.html | 2 +- api/puppeteer.frame.type/index.html | 2 +- api/puppeteer.frame.url/index.html | 2 +- api/puppeteer.frame.waitforfunction/index.html | 2 +- api/puppeteer.frame.waitfornavigation/index.html | 2 +- api/puppeteer.frame.waitforselector/index.html | 2 +- api/puppeteer.frame/index.html | 2 +- api/puppeteer.frameaddscripttagoptions/index.html | 2 +- api/puppeteer.frameaddstyletagoptions/index.html | 2 +- api/puppeteer.frameevents/index.html | 2 +- api/puppeteer.framewaitforfunctionoptions/index.html | 2 +- api/puppeteer.geolocationoptions/index.html | 2 +- api/puppeteer.gotooptions/index.html | 2 +- api/puppeteer.handlefor/index.html | 2 +- api/puppeteer.handleor/index.html | 2 +- api/puppeteer.handler/index.html | 2 +- api/puppeteer.httprequest.abort/index.html | 2 +- api/puppeteer.httprequest.aborterrorreason/index.html | 2 +- api/puppeteer.httprequest.continue/index.html | 2 +- api/puppeteer.httprequest.continuerequestoverrides/index.html | 2 +- api/puppeteer.httprequest.enqueueinterceptaction/index.html | 2 +- api/puppeteer.httprequest.failure/index.html | 2 +- api/puppeteer.httprequest.fetchpostdata/index.html | 2 +- api/puppeteer.httprequest.finalizeinterceptions/index.html | 2 +- api/puppeteer.httprequest.frame/index.html | 2 +- api/puppeteer.httprequest.haspostdata/index.html | 2 +- api/puppeteer.httprequest.headers/index.html | 2 +- api/puppeteer.httprequest.initiator/index.html | 2 +- api/puppeteer.httprequest.interceptresolutionstate/index.html | 2 +- .../index.html | 2 +- api/puppeteer.httprequest.isnavigationrequest/index.html | 2 +- api/puppeteer.httprequest.method/index.html | 2 +- api/puppeteer.httprequest.postdata/index.html | 2 +- api/puppeteer.httprequest.redirectchain/index.html | 2 +- api/puppeteer.httprequest.resourcetype/index.html | 2 +- api/puppeteer.httprequest.respond/index.html | 2 +- api/puppeteer.httprequest.response/index.html | 2 +- api/puppeteer.httprequest.responseforrequest/index.html | 2 +- api/puppeteer.httprequest.url/index.html | 2 +- api/puppeteer.httprequest/index.html | 2 +- api/puppeteer.httpresponse.buffer/index.html | 2 +- api/puppeteer.httpresponse.frame/index.html | 2 +- api/puppeteer.httpresponse.fromcache/index.html | 2 +- api/puppeteer.httpresponse.fromserviceworker/index.html | 2 +- api/puppeteer.httpresponse.headers/index.html | 2 +- api/puppeteer.httpresponse.json/index.html | 2 +- api/puppeteer.httpresponse.ok/index.html | 2 +- api/puppeteer.httpresponse.remoteaddress/index.html | 2 +- api/puppeteer.httpresponse.request/index.html | 2 +- api/puppeteer.httpresponse.securitydetails/index.html | 2 +- api/puppeteer.httpresponse.status/index.html | 2 +- api/puppeteer.httpresponse.statustext/index.html | 2 +- api/puppeteer.httpresponse.text/index.html | 2 +- api/puppeteer.httpresponse.timing/index.html | 2 +- api/puppeteer.httpresponse.url/index.html | 2 +- api/puppeteer.httpresponse/index.html | 2 +- api/puppeteer.innerparams/index.html | 2 +- api/puppeteer.interceptresolutionaction/index.html | 2 +- api/puppeteer.interceptresolutionstate/index.html | 2 +- api/puppeteer.internalnetworkconditions/index.html | 2 +- api/puppeteer.jscoverage._constructor_/index.html | 2 +- api/puppeteer.jscoverage.start/index.html | 2 +- api/puppeteer.jscoverage.stop/index.html | 2 +- api/puppeteer.jscoverage/index.html | 2 +- api/puppeteer.jscoverageentry/index.html | 2 +- api/puppeteer.jscoverageoptions/index.html | 2 +- api/puppeteer.jshandle.aselement/index.html | 2 +- api/puppeteer.jshandle.dispose/index.html | 2 +- api/puppeteer.jshandle.evaluate/index.html | 2 +- api/puppeteer.jshandle.evaluatehandle/index.html | 2 +- api/puppeteer.jshandle.getproperties/index.html | 2 +- api/puppeteer.jshandle.getproperty/index.html | 2 +- api/puppeteer.jshandle.getproperty_1/index.html | 2 +- api/puppeteer.jshandle.jsonvalue/index.html | 2 +- api/puppeteer.jshandle.remoteobject/index.html | 2 +- api/puppeteer.jshandle.tostring/index.html | 2 +- api/puppeteer.jshandle/index.html | 2 +- api/puppeteer.keyboard.down/index.html | 2 +- api/puppeteer.keyboard.press/index.html | 2 +- api/puppeteer.keyboard.sendcharacter/index.html | 2 +- api/puppeteer.keyboard.type/index.html | 2 +- api/puppeteer.keyboard.up/index.html | 2 +- api/puppeteer.keyboard/index.html | 2 +- api/puppeteer.keyboardtypeoptions/index.html | 2 +- api/puppeteer.keydownoptions/index.html | 2 +- api/puppeteer.keyinput/index.html | 2 +- api/puppeteer.keypressoptions/index.html | 2 +- api/puppeteer.knowndevices/index.html | 2 +- api/puppeteer.launch/index.html | 2 +- api/puppeteer.launchoptions/index.html | 2 +- api/puppeteer.locator.click/index.html | 2 +- api/puppeteer.locator.clone/index.html | 2 +- api/puppeteer.locator.fill/index.html | 2 +- api/puppeteer.locator.filter/index.html | 2 +- api/puppeteer.locator.hover/index.html | 2 +- api/puppeteer.locator.map/index.html | 2 +- api/puppeteer.locator.race/index.html | 2 +- api/puppeteer.locator.scroll/index.html | 2 +- .../index.html | 2 +- api/puppeteer.locator.settimeout/index.html | 2 +- api/puppeteer.locator.setvisibility/index.html | 2 +- api/puppeteer.locator.setwaitforenabled/index.html | 2 +- api/puppeteer.locator.setwaitforstableboundingbox/index.html | 2 +- api/puppeteer.locator.wait/index.html | 2 +- api/puppeteer.locator.waithandle/index.html | 2 +- api/puppeteer.locator/index.html | 2 +- api/puppeteer.locatorclickoptions/index.html | 2 +- api/puppeteer.locatorevent/index.html | 2 +- api/puppeteer.locatorevents/index.html | 2 +- api/puppeteer.locatoroptions/index.html | 2 +- api/puppeteer.locatorscrolloptions/index.html | 2 +- api/puppeteer.lowercasepaperformat/index.html | 2 +- api/puppeteer.mapper/index.html | 2 +- api/puppeteer.mediafeature/index.html | 2 +- api/puppeteer.metrics/index.html | 2 +- api/puppeteer.mouse.click/index.html | 2 +- api/puppeteer.mouse.down/index.html | 2 +- api/puppeteer.mouse.drag/index.html | 2 +- api/puppeteer.mouse.draganddrop/index.html | 2 +- api/puppeteer.mouse.dragenter/index.html | 2 +- api/puppeteer.mouse.dragover/index.html | 2 +- api/puppeteer.mouse.drop/index.html | 2 +- api/puppeteer.mouse.move/index.html | 2 +- api/puppeteer.mouse.reset/index.html | 2 +- api/puppeteer.mouse.up/index.html | 2 +- api/puppeteer.mouse.wheel/index.html | 2 +- api/puppeteer.mouse/index.html | 2 +- api/puppeteer.mousebutton/index.html | 2 +- api/puppeteer.mouseclickoptions/index.html | 2 +- api/puppeteer.mousemoveoptions/index.html | 2 +- api/puppeteer.mouseoptions/index.html | 2 +- api/puppeteer.mousewheeloptions/index.html | 2 +- api/puppeteer.moveable.move/index.html | 2 +- api/puppeteer.moveable/index.html | 2 +- api/puppeteer.networkconditions/index.html | 2 +- api/puppeteer.newdocumentscriptevaluation/index.html | 2 +- api/puppeteer.nodefor/index.html | 2 +- api/puppeteer.offset/index.html | 2 +- api/puppeteer.page._/index.html | 2 +- api/puppeteer.page.__/index.html | 2 +- api/puppeteer.page.__eval/index.html | 2 +- api/puppeteer.page._eval/index.html | 2 +- api/puppeteer.page.addscripttag/index.html | 2 +- api/puppeteer.page.addstyletag/index.html | 2 +- api/puppeteer.page.addstyletag_1/index.html | 2 +- api/puppeteer.page.authenticate/index.html | 2 +- api/puppeteer.page.bringtofront/index.html | 2 +- api/puppeteer.page.browser/index.html | 2 +- api/puppeteer.page.browsercontext/index.html | 2 +- api/puppeteer.page.click/index.html | 2 +- api/puppeteer.page.close/index.html | 2 +- api/puppeteer.page.content/index.html | 2 +- api/puppeteer.page.cookies/index.html | 2 +- api/puppeteer.page.createcdpsession/index.html | 2 +- api/puppeteer.page.createpdfstream/index.html | 2 +- api/puppeteer.page.deletecookie/index.html | 2 +- api/puppeteer.page.emulate/index.html | 2 +- api/puppeteer.page.emulatecputhrottling/index.html | 2 +- api/puppeteer.page.emulateidlestate/index.html | 2 +- api/puppeteer.page.emulatemediafeatures/index.html | 2 +- api/puppeteer.page.emulatemediatype/index.html | 2 +- api/puppeteer.page.emulatenetworkconditions/index.html | 2 +- api/puppeteer.page.emulatetimezone/index.html | 2 +- api/puppeteer.page.emulatevisiondeficiency/index.html | 2 +- api/puppeteer.page.evaluate/index.html | 2 +- api/puppeteer.page.evaluatehandle/index.html | 2 +- api/puppeteer.page.evaluateonnewdocument/index.html | 2 +- api/puppeteer.page.exposefunction/index.html | 2 +- api/puppeteer.page.focus/index.html | 2 +- api/puppeteer.page.frames/index.html | 2 +- api/puppeteer.page.getdefaulttimeout/index.html | 2 +- api/puppeteer.page.goback/index.html | 2 +- api/puppeteer.page.goforward/index.html | 2 +- api/puppeteer.page.goto/index.html | 2 +- api/puppeteer.page.hover/index.html | 2 +- api/puppeteer.page.isclosed/index.html | 2 +- api/puppeteer.page.isdraginterceptionenabled/index.html | 2 +- api/puppeteer.page.isjavascriptenabled/index.html | 2 +- api/puppeteer.page.isserviceworkerbypassed/index.html | 2 +- api/puppeteer.page.locator/index.html | 2 +- api/puppeteer.page.locator_1/index.html | 2 +- api/puppeteer.page.mainframe/index.html | 2 +- api/puppeteer.page.metrics/index.html | 2 +- api/puppeteer.page.pdf/index.html | 2 +- api/puppeteer.page.queryobjects/index.html | 2 +- api/puppeteer.page.reload/index.html | 2 +- api/puppeteer.page.removeexposedfunction/index.html | 2 +- .../index.html | 2 +- api/puppeteer.page.screencast/index.html | 2 +- api/puppeteer.page.screenshot/index.html | 2 +- api/puppeteer.page.screenshot_1/index.html | 2 +- api/puppeteer.page.select/index.html | 2 +- api/puppeteer.page.setbypasscsp/index.html | 2 +- api/puppeteer.page.setbypassserviceworker/index.html | 2 +- api/puppeteer.page.setcacheenabled/index.html | 2 +- api/puppeteer.page.setcontent/index.html | 2 +- api/puppeteer.page.setcookie/index.html | 2 +- api/puppeteer.page.setdefaultnavigationtimeout/index.html | 2 +- api/puppeteer.page.setdefaulttimeout/index.html | 2 +- api/puppeteer.page.setdraginterception/index.html | 2 +- api/puppeteer.page.setextrahttpheaders/index.html | 2 +- api/puppeteer.page.setgeolocation/index.html | 2 +- api/puppeteer.page.setjavascriptenabled/index.html | 2 +- api/puppeteer.page.setofflinemode/index.html | 2 +- api/puppeteer.page.setrequestinterception/index.html | 2 +- api/puppeteer.page.setuseragent/index.html | 2 +- api/puppeteer.page.setviewport/index.html | 2 +- api/puppeteer.page.tap/index.html | 2 +- api/puppeteer.page.target/index.html | 2 +- api/puppeteer.page.title/index.html | 2 +- api/puppeteer.page.type/index.html | 2 +- api/puppeteer.page.url/index.html | 2 +- api/puppeteer.page.viewport/index.html | 2 +- api/puppeteer.page.waitfordeviceprompt/index.html | 2 +- api/puppeteer.page.waitforfilechooser/index.html | 2 +- api/puppeteer.page.waitforframe/index.html | 2 +- api/puppeteer.page.waitforfunction/index.html | 2 +- api/puppeteer.page.waitfornavigation/index.html | 2 +- api/puppeteer.page.waitfornetworkidle/index.html | 2 +- api/puppeteer.page.waitforrequest/index.html | 2 +- api/puppeteer.page.waitforresponse/index.html | 2 +- api/puppeteer.page.waitforselector/index.html | 2 +- api/puppeteer.page.workers/index.html | 2 +- api/puppeteer.page/index.html | 2 +- api/puppeteer.pageevent/index.html | 2 +- api/puppeteer.pageevents/index.html | 2 +- api/puppeteer.paperformat/index.html | 2 +- api/puppeteer.pdfmargin/index.html | 2 +- api/puppeteer.pdfoptions/index.html | 2 +- api/puppeteer.permission/index.html | 2 +- api/puppeteer.point/index.html | 2 +- api/puppeteer.predefinednetworkconditions/index.html | 2 +- api/puppeteer.predicate/index.html | 2 +- api/puppeteer.product/index.html | 2 +- api/puppeteer.productlauncher.defaultargs/index.html | 2 +- api/puppeteer.productlauncher.executablepath/index.html | 2 +- api/puppeteer.productlauncher.launch/index.html | 2 +- api/puppeteer.productlauncher/index.html | 2 +- api/puppeteer.protocolerror/index.html | 2 +- api/puppeteer.protocollifecycleevent/index.html | 2 +- api/puppeteer.protocoltype/index.html | 2 +- api/puppeteer.puppeteer.clearcustomqueryhandlers/index.html | 2 +- api/puppeteer.puppeteer.connect/index.html | 2 +- api/puppeteer.puppeteer.customqueryhandlernames/index.html | 2 +- api/puppeteer.puppeteer.registercustomqueryhandler/index.html | 2 +- .../index.html | 2 +- api/puppeteer.puppeteer/index.html | 2 +- api/puppeteer.puppeteererror/index.html | 2 +- api/puppeteer.puppeteerlaunchoptions/index.html | 2 +- api/puppeteer.puppeteerlifecycleevent/index.html | 2 +- api/puppeteer.puppeteernode.connect/index.html | 2 +- api/puppeteer.puppeteernode.defaultargs/index.html | 2 +- api/puppeteer.puppeteernode.executablepath/index.html | 2 +- api/puppeteer.puppeteernode.launch/index.html | 2 +- api/puppeteer.puppeteernode.trimcache/index.html | 2 +- api/puppeteer.puppeteernode/index.html | 2 +- api/puppeteer.puppeteernodelaunchoptions/index.html | 2 +- api/puppeteer.quad/index.html | 2 +- api/puppeteer.registercustomqueryhandler/index.html | 2 +- api/puppeteer.remoteaddress/index.html | 2 +- api/puppeteer.resourcetype/index.html | 2 +- api/puppeteer.responseforrequest/index.html | 2 +- api/puppeteer.screencastoptions/index.html | 2 +- api/puppeteer.screenrecorder.stop/index.html | 2 +- api/puppeteer.screenrecorder/index.html | 2 +- api/puppeteer.screenshotclip/index.html | 2 +- api/puppeteer.screenshotoptions/index.html | 2 +- api/puppeteer.securitydetails.issuer/index.html | 2 +- api/puppeteer.securitydetails.protocol/index.html | 2 +- .../index.html | 2 +- api/puppeteer.securitydetails.subjectname/index.html | 2 +- api/puppeteer.securitydetails.validfrom/index.html | 2 +- api/puppeteer.securitydetails.validto/index.html | 2 +- api/puppeteer.securitydetails/index.html | 2 +- api/puppeteer.serializedaxnode/index.html | 2 +- api/puppeteer.snapshotoptions/index.html | 2 +- api/puppeteer.target.aspage/index.html | 2 +- api/puppeteer.target.browser/index.html | 2 +- api/puppeteer.target.browsercontext/index.html | 2 +- api/puppeteer.target.createcdpsession/index.html | 2 +- api/puppeteer.target.opener/index.html | 2 +- api/puppeteer.target.page/index.html | 2 +- api/puppeteer.target.type/index.html | 2 +- api/puppeteer.target.url/index.html | 2 +- api/puppeteer.target.worker/index.html | 2 +- api/puppeteer.target/index.html | 2 +- api/puppeteer.targetfiltercallback/index.html | 2 +- api/puppeteer.targettype/index.html | 2 +- api/puppeteer.timeouterror/index.html | 2 +- api/puppeteer.touchscreen.tap/index.html | 2 +- api/puppeteer.touchscreen.touchend/index.html | 2 +- api/puppeteer.touchscreen.touchmove/index.html | 2 +- api/puppeteer.touchscreen.touchstart/index.html | 2 +- api/puppeteer.touchscreen/index.html | 2 +- api/puppeteer.tracing.start/index.html | 2 +- api/puppeteer.tracing.stop/index.html | 2 +- api/puppeteer.tracing/index.html | 2 +- api/puppeteer.tracingoptions/index.html | 2 +- api/puppeteer.trimcache/index.html | 2 +- api/puppeteer.unregistercustomqueryhandler/index.html | 2 +- api/puppeteer.unsupportedoperation/index.html | 2 +- api/puppeteer.viewport/index.html | 2 +- api/puppeteer.visibilityoption/index.html | 2 +- api/puppeteer.waitfornetworkidleoptions/index.html | 2 +- api/puppeteer.waitforoptions/index.html | 2 +- api/puppeteer.waitforselectoroptions/index.html | 2 +- api/puppeteer.waitfortargetoptions/index.html | 2 +- api/puppeteer.waittimeoutoptions/index.html | 2 +- api/puppeteer.webworker.close/index.html | 2 +- api/puppeteer.webworker.evaluate/index.html | 2 +- api/puppeteer.webworker.evaluatehandle/index.html | 2 +- api/puppeteer.webworker.url/index.html | 2 +- api/puppeteer.webworker/index.html | 2 +- assets/js/{1dbd82f5.a8e2414a.js => 1dbd82f5.357b5d8a.js} | 4 ++-- ...e2414a.js.LICENSE.txt => 1dbd82f5.357b5d8a.js.LICENSE.txt} | 0 assets/js/{8c74700a.7ee02415.js => 8c74700a.5d4b5d40.js} | 4 ++-- ...e02415.js.LICENSE.txt => 8c74700a.5d4b5d40.js.LICENSE.txt} | 0 .../js/{runtime~main.131c3633.js => runtime~main.f12904e5.js} | 2 +- browsers-api/browsers.browser/index.html | 2 +- browsers-api/browsers.browserplatform/index.html | 2 +- browsers-api/browsers.candownload/index.html | 2 +- browsers-api/browsers.cdp_websocket_endpoint_regex/index.html | 2 +- browsers-api/browsers.chromereleasechannel/index.html | 2 +- browsers-api/browsers.cli._constructor_/index.html | 2 +- browsers-api/browsers.cli.run/index.html | 2 +- browsers-api/browsers.cli/index.html | 2 +- browsers-api/browsers.computeexecutablepath/index.html | 2 +- browsers-api/browsers.computesystemexecutablepath/index.html | 2 +- browsers-api/browsers.createprofile/index.html | 2 +- browsers-api/browsers.detectbrowserplatform/index.html | 2 +- browsers-api/browsers.getinstalledbrowsers/index.html | 2 +- browsers-api/browsers.getinstalledbrowsersoptions/index.html | 2 +- browsers-api/browsers.getversioncomparator/index.html | 2 +- browsers-api/browsers.install/index.html | 2 +- browsers-api/browsers.install_1/index.html | 2 +- .../browsers.installedbrowser.readmetadata/index.html | 2 +- .../browsers.installedbrowser.writemetadata/index.html | 2 +- browsers-api/browsers.installedbrowser/index.html | 2 +- browsers-api/browsers.installoptions/index.html | 2 +- browsers-api/browsers.launch/index.html | 2 +- browsers-api/browsers.launchoptions/index.html | 2 +- browsers-api/browsers.makeprogresscallback/index.html | 2 +- browsers-api/browsers.options/index.html | 2 +- browsers-api/browsers.process._constructor_/index.html | 2 +- browsers-api/browsers.process.close/index.html | 2 +- browsers-api/browsers.process.hasclosed/index.html | 2 +- browsers-api/browsers.process.kill/index.html | 2 +- browsers-api/browsers.process.waitforlineoutput/index.html | 2 +- browsers-api/browsers.process/index.html | 2 +- browsers-api/browsers.profileoptions/index.html | 2 +- browsers-api/browsers.resolvebuildid/index.html | 2 +- browsers-api/browsers.systemoptions/index.html | 2 +- browsers-api/browsers.timeouterror/index.html | 2 +- browsers-api/browsers.uninstall/index.html | 2 +- browsers-api/browsers.uninstalloptions/index.html | 2 +- .../index.html | 2 +- browsers-api/index.html | 2 +- category/community/index.html | 2 +- category/core-concepts/index.html | 2 +- category/guides/index.html | 2 +- category/integrations/index.html | 2 +- category/introduction/index.html | 2 +- contributing/index.html | 2 +- faq/index.html | 2 +- guides/browser-management/index.html | 2 +- guides/chrome-extensions/index.html | 2 +- guides/configuration/index.html | 2 +- guides/cookies/index.html | 2 +- guides/debugging/index.html | 2 +- guides/docker/index.html | 2 +- guides/files/index.html | 2 +- guides/getting-started/index.html | 2 +- guides/headless-modes/index.html | 2 +- guides/installation/index.html | 2 +- guides/javascript-execution/index.html | 2 +- guides/links/index.html | 2 +- guides/network-interception/index.html | 2 +- guides/network-logging/index.html | 2 +- guides/ng-schematics/index.html | 2 +- guides/page-interactions/index.html | 4 ++-- guides/pdf-generation/index.html | 2 +- guides/running-puppeteer-in-extensions/index.html | 2 +- guides/running-puppeteer-in-the-browser/index.html | 2 +- guides/screenshots/index.html | 2 +- guides/system-requirements/index.html | 2 +- guides/what-is-puppeteer/index.html | 2 +- index.html | 2 +- next/api/index.html | 2 +- next/api/puppeteer.accessibility.snapshot/index.html | 2 +- next/api/puppeteer.accessibility/index.html | 2 +- next/api/puppeteer.actionoptions/index.html | 2 +- next/api/puppeteer.actionresult/index.html | 2 +- next/api/puppeteer.autofilldata/index.html | 2 +- next/api/puppeteer.awaitable/index.html | 2 +- next/api/puppeteer.awaitableiterable/index.html | 2 +- next/api/puppeteer.awaitablepredicate/index.html | 2 +- next/api/puppeteer.awaitedlocator/index.html | 2 +- next/api/puppeteer.boundingbox/index.html | 2 +- next/api/puppeteer.boxmodel/index.html | 2 +- next/api/puppeteer.browser.browsercontexts/index.html | 2 +- next/api/puppeteer.browser.close/index.html | 2 +- next/api/puppeteer.browser.createbrowsercontext/index.html | 2 +- next/api/puppeteer.browser.defaultbrowsercontext/index.html | 2 +- next/api/puppeteer.browser.disconnect/index.html | 2 +- next/api/puppeteer.browser.isconnected/index.html | 2 +- next/api/puppeteer.browser.newpage/index.html | 2 +- next/api/puppeteer.browser.pages/index.html | 2 +- next/api/puppeteer.browser.process/index.html | 2 +- next/api/puppeteer.browser.target/index.html | 2 +- next/api/puppeteer.browser.targets/index.html | 2 +- next/api/puppeteer.browser.useragent/index.html | 2 +- next/api/puppeteer.browser.version/index.html | 2 +- next/api/puppeteer.browser.waitfortarget/index.html | 2 +- next/api/puppeteer.browser.wsendpoint/index.html | 2 +- next/api/puppeteer.browser/index.html | 2 +- next/api/puppeteer.browserconnectoptions/index.html | 2 +- next/api/puppeteer.browsercontext.browser/index.html | 2 +- .../index.html | 2 +- next/api/puppeteer.browsercontext.close/index.html | 2 +- next/api/puppeteer.browsercontext.isincognito/index.html | 2 +- next/api/puppeteer.browsercontext.newpage/index.html | 2 +- .../puppeteer.browsercontext.overridepermissions/index.html | 2 +- next/api/puppeteer.browsercontext.pages/index.html | 2 +- next/api/puppeteer.browsercontext.targets/index.html | 2 +- next/api/puppeteer.browsercontext.waitfortarget/index.html | 2 +- next/api/puppeteer.browsercontext/index.html | 2 +- next/api/puppeteer.browsercontextevent/index.html | 2 +- next/api/puppeteer.browsercontextevents/index.html | 2 +- next/api/puppeteer.browsercontextoptions/index.html | 2 +- next/api/puppeteer.browserevent/index.html | 2 +- next/api/puppeteer.browserevents/index.html | 2 +- next/api/puppeteer.browserlaunchargumentoptions/index.html | 2 +- next/api/puppeteer.cdpevents/index.html | 2 +- next/api/puppeteer.cdpsession.connection/index.html | 2 +- next/api/puppeteer.cdpsession.detach/index.html | 2 +- next/api/puppeteer.cdpsession.id/index.html | 2 +- next/api/puppeteer.cdpsession.send/index.html | 2 +- next/api/puppeteer.cdpsession/index.html | 2 +- next/api/puppeteer.cdpsessionevent.sessionattached/index.html | 2 +- next/api/puppeteer.cdpsessionevent.sessiondetached/index.html | 2 +- next/api/puppeteer.cdpsessionevent/index.html | 2 +- next/api/puppeteer.cdpsessionevents/index.html | 2 +- next/api/puppeteer.chromereleasechannel/index.html | 2 +- next/api/puppeteer.clearcustomqueryhandlers/index.html | 2 +- next/api/puppeteer.clickoptions/index.html | 2 +- next/api/puppeteer.commandoptions/index.html | 2 +- next/api/puppeteer.commoneventemitter.emit/index.html | 2 +- .../api/puppeteer.commoneventemitter.listenercount/index.html | 2 +- next/api/puppeteer.commoneventemitter.off/index.html | 2 +- next/api/puppeteer.commoneventemitter.on/index.html | 2 +- next/api/puppeteer.commoneventemitter.once/index.html | 2 +- .../index.html | 2 +- next/api/puppeteer.commoneventemitter/index.html | 2 +- next/api/puppeteer.configuration/index.html | 2 +- next/api/puppeteer.connect/index.html | 2 +- next/api/puppeteer.connection._constructor_/index.html | 2 +- next/api/puppeteer.connection.createsession/index.html | 2 +- next/api/puppeteer.connection.dispose/index.html | 2 +- next/api/puppeteer.connection.fromsession/index.html | 2 +- next/api/puppeteer.connection.send/index.html | 2 +- next/api/puppeteer.connection.session/index.html | 2 +- next/api/puppeteer.connection.url/index.html | 2 +- next/api/puppeteer.connection/index.html | 2 +- next/api/puppeteer.connectiontransport.close/index.html | 2 +- next/api/puppeteer.connectiontransport.send/index.html | 2 +- next/api/puppeteer.connectiontransport/index.html | 2 +- next/api/puppeteer.connectoptions/index.html | 2 +- next/api/puppeteer.consolemessage._constructor_/index.html | 2 +- next/api/puppeteer.consolemessage.args/index.html | 2 +- next/api/puppeteer.consolemessage.location/index.html | 2 +- next/api/puppeteer.consolemessage.stacktrace/index.html | 2 +- next/api/puppeteer.consolemessage.text/index.html | 2 +- next/api/puppeteer.consolemessage.type/index.html | 2 +- next/api/puppeteer.consolemessage/index.html | 2 +- next/api/puppeteer.consolemessagelocation/index.html | 2 +- next/api/puppeteer.consolemessagetype/index.html | 2 +- next/api/puppeteer.continuerequestoverrides/index.html | 2 +- next/api/puppeteer.cookie/index.html | 2 +- next/api/puppeteer.cookieparam/index.html | 2 +- next/api/puppeteer.cookiepriority/index.html | 2 +- next/api/puppeteer.cookiesamesite/index.html | 2 +- next/api/puppeteer.cookiesourcescheme/index.html | 2 +- next/api/puppeteer.coverage._constructor_/index.html | 2 +- next/api/puppeteer.coverage.startcsscoverage/index.html | 2 +- next/api/puppeteer.coverage.startjscoverage/index.html | 2 +- next/api/puppeteer.coverage.stopcsscoverage/index.html | 2 +- next/api/puppeteer.coverage.stopjscoverage/index.html | 2 +- next/api/puppeteer.coverage/index.html | 2 +- next/api/puppeteer.coverageentry/index.html | 2 +- next/api/puppeteer.credentials/index.html | 2 +- next/api/puppeteer.csscoverage._constructor_/index.html | 2 +- next/api/puppeteer.csscoverage.start/index.html | 2 +- next/api/puppeteer.csscoverage.stop/index.html | 2 +- next/api/puppeteer.csscoverage/index.html | 2 +- next/api/puppeteer.csscoverageoptions/index.html | 2 +- next/api/puppeteer.customqueryhandler/index.html | 2 +- next/api/puppeteer.customqueryhandlernames/index.html | 2 +- next/api/puppeteer.debuginfo/index.html | 2 +- .../index.html | 2 +- next/api/puppeteer.defaultargs/index.html | 2 +- next/api/puppeteer.deletecookiesrequest/index.html | 2 +- next/api/puppeteer.device/index.html | 2 +- next/api/puppeteer.devicerequestprompt.cancel/index.html | 2 +- next/api/puppeteer.devicerequestprompt.select/index.html | 2 +- .../puppeteer.devicerequestprompt.waitfordevice/index.html | 2 +- next/api/puppeteer.devicerequestprompt/index.html | 2 +- next/api/puppeteer.devicerequestpromptdevice/index.html | 2 +- next/api/puppeteer.dialog.accept/index.html | 2 +- next/api/puppeteer.dialog.defaultvalue/index.html | 2 +- next/api/puppeteer.dialog.dismiss/index.html | 2 +- next/api/puppeteer.dialog.message/index.html | 2 +- next/api/puppeteer.dialog.type/index.html | 2 +- next/api/puppeteer.dialog/index.html | 2 +- next/api/puppeteer.elementfor/index.html | 2 +- next/api/puppeteer.elementhandle._/index.html | 2 +- next/api/puppeteer.elementhandle.__/index.html | 2 +- next/api/puppeteer.elementhandle.__eval/index.html | 2 +- next/api/puppeteer.elementhandle._eval/index.html | 2 +- next/api/puppeteer.elementhandle.autofill/index.html | 2 +- next/api/puppeteer.elementhandle.boundingbox/index.html | 2 +- next/api/puppeteer.elementhandle.boxmodel/index.html | 2 +- next/api/puppeteer.elementhandle.click/index.html | 2 +- next/api/puppeteer.elementhandle.clickablepoint/index.html | 2 +- next/api/puppeteer.elementhandle.contentframe/index.html | 2 +- next/api/puppeteer.elementhandle.contentframe_1/index.html | 2 +- next/api/puppeteer.elementhandle.drag/index.html | 2 +- next/api/puppeteer.elementhandle.draganddrop/index.html | 2 +- next/api/puppeteer.elementhandle.dragenter/index.html | 2 +- next/api/puppeteer.elementhandle.dragover/index.html | 2 +- next/api/puppeteer.elementhandle.drop/index.html | 2 +- next/api/puppeteer.elementhandle.drop_1/index.html | 2 +- next/api/puppeteer.elementhandle.focus/index.html | 2 +- next/api/puppeteer.elementhandle.hover/index.html | 2 +- next/api/puppeteer.elementhandle.ishidden/index.html | 2 +- .../puppeteer.elementhandle.isintersectingviewport/index.html | 2 +- next/api/puppeteer.elementhandle.isvisible/index.html | 2 +- next/api/puppeteer.elementhandle.press/index.html | 2 +- next/api/puppeteer.elementhandle.screenshot/index.html | 2 +- next/api/puppeteer.elementhandle.screenshot_1/index.html | 2 +- next/api/puppeteer.elementhandle.scrollintoview/index.html | 2 +- next/api/puppeteer.elementhandle.select/index.html | 2 +- next/api/puppeteer.elementhandle.tap/index.html | 2 +- next/api/puppeteer.elementhandle.toelement/index.html | 2 +- next/api/puppeteer.elementhandle.touchend/index.html | 2 +- next/api/puppeteer.elementhandle.touchmove/index.html | 2 +- next/api/puppeteer.elementhandle.touchstart/index.html | 2 +- next/api/puppeteer.elementhandle.type/index.html | 2 +- next/api/puppeteer.elementhandle.uploadfile/index.html | 2 +- next/api/puppeteer.elementhandle.waitforselector/index.html | 2 +- next/api/puppeteer.elementhandle/index.html | 2 +- next/api/puppeteer.elementscreenshotoptions/index.html | 2 +- next/api/puppeteer.errorcode/index.html | 2 +- next/api/puppeteer.evaluatefunc/index.html | 2 +- next/api/puppeteer.evaluatefuncwith/index.html | 2 +- next/api/puppeteer.eventemitter.emit/index.html | 2 +- next/api/puppeteer.eventemitter.listenercount/index.html | 2 +- next/api/puppeteer.eventemitter.off/index.html | 2 +- next/api/puppeteer.eventemitter.on/index.html | 2 +- next/api/puppeteer.eventemitter.once/index.html | 2 +- next/api/puppeteer.eventemitter.removealllisteners/index.html | 2 +- next/api/puppeteer.eventemitter/index.html | 2 +- next/api/puppeteer.eventswithwildcard/index.html | 2 +- next/api/puppeteer.eventtype/index.html | 2 +- next/api/puppeteer.executablepath/index.html | 2 +- next/api/puppeteer.experimentsconfiguration/index.html | 2 +- next/api/puppeteer.extensiontransport.close/index.html | 2 +- next/api/puppeteer.extensiontransport.connecttab/index.html | 2 +- next/api/puppeteer.extensiontransport.send/index.html | 2 +- next/api/puppeteer.extensiontransport/index.html | 2 +- next/api/puppeteer.filechooser.accept/index.html | 2 +- next/api/puppeteer.filechooser.cancel/index.html | 2 +- next/api/puppeteer.filechooser.ismultiple/index.html | 2 +- next/api/puppeteer.filechooser/index.html | 2 +- next/api/puppeteer.flattenhandle/index.html | 2 +- next/api/puppeteer.frame._/index.html | 2 +- next/api/puppeteer.frame.__/index.html | 2 +- next/api/puppeteer.frame.__eval/index.html | 2 +- next/api/puppeteer.frame._eval/index.html | 2 +- next/api/puppeteer.frame.addscripttag/index.html | 2 +- next/api/puppeteer.frame.addstyletag/index.html | 2 +- next/api/puppeteer.frame.addstyletag_1/index.html | 2 +- next/api/puppeteer.frame.childframes/index.html | 2 +- next/api/puppeteer.frame.click/index.html | 2 +- next/api/puppeteer.frame.content/index.html | 2 +- next/api/puppeteer.frame.evaluate/index.html | 2 +- next/api/puppeteer.frame.evaluatehandle/index.html | 2 +- next/api/puppeteer.frame.focus/index.html | 2 +- next/api/puppeteer.frame.frameelement/index.html | 2 +- next/api/puppeteer.frame.goto/index.html | 2 +- next/api/puppeteer.frame.hover/index.html | 2 +- next/api/puppeteer.frame.isdetached/index.html | 2 +- next/api/puppeteer.frame.isoopframe/index.html | 2 +- next/api/puppeteer.frame.locator/index.html | 2 +- next/api/puppeteer.frame.locator_1/index.html | 2 +- next/api/puppeteer.frame.name/index.html | 2 +- next/api/puppeteer.frame.page/index.html | 2 +- next/api/puppeteer.frame.parentframe/index.html | 2 +- next/api/puppeteer.frame.select/index.html | 2 +- next/api/puppeteer.frame.setcontent/index.html | 2 +- next/api/puppeteer.frame.tap/index.html | 2 +- next/api/puppeteer.frame.title/index.html | 2 +- next/api/puppeteer.frame.type/index.html | 2 +- next/api/puppeteer.frame.url/index.html | 2 +- next/api/puppeteer.frame.waitforfunction/index.html | 2 +- next/api/puppeteer.frame.waitfornavigation/index.html | 2 +- next/api/puppeteer.frame.waitforselector/index.html | 2 +- next/api/puppeteer.frame/index.html | 2 +- next/api/puppeteer.frameaddscripttagoptions/index.html | 2 +- next/api/puppeteer.frameaddstyletagoptions/index.html | 2 +- next/api/puppeteer.frameevents/index.html | 2 +- next/api/puppeteer.framewaitforfunctionoptions/index.html | 2 +- next/api/puppeteer.geolocationoptions/index.html | 2 +- next/api/puppeteer.gotooptions/index.html | 2 +- next/api/puppeteer.handlefor/index.html | 2 +- next/api/puppeteer.handleor/index.html | 2 +- next/api/puppeteer.handler/index.html | 2 +- next/api/puppeteer.httprequest.abort/index.html | 2 +- next/api/puppeteer.httprequest.aborterrorreason/index.html | 2 +- next/api/puppeteer.httprequest.continue/index.html | 2 +- .../puppeteer.httprequest.continuerequestoverrides/index.html | 2 +- .../puppeteer.httprequest.enqueueinterceptaction/index.html | 2 +- next/api/puppeteer.httprequest.failure/index.html | 2 +- next/api/puppeteer.httprequest.fetchpostdata/index.html | 2 +- .../puppeteer.httprequest.finalizeinterceptions/index.html | 2 +- next/api/puppeteer.httprequest.frame/index.html | 2 +- next/api/puppeteer.httprequest.haspostdata/index.html | 2 +- next/api/puppeteer.httprequest.headers/index.html | 2 +- next/api/puppeteer.httprequest.initiator/index.html | 2 +- .../puppeteer.httprequest.interceptresolutionstate/index.html | 2 +- .../index.html | 2 +- next/api/puppeteer.httprequest.isnavigationrequest/index.html | 2 +- next/api/puppeteer.httprequest.method/index.html | 2 +- next/api/puppeteer.httprequest.postdata/index.html | 2 +- next/api/puppeteer.httprequest.redirectchain/index.html | 2 +- next/api/puppeteer.httprequest.resourcetype/index.html | 2 +- next/api/puppeteer.httprequest.respond/index.html | 2 +- next/api/puppeteer.httprequest.response/index.html | 2 +- next/api/puppeteer.httprequest.responseforrequest/index.html | 2 +- next/api/puppeteer.httprequest.url/index.html | 2 +- next/api/puppeteer.httprequest/index.html | 2 +- next/api/puppeteer.httpresponse.buffer/index.html | 2 +- next/api/puppeteer.httpresponse.frame/index.html | 2 +- next/api/puppeteer.httpresponse.fromcache/index.html | 2 +- next/api/puppeteer.httpresponse.fromserviceworker/index.html | 2 +- next/api/puppeteer.httpresponse.headers/index.html | 2 +- next/api/puppeteer.httpresponse.json/index.html | 2 +- next/api/puppeteer.httpresponse.ok/index.html | 2 +- next/api/puppeteer.httpresponse.remoteaddress/index.html | 2 +- next/api/puppeteer.httpresponse.request/index.html | 2 +- next/api/puppeteer.httpresponse.securitydetails/index.html | 2 +- next/api/puppeteer.httpresponse.status/index.html | 2 +- next/api/puppeteer.httpresponse.statustext/index.html | 2 +- next/api/puppeteer.httpresponse.text/index.html | 2 +- next/api/puppeteer.httpresponse.timing/index.html | 2 +- next/api/puppeteer.httpresponse.url/index.html | 2 +- next/api/puppeteer.httpresponse/index.html | 2 +- next/api/puppeteer.innerparams/index.html | 2 +- next/api/puppeteer.interceptresolutionaction/index.html | 2 +- next/api/puppeteer.interceptresolutionstate/index.html | 2 +- next/api/puppeteer.internalnetworkconditions/index.html | 2 +- next/api/puppeteer.jscoverage._constructor_/index.html | 2 +- next/api/puppeteer.jscoverage.start/index.html | 2 +- next/api/puppeteer.jscoverage.stop/index.html | 2 +- next/api/puppeteer.jscoverage/index.html | 2 +- next/api/puppeteer.jscoverageentry/index.html | 2 +- next/api/puppeteer.jscoverageoptions/index.html | 2 +- next/api/puppeteer.jshandle.aselement/index.html | 2 +- next/api/puppeteer.jshandle.dispose/index.html | 2 +- next/api/puppeteer.jshandle.evaluate/index.html | 2 +- next/api/puppeteer.jshandle.evaluatehandle/index.html | 2 +- next/api/puppeteer.jshandle.getproperties/index.html | 2 +- next/api/puppeteer.jshandle.getproperty/index.html | 2 +- next/api/puppeteer.jshandle.getproperty_1/index.html | 2 +- next/api/puppeteer.jshandle.jsonvalue/index.html | 2 +- next/api/puppeteer.jshandle.remoteobject/index.html | 2 +- next/api/puppeteer.jshandle.tostring/index.html | 2 +- next/api/puppeteer.jshandle/index.html | 2 +- next/api/puppeteer.keyboard.down/index.html | 2 +- next/api/puppeteer.keyboard.press/index.html | 2 +- next/api/puppeteer.keyboard.sendcharacter/index.html | 2 +- next/api/puppeteer.keyboard.type/index.html | 2 +- next/api/puppeteer.keyboard.up/index.html | 2 +- next/api/puppeteer.keyboard/index.html | 2 +- next/api/puppeteer.keyboardtypeoptions/index.html | 2 +- next/api/puppeteer.keydownoptions/index.html | 2 +- next/api/puppeteer.keyinput/index.html | 2 +- next/api/puppeteer.keypressoptions/index.html | 2 +- next/api/puppeteer.knowndevices/index.html | 2 +- next/api/puppeteer.launch/index.html | 2 +- next/api/puppeteer.launchoptions/index.html | 2 +- next/api/puppeteer.locator.click/index.html | 2 +- next/api/puppeteer.locator.clone/index.html | 2 +- next/api/puppeteer.locator.fill/index.html | 2 +- next/api/puppeteer.locator.filter/index.html | 2 +- next/api/puppeteer.locator.hover/index.html | 2 +- next/api/puppeteer.locator.map/index.html | 2 +- next/api/puppeteer.locator.race/index.html | 2 +- next/api/puppeteer.locator.scroll/index.html | 2 +- .../index.html | 2 +- next/api/puppeteer.locator.settimeout/index.html | 2 +- next/api/puppeteer.locator.setvisibility/index.html | 2 +- next/api/puppeteer.locator.setwaitforenabled/index.html | 2 +- .../puppeteer.locator.setwaitforstableboundingbox/index.html | 2 +- next/api/puppeteer.locator.wait/index.html | 2 +- next/api/puppeteer.locator.waithandle/index.html | 2 +- next/api/puppeteer.locator/index.html | 2 +- next/api/puppeteer.locatorclickoptions/index.html | 2 +- next/api/puppeteer.locatorevent/index.html | 2 +- next/api/puppeteer.locatorevents/index.html | 2 +- next/api/puppeteer.locatoroptions/index.html | 2 +- next/api/puppeteer.locatorscrolloptions/index.html | 2 +- next/api/puppeteer.lowercasepaperformat/index.html | 2 +- next/api/puppeteer.mapper/index.html | 2 +- next/api/puppeteer.mediafeature/index.html | 2 +- next/api/puppeteer.metrics/index.html | 2 +- next/api/puppeteer.mouse.click/index.html | 2 +- next/api/puppeteer.mouse.down/index.html | 2 +- next/api/puppeteer.mouse.drag/index.html | 2 +- next/api/puppeteer.mouse.draganddrop/index.html | 2 +- next/api/puppeteer.mouse.dragenter/index.html | 2 +- next/api/puppeteer.mouse.dragover/index.html | 2 +- next/api/puppeteer.mouse.drop/index.html | 2 +- next/api/puppeteer.mouse.move/index.html | 2 +- next/api/puppeteer.mouse.reset/index.html | 2 +- next/api/puppeteer.mouse.up/index.html | 2 +- next/api/puppeteer.mouse.wheel/index.html | 2 +- next/api/puppeteer.mouse/index.html | 2 +- next/api/puppeteer.mousebutton/index.html | 2 +- next/api/puppeteer.mouseclickoptions/index.html | 2 +- next/api/puppeteer.mousemoveoptions/index.html | 2 +- next/api/puppeteer.mouseoptions/index.html | 2 +- next/api/puppeteer.mousewheeloptions/index.html | 2 +- next/api/puppeteer.moveable.move/index.html | 2 +- next/api/puppeteer.moveable/index.html | 2 +- next/api/puppeteer.networkconditions/index.html | 2 +- next/api/puppeteer.newdocumentscriptevaluation/index.html | 2 +- next/api/puppeteer.nodefor/index.html | 2 +- next/api/puppeteer.offset/index.html | 2 +- next/api/puppeteer.page._/index.html | 2 +- next/api/puppeteer.page.__/index.html | 2 +- next/api/puppeteer.page.__eval/index.html | 2 +- next/api/puppeteer.page._eval/index.html | 2 +- next/api/puppeteer.page.addscripttag/index.html | 2 +- next/api/puppeteer.page.addstyletag/index.html | 2 +- next/api/puppeteer.page.addstyletag_1/index.html | 2 +- next/api/puppeteer.page.authenticate/index.html | 2 +- next/api/puppeteer.page.bringtofront/index.html | 2 +- next/api/puppeteer.page.browser/index.html | 2 +- next/api/puppeteer.page.browsercontext/index.html | 2 +- next/api/puppeteer.page.click/index.html | 2 +- next/api/puppeteer.page.close/index.html | 2 +- next/api/puppeteer.page.content/index.html | 2 +- next/api/puppeteer.page.cookies/index.html | 2 +- next/api/puppeteer.page.createcdpsession/index.html | 2 +- next/api/puppeteer.page.createpdfstream/index.html | 2 +- next/api/puppeteer.page.deletecookie/index.html | 2 +- next/api/puppeteer.page.emulate/index.html | 2 +- next/api/puppeteer.page.emulatecputhrottling/index.html | 2 +- next/api/puppeteer.page.emulateidlestate/index.html | 2 +- next/api/puppeteer.page.emulatemediafeatures/index.html | 2 +- next/api/puppeteer.page.emulatemediatype/index.html | 2 +- next/api/puppeteer.page.emulatenetworkconditions/index.html | 2 +- next/api/puppeteer.page.emulatetimezone/index.html | 2 +- next/api/puppeteer.page.emulatevisiondeficiency/index.html | 2 +- next/api/puppeteer.page.evaluate/index.html | 2 +- next/api/puppeteer.page.evaluatehandle/index.html | 2 +- next/api/puppeteer.page.evaluateonnewdocument/index.html | 2 +- next/api/puppeteer.page.exposefunction/index.html | 2 +- next/api/puppeteer.page.focus/index.html | 2 +- next/api/puppeteer.page.frames/index.html | 2 +- next/api/puppeteer.page.getdefaulttimeout/index.html | 2 +- next/api/puppeteer.page.goback/index.html | 2 +- next/api/puppeteer.page.goforward/index.html | 2 +- next/api/puppeteer.page.goto/index.html | 2 +- next/api/puppeteer.page.hover/index.html | 2 +- next/api/puppeteer.page.isclosed/index.html | 2 +- next/api/puppeteer.page.isdraginterceptionenabled/index.html | 2 +- next/api/puppeteer.page.isjavascriptenabled/index.html | 2 +- next/api/puppeteer.page.isserviceworkerbypassed/index.html | 2 +- next/api/puppeteer.page.locator/index.html | 2 +- next/api/puppeteer.page.locator_1/index.html | 2 +- next/api/puppeteer.page.mainframe/index.html | 2 +- next/api/puppeteer.page.metrics/index.html | 2 +- next/api/puppeteer.page.pdf/index.html | 2 +- next/api/puppeteer.page.queryobjects/index.html | 2 +- next/api/puppeteer.page.reload/index.html | 2 +- next/api/puppeteer.page.removeexposedfunction/index.html | 2 +- .../index.html | 2 +- next/api/puppeteer.page.screencast/index.html | 2 +- next/api/puppeteer.page.screenshot/index.html | 2 +- next/api/puppeteer.page.screenshot_1/index.html | 2 +- next/api/puppeteer.page.select/index.html | 2 +- next/api/puppeteer.page.setbypasscsp/index.html | 2 +- next/api/puppeteer.page.setbypassserviceworker/index.html | 2 +- next/api/puppeteer.page.setcacheenabled/index.html | 2 +- next/api/puppeteer.page.setcontent/index.html | 2 +- next/api/puppeteer.page.setcookie/index.html | 2 +- .../api/puppeteer.page.setdefaultnavigationtimeout/index.html | 2 +- next/api/puppeteer.page.setdefaulttimeout/index.html | 2 +- next/api/puppeteer.page.setdraginterception/index.html | 2 +- next/api/puppeteer.page.setextrahttpheaders/index.html | 2 +- next/api/puppeteer.page.setgeolocation/index.html | 2 +- next/api/puppeteer.page.setjavascriptenabled/index.html | 2 +- next/api/puppeteer.page.setofflinemode/index.html | 2 +- next/api/puppeteer.page.setrequestinterception/index.html | 2 +- next/api/puppeteer.page.setuseragent/index.html | 2 +- next/api/puppeteer.page.setviewport/index.html | 2 +- next/api/puppeteer.page.tap/index.html | 2 +- next/api/puppeteer.page.target/index.html | 2 +- next/api/puppeteer.page.title/index.html | 2 +- next/api/puppeteer.page.type/index.html | 2 +- next/api/puppeteer.page.url/index.html | 2 +- next/api/puppeteer.page.viewport/index.html | 2 +- next/api/puppeteer.page.waitfordeviceprompt/index.html | 2 +- next/api/puppeteer.page.waitforfilechooser/index.html | 2 +- next/api/puppeteer.page.waitforframe/index.html | 2 +- next/api/puppeteer.page.waitforfunction/index.html | 2 +- next/api/puppeteer.page.waitfornavigation/index.html | 2 +- next/api/puppeteer.page.waitfornetworkidle/index.html | 2 +- next/api/puppeteer.page.waitforrequest/index.html | 2 +- next/api/puppeteer.page.waitforresponse/index.html | 2 +- next/api/puppeteer.page.waitforselector/index.html | 2 +- next/api/puppeteer.page.workers/index.html | 2 +- next/api/puppeteer.page/index.html | 2 +- next/api/puppeteer.pageevent/index.html | 2 +- next/api/puppeteer.pageevents/index.html | 2 +- next/api/puppeteer.paperformat/index.html | 2 +- next/api/puppeteer.pdfmargin/index.html | 2 +- next/api/puppeteer.pdfoptions/index.html | 2 +- next/api/puppeteer.permission/index.html | 2 +- next/api/puppeteer.point/index.html | 2 +- next/api/puppeteer.predefinednetworkconditions/index.html | 2 +- next/api/puppeteer.predicate/index.html | 2 +- next/api/puppeteer.product/index.html | 2 +- next/api/puppeteer.productlauncher.defaultargs/index.html | 2 +- next/api/puppeteer.productlauncher.executablepath/index.html | 2 +- next/api/puppeteer.productlauncher.launch/index.html | 2 +- next/api/puppeteer.productlauncher/index.html | 2 +- next/api/puppeteer.protocolerror/index.html | 2 +- next/api/puppeteer.protocollifecycleevent/index.html | 2 +- next/api/puppeteer.protocoltype/index.html | 2 +- .../puppeteer.puppeteer.clearcustomqueryhandlers/index.html | 2 +- next/api/puppeteer.puppeteer.connect/index.html | 2 +- .../puppeteer.puppeteer.customqueryhandlernames/index.html | 2 +- .../puppeteer.puppeteer.registercustomqueryhandler/index.html | 2 +- .../index.html | 2 +- next/api/puppeteer.puppeteer/index.html | 2 +- next/api/puppeteer.puppeteererror/index.html | 2 +- next/api/puppeteer.puppeteerlaunchoptions/index.html | 2 +- next/api/puppeteer.puppeteerlifecycleevent/index.html | 2 +- next/api/puppeteer.puppeteernode.connect/index.html | 2 +- next/api/puppeteer.puppeteernode.defaultargs/index.html | 2 +- next/api/puppeteer.puppeteernode.executablepath/index.html | 2 +- next/api/puppeteer.puppeteernode.launch/index.html | 2 +- next/api/puppeteer.puppeteernode.trimcache/index.html | 2 +- next/api/puppeteer.puppeteernode/index.html | 2 +- next/api/puppeteer.puppeteernodelaunchoptions/index.html | 2 +- next/api/puppeteer.quad/index.html | 2 +- next/api/puppeteer.registercustomqueryhandler/index.html | 2 +- next/api/puppeteer.remoteaddress/index.html | 2 +- next/api/puppeteer.resourcetype/index.html | 2 +- next/api/puppeteer.responseforrequest/index.html | 2 +- next/api/puppeteer.screencastoptions/index.html | 2 +- next/api/puppeteer.screenrecorder.stop/index.html | 2 +- next/api/puppeteer.screenrecorder/index.html | 2 +- next/api/puppeteer.screenshotclip/index.html | 2 +- next/api/puppeteer.screenshotoptions/index.html | 2 +- next/api/puppeteer.securitydetails.issuer/index.html | 2 +- next/api/puppeteer.securitydetails.protocol/index.html | 2 +- .../index.html | 2 +- next/api/puppeteer.securitydetails.subjectname/index.html | 2 +- next/api/puppeteer.securitydetails.validfrom/index.html | 2 +- next/api/puppeteer.securitydetails.validto/index.html | 2 +- next/api/puppeteer.securitydetails/index.html | 2 +- next/api/puppeteer.serializedaxnode/index.html | 2 +- next/api/puppeteer.snapshotoptions/index.html | 2 +- next/api/puppeteer.target.aspage/index.html | 2 +- next/api/puppeteer.target.browser/index.html | 2 +- next/api/puppeteer.target.browsercontext/index.html | 2 +- next/api/puppeteer.target.createcdpsession/index.html | 2 +- next/api/puppeteer.target.opener/index.html | 2 +- next/api/puppeteer.target.page/index.html | 2 +- next/api/puppeteer.target.type/index.html | 2 +- next/api/puppeteer.target.url/index.html | 2 +- next/api/puppeteer.target.worker/index.html | 2 +- next/api/puppeteer.target/index.html | 2 +- next/api/puppeteer.targetfiltercallback/index.html | 2 +- next/api/puppeteer.targettype/index.html | 2 +- next/api/puppeteer.timeouterror/index.html | 2 +- next/api/puppeteer.touchscreen.tap/index.html | 2 +- next/api/puppeteer.touchscreen.touchend/index.html | 2 +- next/api/puppeteer.touchscreen.touchmove/index.html | 2 +- next/api/puppeteer.touchscreen.touchstart/index.html | 2 +- next/api/puppeteer.touchscreen/index.html | 2 +- next/api/puppeteer.tracing.start/index.html | 2 +- next/api/puppeteer.tracing.stop/index.html | 2 +- next/api/puppeteer.tracing/index.html | 2 +- next/api/puppeteer.tracingoptions/index.html | 2 +- next/api/puppeteer.trimcache/index.html | 2 +- next/api/puppeteer.unregistercustomqueryhandler/index.html | 2 +- next/api/puppeteer.unsupportedoperation/index.html | 2 +- next/api/puppeteer.viewport/index.html | 2 +- next/api/puppeteer.visibilityoption/index.html | 2 +- next/api/puppeteer.waitfornetworkidleoptions/index.html | 2 +- next/api/puppeteer.waitforoptions/index.html | 2 +- next/api/puppeteer.waitforselectoroptions/index.html | 2 +- next/api/puppeteer.waitfortargetoptions/index.html | 2 +- next/api/puppeteer.waittimeoutoptions/index.html | 2 +- next/api/puppeteer.webworker.close/index.html | 2 +- next/api/puppeteer.webworker.evaluate/index.html | 2 +- next/api/puppeteer.webworker.evaluatehandle/index.html | 2 +- next/api/puppeteer.webworker.url/index.html | 2 +- next/api/puppeteer.webworker/index.html | 2 +- next/browsers-api/browsers.browser/index.html | 2 +- next/browsers-api/browsers.browserplatform/index.html | 2 +- next/browsers-api/browsers.candownload/index.html | 2 +- .../browsers.cdp_websocket_endpoint_regex/index.html | 2 +- next/browsers-api/browsers.chromereleasechannel/index.html | 2 +- next/browsers-api/browsers.cli._constructor_/index.html | 2 +- next/browsers-api/browsers.cli.run/index.html | 2 +- next/browsers-api/browsers.cli/index.html | 2 +- next/browsers-api/browsers.computeexecutablepath/index.html | 2 +- .../browsers.computesystemexecutablepath/index.html | 2 +- next/browsers-api/browsers.createprofile/index.html | 2 +- next/browsers-api/browsers.detectbrowserplatform/index.html | 2 +- next/browsers-api/browsers.getinstalledbrowsers/index.html | 2 +- .../browsers.getinstalledbrowsersoptions/index.html | 2 +- next/browsers-api/browsers.getversioncomparator/index.html | 2 +- next/browsers-api/browsers.install/index.html | 2 +- next/browsers-api/browsers.install_1/index.html | 2 +- .../browsers.installedbrowser.readmetadata/index.html | 2 +- .../browsers.installedbrowser.writemetadata/index.html | 2 +- next/browsers-api/browsers.installedbrowser/index.html | 2 +- next/browsers-api/browsers.installoptions/index.html | 2 +- next/browsers-api/browsers.launch/index.html | 2 +- next/browsers-api/browsers.launchoptions/index.html | 2 +- next/browsers-api/browsers.makeprogresscallback/index.html | 2 +- next/browsers-api/browsers.options/index.html | 2 +- next/browsers-api/browsers.process._constructor_/index.html | 2 +- next/browsers-api/browsers.process.close/index.html | 2 +- next/browsers-api/browsers.process.hasclosed/index.html | 2 +- next/browsers-api/browsers.process.kill/index.html | 2 +- .../browsers.process.waitforlineoutput/index.html | 2 +- next/browsers-api/browsers.process/index.html | 2 +- next/browsers-api/browsers.profileoptions/index.html | 2 +- next/browsers-api/browsers.resolvebuildid/index.html | 2 +- next/browsers-api/browsers.systemoptions/index.html | 2 +- next/browsers-api/browsers.timeouterror/index.html | 2 +- next/browsers-api/browsers.uninstall/index.html | 2 +- next/browsers-api/browsers.uninstalloptions/index.html | 2 +- .../index.html | 2 +- next/browsers-api/index.html | 2 +- next/category/community/index.html | 2 +- next/category/core-concepts/index.html | 2 +- next/category/guides/index.html | 2 +- next/category/integrations/index.html | 2 +- next/category/introduction/index.html | 2 +- next/contributing/index.html | 2 +- next/faq/index.html | 2 +- next/guides/browser-management/index.html | 2 +- next/guides/chrome-extensions/index.html | 2 +- next/guides/configuration/index.html | 2 +- next/guides/cookies/index.html | 2 +- next/guides/debugging/index.html | 2 +- next/guides/docker/index.html | 2 +- next/guides/files/index.html | 2 +- next/guides/getting-started/index.html | 2 +- next/guides/headless-modes/index.html | 2 +- next/guides/installation/index.html | 2 +- next/guides/javascript-execution/index.html | 2 +- next/guides/links/index.html | 2 +- next/guides/network-interception/index.html | 2 +- next/guides/network-logging/index.html | 2 +- next/guides/ng-schematics/index.html | 2 +- next/guides/page-interactions/index.html | 4 ++-- next/guides/pdf-generation/index.html | 2 +- next/guides/running-puppeteer-in-extensions/index.html | 2 +- next/guides/running-puppeteer-in-the-browser/index.html | 2 +- next/guides/screenshots/index.html | 2 +- next/guides/system-requirements/index.html | 2 +- next/guides/what-is-puppeteer/index.html | 2 +- next/index.html | 2 +- next/supported-browsers/index.html | 2 +- next/troubleshooting/index.html | 2 +- next/webdriver-bidi/index.html | 2 +- search/index.html | 2 +- supported-browsers/index.html | 2 +- troubleshooting/index.html | 2 +- webdriver-bidi/index.html | 2 +- 1203 files changed, 1205 insertions(+), 1205 deletions(-) rename assets/js/{1dbd82f5.a8e2414a.js => 1dbd82f5.357b5d8a.js} (75%) rename assets/js/{1dbd82f5.a8e2414a.js.LICENSE.txt => 1dbd82f5.357b5d8a.js.LICENSE.txt} (100%) rename assets/js/{8c74700a.7ee02415.js => 8c74700a.5d4b5d40.js} (75%) rename assets/js/{8c74700a.7ee02415.js.LICENSE.txt => 8c74700a.5d4b5d40.js.LICENSE.txt} (100%) rename assets/js/{runtime~main.131c3633.js => runtime~main.f12904e5.js} (99%) diff --git a/404.html b/404.html index 191309d6af4..c712c653d2f 100644 --- a/404.html +++ b/404.html @@ -6,7 +6,7 @@
P
Selectors",id:"p-selectors",level:3},{value:">>>
and >>>>
combinators",id:"-and--combinators",level:4},{value:"Example",id:"example",level:5},{value:"P
-elements",id:"p-elements",level:4},{value:"Text selectors (-p-text
)",id:"text-selectors--p-text",level:5},{value:"Example",id:"example-1",level:6},{value:"XPath selectors (-p-xpath
)",id:"xpath-selectors--p-xpath",level:5},{value:"Example",id:"example-2",level:6},{value:"ARIA selectors (-p-aria
)",id:"aria-selectors--p-aria",level:5},{value:"Example",id:"example-3",level:6},{value:"Custom selectors",id:"custom-selectors",level:4},{value:"Custom Selectors",id:"custom-selectors-1",level:5},{value:"Custom framework components selector",id:"custom-framework-components-selector",level:5},{value:"Web Components",id:"web-components",level:5},{value:"Query Selectors (legacy)",id:"query-selectors-legacy",level:2},{value:"CSS",id:"css",level:3},{value:"Example",id:"example-4",level:4},{value:"Built-in selectors",id:"built-in-selectors",level:3},{value:"Text selectors (text/
)",id:"text-selectors-text",level:4},{value:"Example",id:"example-5",level:5},{value:"XPath selectors (xpath/
)",id:"xpath-selectors-xpath",level:4},{value:"Example",id:"example-6",level:5},{value:"ARIA selectors (aria/
)",id:"aria-selectors-aria",level:4},{value:"Example",id:"example-7",level:5},{value:"Pierce selectors (pierce/
)",id:"pierce-selectors-pierce",level:4},{value:"Example",id:"example-8",level:5},{value:"Custom selectors",id:"custom-selectors-2",level:3}];function d(e){const n={a:"a",admonition:"admonition",blockquote:"blockquote",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"page-interactions",children:"Page interactions"}),"\n",(0,s.jsx)(n.p,{children:"Puppeteer allows you interact with the pages in various ways."}),"\n",(0,s.jsx)(n.h2,{id:"locators",children:"Locators"}),"\n",(0,s.jsx)(n.p,{children:"Locators is a new, experimental API that combines the functionalities of\nwaiting and actions. With additional precondition checks, it\nenables automatic retries for failed actions, resulting in more reliable and\nless flaky automation scripts."}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsx)(n.p,{children:"Locators API is experimental and we will not follow semver for breaking changes\nin the Locators API."})}),"\n",(0,s.jsx)(n.h3,{id:"use-cases",children:"Use cases"}),"\n",(0,s.jsx)(n.h4,{id:"waiting-for-an-element",children:"Waiting for an element"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"await page.locator('button').wait();\n"})}),"\n",(0,s.jsx)(n.p,{children:"The following preconditions are automatically checked:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Waits for the element to become\n",(0,s.jsx)(n.a,{href:"https://pptr.dev/api/puppeteer.elementhandle.isvisible/",children:"visible"})," or hidden."]}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"waiting-for-a-function",children:"Waiting for a function"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"await page\n .locator(() => {\n let resolve!: (node: HTMLCanvasElement) => void;\n const promise = new Promise(res => {\n return (resolve = res);\n });\n const observer = new MutationObserver(records => {\n for (const record of records) {\n if (record.target instanceof HTMLCanvasElement) {\n resolve(record.target);\n }\n }\n });\n observer.observe(document);\n return promise;\n })\n .wait();\n"})}),"\n",(0,s.jsx)(n.h4,{id:"clicking-an-element",children:"Clicking an element"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"await page.locator('button').click();\n"})}),"\n",(0,s.jsx)(n.p,{children:"The following preconditions are automatically checked:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Ensures the element is in the viewport."}),"\n",(0,s.jsxs)(n.li,{children:["Waits for the element to become\n",(0,s.jsx)(n.a,{href:"https://pptr.dev/api/puppeteer.elementhandle.isvisible/",children:"visible"})," or hidden."]}),"\n",(0,s.jsx)(n.li,{children:"Waits for the element to become enabled."}),"\n",(0,s.jsx)(n.li,{children:"Waits for the element to have a stable bounding box over two consecutive\nanimation frames."}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"clicking-an-element-matching-a-criteria",children:"Clicking an element matching a criteria"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"await page\n .locator('button')\n .filter(button => !button.disabled)\n .click();\n"})}),"\n",(0,s.jsx)(n.p,{children:"The following preconditions are automatically checked:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Ensures the element is in the viewport."}),"\n",(0,s.jsxs)(n.li,{children:["Waits for the element to become\n",(0,s.jsx)(n.a,{href:"https://pptr.dev/api/puppeteer.elementhandle.isvisible/",children:"visible"})," or hidden."]}),"\n",(0,s.jsx)(n.li,{children:"Waits for the element to become enabled."}),"\n",(0,s.jsx)(n.li,{children:"Waits for the element to have a stable bounding box over two consecutive\nanimation frames."}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"filling-out-an-input",children:"Filling out an input"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"await page.locator('input').fill('value');\n"})}),"\n",(0,s.jsx)(n.p,{children:"Automatically detects the input type and choose an appropriate way to fill it out with the provided value."}),"\n",(0,s.jsx)(n.p,{children:"The following preconditions are automatically checked:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Ensures the element is in the viewport."}),"\n",(0,s.jsxs)(n.li,{children:["Waits for the element to become\n",(0,s.jsx)(n.a,{href:"https://pptr.dev/api/puppeteer.elementhandle.isvisible/",children:"visible"})," or hidden."]}),"\n",(0,s.jsx)(n.li,{children:"Waits for the element to become enabled."}),"\n",(0,s.jsx)(n.li,{children:"Waits for the element to have a stable bounding box over two consecutive\nanimation frames."}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"retrieving-an-element-property",children:"Retrieving an element property"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"const enabled = await page\n .locator('button')\n .map(button => !button.disabled)\n .wait();\n"})}),"\n",(0,s.jsx)(n.h4,{id:"hover-over-an-element",children:"Hover over an element"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"await page.locator('div').hover();\n"})}),"\n",(0,s.jsx)(n.p,{children:"The following preconditions are automatically checked:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Ensures the element is in the viewport."}),"\n",(0,s.jsxs)(n.li,{children:["Waits for the element to become\n",(0,s.jsx)(n.a,{href:"https://pptr.dev/api/puppeteer.elementhandle.isvisible/",children:"visible"})," or hidden."]}),"\n",(0,s.jsx)(n.li,{children:"Waits for the element to have a stable bounding box over two consecutive\nanimation frames."}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"scroll-an-element",children:"Scroll an element"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"await page.locator('div').scroll({\n scrollLeft: 10,\n scrollTop: 20,\n});\n"})}),"\n",(0,s.jsx)(n.p,{children:"The following preconditions are automatically checked:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Ensures the element is in the viewport."}),"\n",(0,s.jsxs)(n.li,{children:["Waits for the element to become\n",(0,s.jsx)(n.a,{href:"https://pptr.dev/api/puppeteer.elementhandle.isvisible/",children:"visible"})," or hidden."]}),"\n",(0,s.jsx)(n.li,{children:"Waits for the element to have a stable bounding box over two consecutive\nanimation frames."}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"configuring-locators",children:"Configuring locators"}),"\n",(0,s.jsx)(n.p,{children:"Locators can be configured to tune configure the preconditions and other other options:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"await page\n .locator('button')\n .setEnsureElementIsInTheViewport(false)\n .setTimeout(0)\n .setVisibility(null)\n .setWaitForEnabled(false)\n .setWaitForStableBoundingBox(false)\n .click();\n"})}),"\n",(0,s.jsx)(n.h3,{id:"getting-locator-events",children:"Getting locator events"}),"\n",(0,s.jsx)(n.p,{children:"Currently, locators support a single event that notifies you when the locator is about to perform the action:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"let willClick = false;\nawait page\n .locator('button')\n .on(LocatorEvent.Action, () => {\n willClick = true;\n })\n .click();\n"})}),"\n",(0,s.jsx)(n.p,{children:"This event can be used for logging/debugging or other purposes. The event might\nfire multiple times if the locator retries the action."}),"\n",(0,s.jsx)(n.h2,{id:"query-selectors",children:"Query Selectors"}),"\n",(0,s.jsx)(n.p,{children:"Queries are the primary mechanism for interacting with the DOM on your site. For example, a typical workflow goes like:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"// Import puppeteer\nimport puppeteer from 'puppeteer';\n\n(async () => {\n // Launch the browser\n const browser = await puppeteer.launch();\n\n // Create a page\n const page = await browser.newPage();\n\n // Go to your site\n await page.goto('YOUR_SITE');\n\n // Query for an element handle.\n const element = await page.waitForSelector('div > .class-name');\n\n // Do something with element...\n await element.click(); // Just an example.\n\n // Dispose of handle\n await element.dispose();\n\n // Close browser.\n await browser.close();\n})();\n"})}),"\n",(0,s.jsxs)(n.h3,{id:"p-selectors",children:[(0,s.jsx)(n.code,{children:"P"})," Selectors"]}),"\n",(0,s.jsxs)(n.p,{children:["Puppeteer uses a superset of the CSS selector syntax for querying. We call this syntax ",(0,s.jsx)(n.em,{children:"P selectors"})," and it's supercharged with extra capabilities such as deep combinators and text selection."]}),"\n",(0,s.jsx)(n.admonition,{type:"caution",children:(0,s.jsx)(n.p,{children:"Although P selectors look like real CSS selectors (we intentionally designed it this way), they should not be used for actually CSS styling. They are designed only for Puppeteer."})}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:['P selectors only work on the first "depth" of selectors; for example, ',(0,s.jsx)(n.code,{children:":is(div >>> a)"})," will not work."]})}),"\n",(0,s.jsxs)(n.h4,{id:"-and--combinators",children:[(0,s.jsx)(n.code,{children:">>>"})," and ",(0,s.jsx)(n.code,{children:">>>>"})," combinators"]}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:">>>"})," and ",(0,s.jsx)(n.code,{children:">>>>"})," are called ",(0,s.jsx)(n.em,{children:"deep descendent"})," and ",(0,s.jsx)(n.em,{children:"deep"})," combinators respectively. Both combinators have the effect of going into shadow hosts with ",(0,s.jsx)(n.code,{children:">>>"})," going into every shadow host under a node and ",(0,s.jsx)(n.code,{children:">>>>"})," going into the immediate one (if the node is a shadow host; otherwise, it's a no-op)."]}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["A common question is when should ",(0,s.jsx)(n.code,{children:">>>>"})," be chosen over ",(0,s.jsx)(n.code,{children:">>>"})," considering the flexibility of ",(0,s.jsx)(n.code,{children:">>>"}),". A similar question can be asked about ",(0,s.jsx)(n.code,{children:">"})," and a space; choose ",(0,s.jsx)(n.code,{children:">"})," if you do not need to query all elements under a given node and a space otherwise. This answer extends to ",(0,s.jsx)(n.code,{children:">>>>"})," (",(0,s.jsx)(n.code,{children:">"}),") and ",(0,s.jsx)(n.code,{children:">>>"})," (space) naturally."]})}),"\n",(0,s.jsx)(n.h5,{id:"example",children:"Example"}),"\n",(0,s.jsx)(n.p,{children:"Suppose we have the markup"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-html",children:'P
Selectors",id:"p-selectors",level:3},{value:">>>
and >>>>
combinators",id:"-and--combinators",level:4},{value:"Example",id:"example",level:5},{value:"P
-elements",id:"p-elements",level:4},{value:"Text selectors (-p-text
)",id:"text-selectors--p-text",level:5},{value:"Example",id:"example-1",level:6},{value:"XPath selectors (-p-xpath
)",id:"xpath-selectors--p-xpath",level:5},{value:"Example",id:"example-2",level:6},{value:"ARIA selectors (-p-aria
)",id:"aria-selectors--p-aria",level:5},{value:"Example",id:"example-3",level:6},{value:"Custom selectors",id:"custom-selectors",level:4},{value:"Custom Selectors",id:"custom-selectors-1",level:5},{value:"Custom framework components selector",id:"custom-framework-components-selector",level:5},{value:"Web Components",id:"web-components",level:5},{value:"Query Selectors (legacy)",id:"query-selectors-legacy",level:2},{value:"CSS",id:"css",level:3},{value:"Example",id:"example-4",level:4},{value:"Built-in selectors",id:"built-in-selectors",level:3},{value:"Text selectors (text/
)",id:"text-selectors-text",level:4},{value:"Example",id:"example-5",level:5},{value:"XPath selectors (xpath/
)",id:"xpath-selectors-xpath",level:4},{value:"Example",id:"example-6",level:5},{value:"ARIA selectors (aria/
)",id:"aria-selectors-aria",level:4},{value:"Example",id:"example-7",level:5},{value:"Pierce selectors (pierce/
)",id:"pierce-selectors-pierce",level:4},{value:"Example",id:"example-8",level:5},{value:"Custom selectors",id:"custom-selectors-2",level:3}];function d(e){const n={a:"a",admonition:"admonition",blockquote:"blockquote",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"page-interactions",children:"Page interactions"}),"\n",(0,s.jsx)(n.p,{children:"Puppeteer allows you interact with the pages in various ways."}),"\n",(0,s.jsx)(n.h2,{id:"locators",children:"Locators"}),"\n",(0,s.jsx)(n.p,{children:"Locators is a new, experimental API that combines the functionalities of\nwaiting and actions. With additional precondition checks, it\nenables automatic retries for failed actions, resulting in more reliable and\nless flaky automation scripts."}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsx)(n.p,{children:"Locators API is experimental and we will not follow semver for breaking changes\nin the Locators API."})}),"\n",(0,s.jsx)(n.h3,{id:"use-cases",children:"Use cases"}),"\n",(0,s.jsx)(n.h4,{id:"waiting-for-an-element",children:"Waiting for an element"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"await page.locator('button').wait();\n"})}),"\n",(0,s.jsx)(n.p,{children:"The following preconditions are automatically checked:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Waits for the element to become\n",(0,s.jsx)(n.a,{href:"https://pptr.dev/api/puppeteer.elementhandle.isvisible/",children:"visible"})," or hidden."]}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"waiting-for-a-function",children:"Waiting for a function"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"await page\n .locator(() => {\n let resolve!: (node: HTMLCanvasElement) => void;\n const promise = new Promise(res => {\n return (resolve = res);\n });\n const observer = new MutationObserver(records => {\n for (const record of records) {\n if (record.target instanceof HTMLCanvasElement) {\n resolve(record.target);\n }\n }\n });\n observer.observe(document);\n return promise;\n })\n .wait();\n"})}),"\n",(0,s.jsx)(n.h4,{id:"clicking-an-element",children:"Clicking an element"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"await page.locator('button').click();\n"})}),"\n",(0,s.jsx)(n.p,{children:"The following preconditions are automatically checked:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Ensures the element is in the viewport."}),"\n",(0,s.jsxs)(n.li,{children:["Waits for the element to become\n",(0,s.jsx)(n.a,{href:"https://pptr.dev/api/puppeteer.elementhandle.isvisible/",children:"visible"})," or hidden."]}),"\n",(0,s.jsx)(n.li,{children:"Waits for the element to become enabled."}),"\n",(0,s.jsx)(n.li,{children:"Waits for the element to have a stable bounding box over two consecutive\nanimation frames."}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"clicking-an-element-matching-a-criteria",children:"Clicking an element matching a criteria"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"await page\n .locator('button')\n .filter(button => !button.disabled)\n .click();\n"})}),"\n",(0,s.jsx)(n.p,{children:"The following preconditions are automatically checked:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Ensures the element is in the viewport."}),"\n",(0,s.jsxs)(n.li,{children:["Waits for the element to become\n",(0,s.jsx)(n.a,{href:"https://pptr.dev/api/puppeteer.elementhandle.isvisible/",children:"visible"})," or hidden."]}),"\n",(0,s.jsx)(n.li,{children:"Waits for the element to become enabled."}),"\n",(0,s.jsx)(n.li,{children:"Waits for the element to have a stable bounding box over two consecutive\nanimation frames."}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"filling-out-an-input",children:"Filling out an input"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"await page.locator('input').fill('value');\n"})}),"\n",(0,s.jsx)(n.p,{children:"Automatically detects the input type and choose an appropriate way to fill it out with the provided value."}),"\n",(0,s.jsx)(n.p,{children:"The following preconditions are automatically checked:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Ensures the element is in the viewport."}),"\n",(0,s.jsxs)(n.li,{children:["Waits for the element to become\n",(0,s.jsx)(n.a,{href:"https://pptr.dev/api/puppeteer.elementhandle.isvisible/",children:"visible"})," or hidden."]}),"\n",(0,s.jsx)(n.li,{children:"Waits for the element to become enabled."}),"\n",(0,s.jsx)(n.li,{children:"Waits for the element to have a stable bounding box over two consecutive\nanimation frames."}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"retrieving-an-element-property",children:"Retrieving an element property"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"const enabled = await page\n .locator('button')\n .map(button => !button.disabled)\n .wait();\n"})}),"\n",(0,s.jsx)(n.h4,{id:"hover-over-an-element",children:"Hover over an element"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"await page.locator('div').hover();\n"})}),"\n",(0,s.jsx)(n.p,{children:"The following preconditions are automatically checked:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Ensures the element is in the viewport."}),"\n",(0,s.jsxs)(n.li,{children:["Waits for the element to become\n",(0,s.jsx)(n.a,{href:"https://pptr.dev/api/puppeteer.elementhandle.isvisible/",children:"visible"})," or hidden."]}),"\n",(0,s.jsx)(n.li,{children:"Waits for the element to have a stable bounding box over two consecutive\nanimation frames."}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"scroll-an-element",children:"Scroll an element"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"await page.locator('div').scroll({\n scrollLeft: 10,\n scrollTop: 20,\n});\n"})}),"\n",(0,s.jsx)(n.p,{children:"The following preconditions are automatically checked:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Ensures the element is in the viewport."}),"\n",(0,s.jsxs)(n.li,{children:["Waits for the element to become\n",(0,s.jsx)(n.a,{href:"https://pptr.dev/api/puppeteer.elementhandle.isvisible/",children:"visible"})," or hidden."]}),"\n",(0,s.jsx)(n.li,{children:"Waits for the element to have a stable bounding box over two consecutive\nanimation frames."}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"configuring-locators",children:"Configuring locators"}),"\n",(0,s.jsx)(n.p,{children:"Locators can be configured to tune configure the preconditions and other other options:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"await page\n .locator('button')\n .setEnsureElementIsInTheViewport(false)\n .setTimeout(0)\n .setVisibility(null)\n .setWaitForEnabled(false)\n .setWaitForStableBoundingBox(false)\n .click();\n"})}),"\n",(0,s.jsx)(n.h3,{id:"getting-locator-events",children:"Getting locator events"}),"\n",(0,s.jsx)(n.p,{children:"Currently, locators support a single event that notifies you when the locator is about to perform the action:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"let willClick = false;\nawait page\n .locator('button')\n .on(LocatorEvent.Action, () => {\n willClick = true;\n })\n .click();\n"})}),"\n",(0,s.jsx)(n.p,{children:"This event can be used for logging/debugging or other purposes. The event might\nfire multiple times if the locator retries the action."}),"\n",(0,s.jsx)(n.h2,{id:"query-selectors",children:"Query Selectors"}),"\n",(0,s.jsx)(n.p,{children:"Queries are the primary mechanism for interacting with the DOM on your site. For example, a typical workflow goes like:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"// Import puppeteer\nimport puppeteer from 'puppeteer';\n\n(async () => {\n // Launch the browser\n const browser = await puppeteer.launch();\n\n // Create a page\n const page = await browser.newPage();\n\n // Go to your site\n await page.goto('YOUR_SITE');\n\n // Query for an element handle.\n const element = await page.waitForSelector('div > .class-name');\n\n // Do something with element...\n await element.click(); // Just an example.\n\n // Dispose of handle\n await element.dispose();\n\n // Close browser.\n await browser.close();\n})();\n"})}),"\n",(0,s.jsxs)(n.h3,{id:"p-selectors",children:[(0,s.jsx)(n.code,{children:"P"})," Selectors"]}),"\n",(0,s.jsxs)(n.p,{children:["Puppeteer uses a superset of the CSS selector syntax for querying. We call this syntax ",(0,s.jsx)(n.em,{children:"P selectors"})," and it's supercharged with extra capabilities such as deep combinators and text selection."]}),"\n",(0,s.jsx)(n.admonition,{type:"caution",children:(0,s.jsx)(n.p,{children:"Although P selectors look like real CSS selectors (we intentionally designed it this way), they should not be used for actually CSS styling. They are designed only for Puppeteer."})}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:['P selectors only work on the first "depth" of selectors; for example, ',(0,s.jsx)(n.code,{children:":is(div >>> a)"})," will not work."]})}),"\n",(0,s.jsxs)(n.h4,{id:"-and--combinators",children:[(0,s.jsx)(n.code,{children:">>>"})," and ",(0,s.jsx)(n.code,{children:">>>>"})," combinators"]}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:">>>"})," and ",(0,s.jsx)(n.code,{children:">>>>"})," are called ",(0,s.jsx)(n.em,{children:"deep descendent"})," and ",(0,s.jsx)(n.em,{children:"deep"})," combinators respectively. Both combinators have the effect of going into shadow hosts with ",(0,s.jsx)(n.code,{children:">>>"})," going into every shadow host under a node and ",(0,s.jsx)(n.code,{children:">>>>"})," going into the immediate one (if the node is a shadow host; otherwise, it's a no-op)."]}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["A common question is when should ",(0,s.jsx)(n.code,{children:">>>>"})," be chosen over ",(0,s.jsx)(n.code,{children:">>>"})," considering the flexibility of ",(0,s.jsx)(n.code,{children:">>>"}),". A similar question can be asked about ",(0,s.jsx)(n.code,{children:">"})," and a space; choose ",(0,s.jsx)(n.code,{children:">"})," if you do not need to query all elements under a given node and a space otherwise. This answer extends to ",(0,s.jsx)(n.code,{children:">>>>"})," (",(0,s.jsx)(n.code,{children:">"}),") and ",(0,s.jsx)(n.code,{children:">>>"})," (space) naturally."]})}),"\n",(0,s.jsx)(n.h5,{id:"example",children:"Example"}),"\n",(0,s.jsx)(n.p,{children:"Suppose we have the markup"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-html",children:'P
Selectors",id:"p-selectors",level:3},{value:">>>
and >>>>
combinators",id:"-and--combinators",level:4},{value:"Example",id:"example",level:5},{value:"P
-elements",id:"p-elements",level:4},{value:"Text selectors (-p-text
)",id:"text-selectors--p-text",level:5},{value:"Example",id:"example-1",level:6},{value:"XPath selectors (-p-xpath
)",id:"xpath-selectors--p-xpath",level:5},{value:"Example",id:"example-2",level:6},{value:"ARIA selectors (-p-aria
)",id:"aria-selectors--p-aria",level:5},{value:"Example",id:"example-3",level:6},{value:"Custom selectors",id:"custom-selectors",level:4},{value:"Custom Selectors",id:"custom-selectors-1",level:5},{value:"Custom framework components selector",id:"custom-framework-components-selector",level:5},{value:"Web Components",id:"web-components",level:5},{value:"Query Selectors (legacy)",id:"query-selectors-legacy",level:2},{value:"CSS",id:"css",level:3},{value:"Example",id:"example-4",level:4},{value:"Built-in selectors",id:"built-in-selectors",level:3},{value:"Text selectors (text/
)",id:"text-selectors-text",level:4},{value:"Example",id:"example-5",level:5},{value:"XPath selectors (xpath/
)",id:"xpath-selectors-xpath",level:4},{value:"Example",id:"example-6",level:5},{value:"ARIA selectors (aria/
)",id:"aria-selectors-aria",level:4},{value:"Example",id:"example-7",level:5},{value:"Pierce selectors (pierce/
)",id:"pierce-selectors-pierce",level:4},{value:"Example",id:"example-8",level:5},{value:"Custom selectors",id:"custom-selectors-2",level:3}];function d(e){const n={a:"a",admonition:"admonition",blockquote:"blockquote",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"page-interactions",children:"Page interactions"}),"\n",(0,s.jsx)(n.p,{children:"Puppeteer allows you interact with the pages in various ways."}),"\n",(0,s.jsx)(n.h2,{id:"locators",children:"Locators"}),"\n",(0,s.jsx)(n.p,{children:"Locators is a new, experimental API that combines the functionalities of\nwaiting and actions. With additional precondition checks, it\nenables automatic retries for failed actions, resulting in more reliable and\nless flaky automation scripts."}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsx)(n.p,{children:"Locators API is experimental and we will not follow semver for breaking changes\nin the Locators API."})}),"\n",(0,s.jsx)(n.h3,{id:"use-cases",children:"Use cases"}),"\n",(0,s.jsx)(n.h4,{id:"waiting-for-an-element",children:"Waiting for an element"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"await page.locator('button').wait();\n"})}),"\n",(0,s.jsx)(n.p,{children:"The following preconditions are automatically checked:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Waits for the element to become\n",(0,s.jsx)(n.a,{href:"https://pptr.dev/api/puppeteer.elementhandle.isvisible/",children:"visible"})," or hidden."]}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"waiting-for-a-function",children:"Waiting for a function"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"await page\n .locator(() => {\n let resolve!: (node: HTMLCanvasElement) => void;\n const promise = new Promise(res => {\n return (resolve = res);\n });\n const observer = new MutationObserver(records => {\n for (const record of records) {\n if (record.target instanceof HTMLCanvasElement) {\n resolve(record.target);\n }\n }\n });\n observer.observe(document);\n return promise;\n })\n .wait();\n"})}),"\n",(0,s.jsx)(n.h4,{id:"clicking-an-element",children:"Clicking an element"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"await page.locator('button').click();\n"})}),"\n",(0,s.jsx)(n.p,{children:"The following preconditions are automatically checked:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Ensures the element is in the viewport."}),"\n",(0,s.jsxs)(n.li,{children:["Waits for the element to become\n",(0,s.jsx)(n.a,{href:"https://pptr.dev/api/puppeteer.elementhandle.isvisible/",children:"visible"})," or hidden."]}),"\n",(0,s.jsx)(n.li,{children:"Waits for the element to become enabled."}),"\n",(0,s.jsx)(n.li,{children:"Waits for the element to have a stable bounding box over two consecutive\nanimation frames."}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"clicking-an-element-matching-a-criteria",children:"Clicking an element matching a criteria"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"await page\n .locator('button')\n .filter(button => !button.disabled)\n .click();\n"})}),"\n",(0,s.jsx)(n.p,{children:"The following preconditions are automatically checked:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Ensures the element is in the viewport."}),"\n",(0,s.jsxs)(n.li,{children:["Waits for the element to become\n",(0,s.jsx)(n.a,{href:"https://pptr.dev/api/puppeteer.elementhandle.isvisible/",children:"visible"})," or hidden."]}),"\n",(0,s.jsx)(n.li,{children:"Waits for the element to become enabled."}),"\n",(0,s.jsx)(n.li,{children:"Waits for the element to have a stable bounding box over two consecutive\nanimation frames."}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"filling-out-an-input",children:"Filling out an input"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"await page.locator('input').fill('value');\n"})}),"\n",(0,s.jsx)(n.p,{children:"Automatically detects the input type and choose an appropriate way to fill it out with the provided value."}),"\n",(0,s.jsx)(n.p,{children:"The following preconditions are automatically checked:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Ensures the element is in the viewport."}),"\n",(0,s.jsxs)(n.li,{children:["Waits for the element to become\n",(0,s.jsx)(n.a,{href:"https://pptr.dev/api/puppeteer.elementhandle.isvisible/",children:"visible"})," or hidden."]}),"\n",(0,s.jsx)(n.li,{children:"Waits for the element to become enabled."}),"\n",(0,s.jsx)(n.li,{children:"Waits for the element to have a stable bounding box over two consecutive\nanimation frames."}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"retrieving-an-element-property",children:"Retrieving an element property"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"const enabled = await page\n .locator('button')\n .map(button => !button.disabled)\n .wait();\n"})}),"\n",(0,s.jsx)(n.h4,{id:"hover-over-an-element",children:"Hover over an element"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"await page.locator('div').hover();\n"})}),"\n",(0,s.jsx)(n.p,{children:"The following preconditions are automatically checked:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Ensures the element is in the viewport."}),"\n",(0,s.jsxs)(n.li,{children:["Waits for the element to become\n",(0,s.jsx)(n.a,{href:"https://pptr.dev/api/puppeteer.elementhandle.isvisible/",children:"visible"})," or hidden."]}),"\n",(0,s.jsx)(n.li,{children:"Waits for the element to have a stable bounding box over two consecutive\nanimation frames."}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"scroll-an-element",children:"Scroll an element"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"await page.locator('div').scroll({\n scrollLeft: 10,\n scrollTop: 20,\n});\n"})}),"\n",(0,s.jsx)(n.p,{children:"The following preconditions are automatically checked:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Ensures the element is in the viewport."}),"\n",(0,s.jsxs)(n.li,{children:["Waits for the element to become\n",(0,s.jsx)(n.a,{href:"https://pptr.dev/api/puppeteer.elementhandle.isvisible/",children:"visible"})," or hidden."]}),"\n",(0,s.jsx)(n.li,{children:"Waits for the element to have a stable bounding box over two consecutive\nanimation frames."}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"configuring-locators",children:"Configuring locators"}),"\n",(0,s.jsx)(n.p,{children:"Locators can be configured to tune configure the preconditions and other other options:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"await page\n .locator('button')\n .setEnsureElementIsInTheViewport(false)\n .setTimeout(0)\n .setVisibility(null)\n .setWaitForEnabled(false)\n .setWaitForStableBoundingBox(false)\n .click();\n"})}),"\n",(0,s.jsx)(n.h3,{id:"getting-locator-events",children:"Getting locator events"}),"\n",(0,s.jsx)(n.p,{children:"Currently, locators support a single event that notifies you when the locator is about to perform the action:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"let willClick = false;\nawait page\n .locator('button')\n .on(LocatorEvent.Action, () => {\n willClick = true;\n })\n .click();\n"})}),"\n",(0,s.jsx)(n.p,{children:"This event can be used for logging/debugging or other purposes. The event might\nfire multiple times if the locator retries the action."}),"\n",(0,s.jsx)(n.h2,{id:"query-selectors",children:"Query Selectors"}),"\n",(0,s.jsx)(n.p,{children:"Queries are the primary mechanism for interacting with the DOM on your site. For example, a typical workflow goes like:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"// Import puppeteer\nimport puppeteer from 'puppeteer';\n\n(async () => {\n // Launch the browser\n const browser = await puppeteer.launch();\n\n // Create a page\n const page = await browser.newPage();\n\n // Go to your site\n await page.goto('YOUR_SITE');\n\n // Query for an element handle.\n const element = await page.waitForSelector('div > .class-name');\n\n // Do something with element...\n await element.click(); // Just an example.\n\n // Dispose of handle\n await element.dispose();\n\n // Close browser.\n await browser.close();\n})();\n"})}),"\n",(0,s.jsxs)(n.h3,{id:"p-selectors",children:[(0,s.jsx)(n.code,{children:"P"})," Selectors"]}),"\n",(0,s.jsxs)(n.p,{children:["Puppeteer uses a superset of the CSS selector syntax for querying. We call this syntax ",(0,s.jsx)(n.em,{children:"P selectors"})," and it's supercharged with extra capabilities such as deep combinators and text selection."]}),"\n",(0,s.jsx)(n.admonition,{type:"caution",children:(0,s.jsx)(n.p,{children:"Although P selectors look like real CSS selectors (we intentionally designed it this way), they should not be used for actually CSS styling. They are designed only for Puppeteer."})}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:['P selectors only work on the first "depth" of selectors; for example, ',(0,s.jsx)(n.code,{children:":is(div >>> a)"})," will not work."]})}),"\n",(0,s.jsxs)(n.h4,{id:"-and--combinators",children:[(0,s.jsx)(n.code,{children:">>>"})," and ",(0,s.jsx)(n.code,{children:">>>>"})," combinators"]}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:">>>"})," and ",(0,s.jsx)(n.code,{children:">>>>"})," are called ",(0,s.jsx)(n.em,{children:"deep descendent"})," and ",(0,s.jsx)(n.em,{children:"deep"})," combinators respectively. Both combinators have the effect of going into shadow hosts with ",(0,s.jsx)(n.code,{children:">>>"})," going into every shadow host under a node and ",(0,s.jsx)(n.code,{children:">>>>"})," going into the immediate one (if the node is a shadow host; otherwise, it's a no-op)."]}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["A common question is when should ",(0,s.jsx)(n.code,{children:">>>>"})," be chosen over ",(0,s.jsx)(n.code,{children:">>>"})," considering the flexibility of ",(0,s.jsx)(n.code,{children:">>>"}),". A similar question can be asked about ",(0,s.jsx)(n.code,{children:">"})," and a space; choose ",(0,s.jsx)(n.code,{children:">"})," if you do not need to query all elements under a given node and a space otherwise. This answer extends to ",(0,s.jsx)(n.code,{children:">>>>"})," (",(0,s.jsx)(n.code,{children:">"}),") and ",(0,s.jsx)(n.code,{children:">>>"})," (space) naturally."]})}),"\n",(0,s.jsx)(n.h5,{id:"example",children:"Example"}),"\n",(0,s.jsx)(n.p,{children:"Suppose we have the markup"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-html",children:'P
Selectors",id:"p-selectors",level:3},{value:">>>
and >>>>
combinators",id:"-and--combinators",level:4},{value:"Example",id:"example",level:5},{value:"P
-elements",id:"p-elements",level:4},{value:"Text selectors (-p-text
)",id:"text-selectors--p-text",level:5},{value:"Example",id:"example-1",level:6},{value:"XPath selectors (-p-xpath
)",id:"xpath-selectors--p-xpath",level:5},{value:"Example",id:"example-2",level:6},{value:"ARIA selectors (-p-aria
)",id:"aria-selectors--p-aria",level:5},{value:"Example",id:"example-3",level:6},{value:"Custom selectors",id:"custom-selectors",level:4},{value:"Custom Selectors",id:"custom-selectors-1",level:5},{value:"Custom framework components selector",id:"custom-framework-components-selector",level:5},{value:"Web Components",id:"web-components",level:5},{value:"Query Selectors (legacy)",id:"query-selectors-legacy",level:2},{value:"CSS",id:"css",level:3},{value:"Example",id:"example-4",level:4},{value:"Built-in selectors",id:"built-in-selectors",level:3},{value:"Text selectors (text/
)",id:"text-selectors-text",level:4},{value:"Example",id:"example-5",level:5},{value:"XPath selectors (xpath/
)",id:"xpath-selectors-xpath",level:4},{value:"Example",id:"example-6",level:5},{value:"ARIA selectors (aria/
)",id:"aria-selectors-aria",level:4},{value:"Example",id:"example-7",level:5},{value:"Pierce selectors (pierce/
)",id:"pierce-selectors-pierce",level:4},{value:"Example",id:"example-8",level:5},{value:"Custom selectors",id:"custom-selectors-2",level:3}];function d(e){const n={a:"a",admonition:"admonition",blockquote:"blockquote",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"page-interactions",children:"Page interactions"}),"\n",(0,s.jsx)(n.p,{children:"Puppeteer allows you interact with the pages in various ways."}),"\n",(0,s.jsx)(n.h2,{id:"locators",children:"Locators"}),"\n",(0,s.jsx)(n.p,{children:"Locators is a new, experimental API that combines the functionalities of\nwaiting and actions. With additional precondition checks, it\nenables automatic retries for failed actions, resulting in more reliable and\nless flaky automation scripts."}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsx)(n.p,{children:"Locators API is experimental and we will not follow semver for breaking changes\nin the Locators API."})}),"\n",(0,s.jsx)(n.h3,{id:"use-cases",children:"Use cases"}),"\n",(0,s.jsx)(n.h4,{id:"waiting-for-an-element",children:"Waiting for an element"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"await page.locator('button').wait();\n"})}),"\n",(0,s.jsx)(n.p,{children:"The following preconditions are automatically checked:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Waits for the element to become\n",(0,s.jsx)(n.a,{href:"https://pptr.dev/api/puppeteer.elementhandle.isvisible/",children:"visible"})," or hidden."]}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"waiting-for-a-function",children:"Waiting for a function"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"await page\n .locator(() => {\n let resolve!: (node: HTMLCanvasElement) => void;\n const promise = new Promise(res => {\n return (resolve = res);\n });\n const observer = new MutationObserver(records => {\n for (const record of records) {\n if (record.target instanceof HTMLCanvasElement) {\n resolve(record.target);\n }\n }\n });\n observer.observe(document);\n return promise;\n })\n .wait();\n"})}),"\n",(0,s.jsx)(n.h4,{id:"clicking-an-element",children:"Clicking an element"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"await page.locator('button').click();\n"})}),"\n",(0,s.jsx)(n.p,{children:"The following preconditions are automatically checked:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Ensures the element is in the viewport."}),"\n",(0,s.jsxs)(n.li,{children:["Waits for the element to become\n",(0,s.jsx)(n.a,{href:"https://pptr.dev/api/puppeteer.elementhandle.isvisible/",children:"visible"})," or hidden."]}),"\n",(0,s.jsx)(n.li,{children:"Waits for the element to become enabled."}),"\n",(0,s.jsx)(n.li,{children:"Waits for the element to have a stable bounding box over two consecutive\nanimation frames."}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"clicking-an-element-matching-a-criteria",children:"Clicking an element matching a criteria"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"await page\n .locator('button')\n .filter(button => !button.disabled)\n .click();\n"})}),"\n",(0,s.jsx)(n.p,{children:"The following preconditions are automatically checked:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Ensures the element is in the viewport."}),"\n",(0,s.jsxs)(n.li,{children:["Waits for the element to become\n",(0,s.jsx)(n.a,{href:"https://pptr.dev/api/puppeteer.elementhandle.isvisible/",children:"visible"})," or hidden."]}),"\n",(0,s.jsx)(n.li,{children:"Waits for the element to become enabled."}),"\n",(0,s.jsx)(n.li,{children:"Waits for the element to have a stable bounding box over two consecutive\nanimation frames."}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"filling-out-an-input",children:"Filling out an input"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"await page.locator('input').fill('value');\n"})}),"\n",(0,s.jsx)(n.p,{children:"Automatically detects the input type and choose an appropriate way to fill it out with the provided value."}),"\n",(0,s.jsx)(n.p,{children:"The following preconditions are automatically checked:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Ensures the element is in the viewport."}),"\n",(0,s.jsxs)(n.li,{children:["Waits for the element to become\n",(0,s.jsx)(n.a,{href:"https://pptr.dev/api/puppeteer.elementhandle.isvisible/",children:"visible"})," or hidden."]}),"\n",(0,s.jsx)(n.li,{children:"Waits for the element to become enabled."}),"\n",(0,s.jsx)(n.li,{children:"Waits for the element to have a stable bounding box over two consecutive\nanimation frames."}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"retrieving-an-element-property",children:"Retrieving an element property"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"const enabled = await page\n .locator('button')\n .map(button => !button.disabled)\n .wait();\n"})}),"\n",(0,s.jsx)(n.h4,{id:"hover-over-an-element",children:"Hover over an element"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"await page.locator('div').hover();\n"})}),"\n",(0,s.jsx)(n.p,{children:"The following preconditions are automatically checked:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Ensures the element is in the viewport."}),"\n",(0,s.jsxs)(n.li,{children:["Waits for the element to become\n",(0,s.jsx)(n.a,{href:"https://pptr.dev/api/puppeteer.elementhandle.isvisible/",children:"visible"})," or hidden."]}),"\n",(0,s.jsx)(n.li,{children:"Waits for the element to have a stable bounding box over two consecutive\nanimation frames."}),"\n"]}),"\n",(0,s.jsx)(n.h4,{id:"scroll-an-element",children:"Scroll an element"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"await page.locator('div').scroll({\n scrollLeft: 10,\n scrollTop: 20,\n});\n"})}),"\n",(0,s.jsx)(n.p,{children:"The following preconditions are automatically checked:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Ensures the element is in the viewport."}),"\n",(0,s.jsxs)(n.li,{children:["Waits for the element to become\n",(0,s.jsx)(n.a,{href:"https://pptr.dev/api/puppeteer.elementhandle.isvisible/",children:"visible"})," or hidden."]}),"\n",(0,s.jsx)(n.li,{children:"Waits for the element to have a stable bounding box over two consecutive\nanimation frames."}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"configuring-locators",children:"Configuring locators"}),"\n",(0,s.jsx)(n.p,{children:"Locators can be configured to tune configure the preconditions and other other options:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"await page\n .locator('button')\n .setEnsureElementIsInTheViewport(false)\n .setTimeout(0)\n .setVisibility(null)\n .setWaitForEnabled(false)\n .setWaitForStableBoundingBox(false)\n .click();\n"})}),"\n",(0,s.jsx)(n.h3,{id:"getting-locator-events",children:"Getting locator events"}),"\n",(0,s.jsx)(n.p,{children:"Currently, locators support a single event that notifies you when the locator is about to perform the action:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"let willClick = false;\nawait page\n .locator('button')\n .on(LocatorEvent.Action, () => {\n willClick = true;\n })\n .click();\n"})}),"\n",(0,s.jsx)(n.p,{children:"This event can be used for logging/debugging or other purposes. The event might\nfire multiple times if the locator retries the action."}),"\n",(0,s.jsx)(n.h2,{id:"query-selectors",children:"Query Selectors"}),"\n",(0,s.jsx)(n.p,{children:"Queries are the primary mechanism for interacting with the DOM on your site. For example, a typical workflow goes like:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ts",children:"// Import puppeteer\nimport puppeteer from 'puppeteer';\n\n(async () => {\n // Launch the browser\n const browser = await puppeteer.launch();\n\n // Create a page\n const page = await browser.newPage();\n\n // Go to your site\n await page.goto('YOUR_SITE');\n\n // Query for an element handle.\n const element = await page.waitForSelector('div > .class-name');\n\n // Do something with element...\n await element.click(); // Just an example.\n\n // Dispose of handle\n await element.dispose();\n\n // Close browser.\n await browser.close();\n})();\n"})}),"\n",(0,s.jsxs)(n.h3,{id:"p-selectors",children:[(0,s.jsx)(n.code,{children:"P"})," Selectors"]}),"\n",(0,s.jsxs)(n.p,{children:["Puppeteer uses a superset of the CSS selector syntax for querying. We call this syntax ",(0,s.jsx)(n.em,{children:"P selectors"})," and it's supercharged with extra capabilities such as deep combinators and text selection."]}),"\n",(0,s.jsx)(n.admonition,{type:"caution",children:(0,s.jsx)(n.p,{children:"Although P selectors look like real CSS selectors (we intentionally designed it this way), they should not be used for actually CSS styling. They are designed only for Puppeteer."})}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:['P selectors only work on the first "depth" of selectors; for example, ',(0,s.jsx)(n.code,{children:":is(div >>> a)"})," will not work."]})}),"\n",(0,s.jsxs)(n.h4,{id:"-and--combinators",children:[(0,s.jsx)(n.code,{children:">>>"})," and ",(0,s.jsx)(n.code,{children:">>>>"})," combinators"]}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:">>>"})," and ",(0,s.jsx)(n.code,{children:">>>>"})," are called ",(0,s.jsx)(n.em,{children:"deep descendent"})," and ",(0,s.jsx)(n.em,{children:"deep"})," combinators respectively. Both combinators have the effect of going into shadow hosts with ",(0,s.jsx)(n.code,{children:">>>"})," going into every shadow host under a node and ",(0,s.jsx)(n.code,{children:">>>>"})," going into the immediate one (if the node is a shadow host; otherwise, it's a no-op)."]}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["A common question is when should ",(0,s.jsx)(n.code,{children:">>>>"})," be chosen over ",(0,s.jsx)(n.code,{children:">>>"})," considering the flexibility of ",(0,s.jsx)(n.code,{children:">>>"}),". A similar question can be asked about ",(0,s.jsx)(n.code,{children:">"})," and a space; choose ",(0,s.jsx)(n.code,{children:">"})," if you do not need to query all elements under a given node and a space otherwise. This answer extends to ",(0,s.jsx)(n.code,{children:">>>>"})," (",(0,s.jsx)(n.code,{children:">"}),") and ",(0,s.jsx)(n.code,{children:">>>"})," (space) naturally."]})}),"\n",(0,s.jsx)(n.h5,{id:"example",children:"Example"}),"\n",(0,s.jsx)(n.p,{children:"Suppose we have the markup"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-html",children:'declare global {
interface HTMLElementTagNameMap {
'my-web-component': MyWebComponent;
}
}
While we maintin prefixed selectors, the recommended way is to use the selector syntax documented above.
While we maintain prefixed selectors, the recommended way is to use the selector syntax documented above.
Queries are the primary mechanism for interacting with the DOM on your site. For example, a typical workflow goes like:
// Import puppeteer
import puppeteer from 'puppeteer';
(async () => {
// Launch the browser
const browser = await puppeteer.launch();
// Create a page
const page = await browser.newPage();
// Go to your site
await page.goto('YOUR_SITE');
// Query for an element handle.
const element = await page.waitForSelector('div > .class-name');
// Do something with element...
await element.click(); // Just an example.
// Dispose of handle
await element.dispose();
// Close browser.
await browser.close();
})();
declare global {
interface HTMLElementTagNameMap {
'my-web-component': MyWebComponent;
}
}
While we maintin prefixed selectors, the recommended way is to use the selector syntax documented above.
While we maintain prefixed selectors, the recommended way is to use the selector syntax documented above.
Queries are the primary mechanism for interacting with the DOM on your site. For example, a typical workflow goes like:
// Import puppeteer
import puppeteer from 'puppeteer';
(async () => {
// Launch the browser
const browser = await puppeteer.launch();
// Create a page
const page = await browser.newPage();
// Go to your site
await page.goto('YOUR_SITE');
// Query for an element handle.
const element = await page.waitForSelector('div > .class-name');
// Do something with element...
await element.click(); // Just an example.
// Dispose of handle
await element.dispose();
// Close browser.
await browser.close();
})();