From 9b6f957e7b2b431bcefeef3ec118ea9403bfcc00 Mon Sep 17 00:00:00 2001 From: Randolf J Date: Wed, 29 Jun 2022 15:00:37 +0200 Subject: [PATCH] feat: add documentation --- .eslintignore | 1 - .github/workflows/ci.yml | 64 +- .github/workflows/pre-release.yml | 10 +- .github/workflows/publish.yml | 22 - .gitignore | 46 +- .prettierignore | 5 +- README.md | 338 +- docs/api.md | 5645 ---- docs/api/index.md | 166 + docs/api/puppeteer.accessibility.md | 29 + docs/api/puppeteer.accessibility.snapshot.md | 59 + docs/api/puppeteer.actionresult.md | 11 + docs/api/puppeteer.awaitable.md | 11 + docs/api/puppeteer.boundingbox.height.md | 15 + docs/api/puppeteer.boundingbox.md | 20 + docs/api/puppeteer.boundingbox.width.md | 15 + docs/api/puppeteer.boxmodel.border.md | 13 + docs/api/puppeteer.boxmodel.content.md | 13 + docs/api/puppeteer.boxmodel.height.md | 13 + docs/api/puppeteer.boxmodel.margin.md | 13 + docs/api/puppeteer.boxmodel.md | 22 + docs/api/puppeteer.boxmodel.padding.md | 13 + docs/api/puppeteer.boxmodel.width.md | 13 + docs/api/puppeteer.browser.browsercontexts.md | 19 + docs/api/puppeteer.browser.close.md | 19 + ...r.browser.createincognitobrowsercontext.md | 41 + ...puppeteer.browser.defaultbrowsercontext.md | 19 + docs/api/puppeteer.browser.disconnect.md | 19 + docs/api/puppeteer.browser.isconnected.md | 19 + docs/api/puppeteer.browser.md | 77 + docs/api/puppeteer.browser.newpage.md | 19 + docs/api/puppeteer.browser.pages.md | 23 + docs/api/puppeteer.browser.process.md | 19 + docs/api/puppeteer.browser.target.md | 19 + docs/api/puppeteer.browser.targets.md | 19 + docs/api/puppeteer.browser.useragent.md | 19 + docs/api/puppeteer.browser.version.md | 25 + docs/api/puppeteer.browser.waitfortarget.md | 42 + docs/api/puppeteer.browser.wsendpoint.md | 27 + ...r.browserconnectoptions.defaultviewport.md | 15 + ...browserconnectoptions.ignorehttpserrors.md | 15 + docs/api/puppeteer.browserconnectoptions.md | 22 + .../puppeteer.browserconnectoptions.slowmo.md | 15 + ...teer.browserconnectoptions.targetfilter.md | 15 + docs/api/puppeteer.browsercontext.browser.md | 19 + ...browsercontext.clearpermissionoverrides.md | 28 + docs/api/puppeteer.browsercontext.close.md | 23 + .../puppeteer.browsercontext.isincognito.md | 23 + docs/api/puppeteer.browsercontext.md | 52 + docs/api/puppeteer.browsercontext.newpage.md | 19 + ...teer.browsercontext.overridepermissions.md | 31 + docs/api/puppeteer.browsercontext.pages.md | 21 + docs/api/puppeteer.browsercontext.targets.md | 19 + .../puppeteer.browsercontext.waitfortarget.md | 44 + .../puppeteer.browsercontextemittedevents.md | 19 + docs/api/puppeteer.browsercontextoptions.md | 20 + ...r.browsercontextoptions.proxybypasslist.md | 15 + ...eteer.browsercontextoptions.proxyserver.md | 15 + docs/api/puppeteer.browseremittedevents.md | 22 + .../puppeteer.browserfetcher.candownload.md | 31 + docs/api/puppeteer.browserfetcher.download.md | 35 + docs/api/puppeteer.browserfetcher.host.md | 19 + ...puppeteer.browserfetcher.localrevisions.md | 23 + docs/api/puppeteer.browserfetcher.md | 46 + docs/api/puppeteer.browserfetcher.platform.md | 19 + docs/api/puppeteer.browserfetcher.product.md | 19 + docs/api/puppeteer.browserfetcher.remove.md | 29 + .../puppeteer.browserfetcher.revisioninfo.md | 25 + .../puppeteer.browserfetcheroptions.host.md | 13 + docs/api/puppeteer.browserfetcheroptions.md | 20 + .../puppeteer.browserfetcheroptions.path.md | 13 + ...uppeteer.browserfetcheroptions.platform.md | 13 + ...puppeteer.browserfetcheroptions.product.md | 13 + ...owserfetcherrevisioninfo.executablepath.md | 13 + ...r.browserfetcherrevisioninfo.folderpath.md | 13 + ...peteer.browserfetcherrevisioninfo.local.md | 13 + .../puppeteer.browserfetcherrevisioninfo.md | 22 + ...teer.browserfetcherrevisioninfo.product.md | 13 + ...eer.browserfetcherrevisioninfo.revision.md | 13 + ...uppeteer.browserfetcherrevisioninfo.url.md | 13 + ...eteer.browserlaunchargumentoptions.args.md | 15 + ...wserlaunchargumentoptions.debuggingport.md | 13 + ...r.browserlaunchargumentoptions.devtools.md | 15 + ...r.browserlaunchargumentoptions.headless.md | 15 + .../puppeteer.browserlaunchargumentoptions.md | 23 + ...rowserlaunchargumentoptions.userdatadir.md | 15 + docs/api/puppeteer.cdpsession.connection.md | 17 + docs/api/puppeteer.cdpsession.detach.md | 19 + docs/api/puppeteer.cdpsession.id.md | 19 + docs/api/puppeteer.cdpsession.md | 47 + docs/api/puppeteer.cdpsession.send.md | 27 + ...ppeteer.cdpsessiononmessageobject.error.md | 17 + .../puppeteer.cdpsessiononmessageobject.id.md | 13 + .../puppeteer.cdpsessiononmessageobject.md | 21 + ...peteer.cdpsessiononmessageobject.method.md | 13 + ...peteer.cdpsessiononmessageobject.params.md | 13 + ...peteer.cdpsessiononmessageobject.result.md | 13 + docs/api/puppeteer.chromereleasechannel.md | 15 + .../api/puppeteer.clearcustomqueryhandlers.md | 17 + docs/api/puppeteer.clickoptions.button.md | 13 + docs/api/puppeteer.clickoptions.clickcount.md | 13 + docs/api/puppeteer.clickoptions.delay.md | 15 + docs/api/puppeteer.clickoptions.md | 20 + docs/api/puppeteer.clickoptions.offset.md | 15 + ...uppeteer.commoneventemitter.addlistener.md | 24 + docs/api/puppeteer.commoneventemitter.emit.md | 24 + ...peteer.commoneventemitter.listenercount.md | 23 + docs/api/puppeteer.commoneventemitter.md | 24 + docs/api/puppeteer.commoneventemitter.off.md | 24 + docs/api/puppeteer.commoneventemitter.on.md | 24 + docs/api/puppeteer.commoneventemitter.once.md | 24 + ...r.commoneventemitter.removealllisteners.md | 23 + ...eteer.commoneventemitter.removelistener.md | 24 + docs/api/puppeteer.connect.md | 11 + .../api/puppeteer.connection._constructor_.md | 23 + .../api/puppeteer.connection.createsession.md | 25 + docs/api/puppeteer.connection.dispose.md | 17 + docs/api/puppeteer.connection.fromsession.md | 23 + docs/api/puppeteer.connection.md | 30 + docs/api/puppeteer.connection.send.md | 27 + docs/api/puppeteer.connection.session.md | 25 + docs/api/puppeteer.connection.url.md | 17 + .../api/puppeteer.connectioncallback.error.md | 13 + docs/api/puppeteer.connectioncallback.md | 25 + .../puppeteer.connectioncallback.method.md | 13 + .../puppeteer.connectioncallback.reject.md | 23 + .../puppeteer.connectioncallback.resolve.md | 23 + .../puppeteer.connectiontransport.close.md | 17 + docs/api/puppeteer.connectiontransport.md | 25 + .../puppeteer.connectiontransport.onclose.md | 13 + ...puppeteer.connectiontransport.onmessage.md | 13 + .../api/puppeteer.connectiontransport.send.md | 23 + .../puppeteer.connectoptions.browserurl.md | 13 + ...peteer.connectoptions.browserwsendpoint.md | 13 + docs/api/puppeteer.connectoptions.md | 22 + docs/api/puppeteer.connectoptions.product.md | 13 + .../api/puppeteer.connectoptions.transport.md | 13 + .../puppeteer.consolemessage._constructor_.md | 29 + docs/api/puppeteer.consolemessage.args.md | 19 + docs/api/puppeteer.consolemessage.location.md | 19 + docs/api/puppeteer.consolemessage.md | 29 + .../puppeteer.consolemessage.stacktrace.md | 19 + docs/api/puppeteer.consolemessage.text.md | 19 + docs/api/puppeteer.consolemessage.type.md | 19 + ...eer.consolemessagelocation.columnnumber.md | 15 + ...eteer.consolemessagelocation.linenumber.md | 15 + docs/api/puppeteer.consolemessagelocation.md | 19 + .../puppeteer.consolemessagelocation.url.md | 15 + docs/api/puppeteer.consolemessagetype.md | 32 + ...peteer.continuerequestoverrides.headers.md | 13 + .../api/puppeteer.continuerequestoverrides.md | 20 + ...ppeteer.continuerequestoverrides.method.md | 13 + ...eteer.continuerequestoverrides.postdata.md | 13 + .../puppeteer.continuerequestoverrides.url.md | 15 + docs/api/puppeteer.coverage._constructor_.md | 21 + docs/api/puppeteer.coverage.md | 59 + .../puppeteer.coverage.startcsscoverage.md | 25 + .../api/puppeteer.coverage.startjscoverage.md | 29 + .../api/puppeteer.coverage.stopcsscoverage.md | 23 + docs/api/puppeteer.coverage.stopjscoverage.md | 23 + docs/api/puppeteer.coverageentry.md | 21 + docs/api/puppeteer.coverageentry.ranges.md | 18 + docs/api/puppeteer.coverageentry.text.md | 15 + docs/api/puppeteer.coverageentry.url.md | 15 + docs/api/puppeteer.createbrowserfetcher.md | 12 + docs/api/puppeteer.credentials.md | 18 + docs/api/puppeteer.credentials.password.md | 13 + docs/api/puppeteer.credentials.username.md | 13 + .../puppeteer.csscoverage._constructor_.md | 21 + docs/api/puppeteer.csscoverage.md | 24 + docs/api/puppeteer.csscoverage.start.md | 23 + docs/api/puppeteer.csscoverage.stop.md | 17 + docs/api/puppeteer.csscoverageoptions.md | 19 + ...er.csscoverageoptions.resetonnavigation.md | 15 + .../puppeteer.customerror._constructor_.md | 21 + docs/api/puppeteer.customerror.md | 19 + docs/api/puppeteer.customqueryhandler.md | 20 + .../puppeteer.customqueryhandler.queryall.md | 16 + .../puppeteer.customqueryhandler.queryone.md | 13 + docs/api/puppeteer.customqueryhandlernames.md | 17 + ...r.default_intercept_resolution_priority.md | 13 + docs/api/puppeteer.defaultargs.md | 11 + docs/api/puppeteer.device.md | 19 + docs/api/puppeteer.device.name.md | 13 + docs/api/puppeteer.device.useragent.md | 13 + docs/api/puppeteer.device.viewport.md | 20 + docs/api/puppeteer.devices.md | 29 + docs/api/puppeteer.devicesmap.md | 15 + docs/api/puppeteer.dialog.accept.md | 25 + docs/api/puppeteer.dialog.defaultvalue.md | 19 + docs/api/puppeteer.dialog.dismiss.md | 19 + docs/api/puppeteer.dialog.md | 44 + docs/api/puppeteer.dialog.message.md | 19 + docs/api/puppeteer.dialog.type.md | 19 + docs/api/puppeteer.elementhandle._.md | 33 + docs/api/puppeteer.elementhandle.__.md | 33 + docs/api/puppeteer.elementhandle.__1.md | 23 + docs/api/puppeteer.elementhandle.___1.md | 23 + docs/api/puppeteer.elementhandle.__eval.md | 57 + docs/api/puppeteer.elementhandle.__eval_1.md | 34 + docs/api/puppeteer.elementhandle._eval.md | 47 + docs/api/puppeteer.elementhandle._eval_1.md | 34 + docs/api/puppeteer.elementhandle._x.md | 25 + docs/api/puppeteer.elementhandle.aselement.md | 17 + .../puppeteer.elementhandle.boundingbox.md | 19 + docs/api/puppeteer.elementhandle.boxmodel.md | 23 + docs/api/puppeteer.elementhandle.click.md | 25 + .../puppeteer.elementhandle.clickablepoint.md | 25 + .../puppeteer.elementhandle.contentframe.md | 19 + docs/api/puppeteer.elementhandle.drag.md | 25 + .../puppeteer.elementhandle.draganddrop.md | 31 + docs/api/puppeteer.elementhandle.dragenter.md | 25 + docs/api/puppeteer.elementhandle.dragover.md | 25 + docs/api/puppeteer.elementhandle.drop.md | 25 + docs/api/puppeteer.elementhandle.focus.md | 19 + docs/api/puppeteer.elementhandle.hover.md | 19 + ...er.elementhandle.isintersectingviewport.md | 25 + docs/api/puppeteer.elementhandle.md | 99 + docs/api/puppeteer.elementhandle.press.md | 32 + .../api/puppeteer.elementhandle.screenshot.md | 25 + docs/api/puppeteer.elementhandle.select.md | 32 + docs/api/puppeteer.elementhandle.tap.md | 19 + docs/api/puppeteer.elementhandle.type.md | 50 + .../api/puppeteer.elementhandle.uploadfile.md | 29 + ...puppeteer.elementhandle.waitforselector.md | 43 + ...ppeteer.elementhandle.waitforselector_1.md | 27 + .../puppeteer.elementhandle.waitforxpath.md | 69 + docs/api/puppeteer.errorcode.md | 25 + docs/api/puppeteer.errors.md | 29 + docs/api/puppeteer.evaluatefunc.md | 15 + docs/api/puppeteer.evaluation_script_url.md | 11 + .../api/puppeteer.eventemitter.addlistener.md | 30 + docs/api/puppeteer.eventemitter.emit.md | 28 + .../puppeteer.eventemitter.listenercount.md | 27 + docs/api/puppeteer.eventemitter.md | 34 + docs/api/puppeteer.eventemitter.off.md | 28 + docs/api/puppeteer.eventemitter.on.md | 28 + docs/api/puppeteer.eventemitter.once.md | 28 + ...ppeteer.eventemitter.removealllisteners.md | 27 + .../puppeteer.eventemitter.removelistener.md | 30 + docs/api/puppeteer.eventtype.md | 11 + docs/api/puppeteer.executablepath.md | 11 + .../puppeteer.executioncontext.evaluate.md | 67 + ...ppeteer.executioncontext.evaluatehandle.md | 65 + docs/api/puppeteer.executioncontext.frame.md | 23 + docs/api/puppeteer.executioncontext.md | 28 + ...puppeteer.executioncontext.queryobjects.md | 46 + docs/api/puppeteer.filechooser.accept.md | 25 + docs/api/puppeteer.filechooser.cancel.md | 19 + docs/api/puppeteer.filechooser.ismultiple.md | 19 + docs/api/puppeteer.filechooser.md | 41 + docs/api/puppeteer.flattenhandle.md | 13 + docs/api/puppeteer.frame._.md | 29 + docs/api/puppeteer.frame.__.md | 29 + docs/api/puppeteer.frame.__1.md | 23 + docs/api/puppeteer.frame.___1.md | 23 + docs/api/puppeteer.frame.__eval.md | 47 + docs/api/puppeteer.frame.__eval_1.md | 34 + docs/api/puppeteer.frame._eval.md | 47 + docs/api/puppeteer.frame._eval_1.md | 34 + docs/api/puppeteer.frame._x.md | 25 + docs/api/puppeteer.frame.addscripttag.md | 27 + docs/api/puppeteer.frame.addstyletag.md | 27 + docs/api/puppeteer.frame.childframes.md | 19 + docs/api/puppeteer.frame.click.md | 46 + docs/api/puppeteer.frame.content.md | 19 + docs/api/puppeteer.frame.evaluate.md | 34 + docs/api/puppeteer.frame.evaluatehandle.md | 36 + docs/api/puppeteer.frame.executioncontext.md | 19 + docs/api/puppeteer.frame.focus.md | 29 + docs/api/puppeteer.frame.goto.md | 51 + docs/api/puppeteer.frame.hover.md | 29 + docs/api/puppeteer.frame.isdetached.md | 19 + docs/api/puppeteer.frame.isoopframe.md | 21 + docs/api/puppeteer.frame.md | 99 + docs/api/puppeteer.frame.name.md | 25 + docs/api/puppeteer.frame.parentframe.md | 19 + docs/api/puppeteer.frame.select.md | 39 + docs/api/puppeteer.frame.setcontent.md | 32 + docs/api/puppeteer.frame.tap.md | 31 + docs/api/puppeteer.frame.title.md | 19 + docs/api/puppeteer.frame.type.md | 46 + docs/api/puppeteer.frame.url.md | 19 + docs/api/puppeteer.frame.waitforfunction.md | 64 + docs/api/puppeteer.frame.waitfornavigation.md | 43 + docs/api/puppeteer.frame.waitforselector.md | 60 + docs/api/puppeteer.frame.waitforselector_1.md | 27 + docs/api/puppeteer.frame.waitfortimeout.md | 37 + docs/api/puppeteer.frame.waitforxpath.md | 33 + ...peteer.frameaddscripttagoptions.content.md | 15 + .../api/puppeteer.frameaddscripttagoptions.md | 20 + ...puppeteer.frameaddscripttagoptions.path.md | 19 + ...puppeteer.frameaddscripttagoptions.type.md | 15 + .../puppeteer.frameaddscripttagoptions.url.md | 15 + ...ppeteer.frameaddstyletagoptions.content.md | 15 + docs/api/puppeteer.frameaddstyletagoptions.md | 19 + .../puppeteer.frameaddstyletagoptions.path.md | 19 + .../puppeteer.frameaddstyletagoptions.url.md | 15 + .../puppeteer.framewaitforfunctionoptions.md | 18 + ...eer.framewaitforfunctionoptions.polling.md | 19 + ...eer.framewaitforfunctionoptions.timeout.md | 15 + .../puppeteer.geolocationoptions.accuracy.md | 15 + .../puppeteer.geolocationoptions.latitude.md | 15 + .../puppeteer.geolocationoptions.longitude.md | 15 + docs/api/puppeteer.geolocationoptions.md | 19 + docs/api/puppeteer.handlefor.md | 15 + docs/api/puppeteer.handleor.md | 13 + docs/api/puppeteer.handler.md | 11 + docs/api/puppeteer.httprequest.abort.md | 30 + .../puppeteer.httprequest.aborterrorreason.md | 19 + docs/api/puppeteer.httprequest.client.md | 15 + docs/api/puppeteer.httprequest.continue.md | 49 + ...er.httprequest.continuerequestoverrides.md | 19 + ...teer.httprequest.enqueueinterceptaction.md | 27 + docs/api/puppeteer.httprequest.failure.md | 35 + ...eteer.httprequest.finalizeinterceptions.md | 19 + docs/api/puppeteer.httprequest.frame.md | 19 + docs/api/puppeteer.httprequest.headers.md | 19 + docs/api/puppeteer.httprequest.initiator.md | 19 + ...er.httprequest.interceptresolutionstate.md | 23 + ...ttprequest.isinterceptresolutionhandled.md | 19 + ...ppeteer.httprequest.isnavigationrequest.md | 19 + docs/api/puppeteer.httprequest.md | 65 + docs/api/puppeteer.httprequest.method.md | 19 + docs/api/puppeteer.httprequest.postdata.md | 19 + .../puppeteer.httprequest.redirectchain.md | 42 + .../api/puppeteer.httprequest.resourcetype.md | 19 + docs/api/puppeteer.httprequest.respond.md | 52 + docs/api/puppeteer.httprequest.response.md | 19 + ...uppeteer.httprequest.responseforrequest.md | 19 + docs/api/puppeteer.httprequest.url.md | 19 + docs/api/puppeteer.httpresponse.buffer.md | 19 + docs/api/puppeteer.httpresponse.frame.md | 19 + docs/api/puppeteer.httpresponse.fromcache.md | 19 + ...uppeteer.httpresponse.fromserviceworker.md | 19 + docs/api/puppeteer.httpresponse.headers.md | 19 + docs/api/puppeteer.httpresponse.json.md | 23 + docs/api/puppeteer.httpresponse.md | 37 + docs/api/puppeteer.httpresponse.ok.md | 19 + .../puppeteer.httpresponse.remoteaddress.md | 19 + docs/api/puppeteer.httpresponse.request.md | 19 + .../puppeteer.httpresponse.securitydetails.md | 19 + docs/api/puppeteer.httpresponse.status.md | 19 + docs/api/puppeteer.httpresponse.statustext.md | 19 + docs/api/puppeteer.httpresponse.text.md | 19 + docs/api/puppeteer.httpresponse.timing.md | 19 + docs/api/puppeteer.httpresponse.url.md | 19 + docs/api/puppeteer.innerparams.md | 15 + .../puppeteer.interceptresolutionaction.md | 22 + ...ppeteer.interceptresolutionstate.action.md | 13 + .../api/puppeteer.interceptresolutionstate.md | 18 + ...eteer.interceptresolutionstate.priority.md | 13 + .../puppeteer.interceptresolutionstrategy.md | 17 + .../puppeteer.internalnetworkconditions.md | 19 + ...eteer.internalnetworkconditions.offline.md | 13 + .../api/puppeteer.jscoverage._constructor_.md | 21 + docs/api/puppeteer.jscoverage.md | 24 + docs/api/puppeteer.jscoverage.start.md | 27 + docs/api/puppeteer.jscoverage.stop.md | 17 + docs/api/puppeteer.jscoverageentry.md | 21 + ...eteer.jscoverageentry.rawscriptcoverage.md | 15 + ...overageoptions.includerawscriptcoverage.md | 15 + docs/api/puppeteer.jscoverageoptions.md | 21 + ...scoverageoptions.reportanonymousscripts.md | 15 + ...eer.jscoverageoptions.resetonnavigation.md | 15 + docs/api/puppeteer.jshandle.aselement.md | 19 + docs/api/puppeteer.jshandle.dispose.md | 19 + docs/api/puppeteer.jshandle.evaluate.md | 41 + docs/api/puppeteer.jshandle.evaluatehandle.md | 42 + .../puppeteer.jshandle.executioncontext.md | 19 + docs/api/puppeteer.jshandle.getproperties.md | 32 + docs/api/puppeteer.jshandle.getproperty.md | 27 + docs/api/puppeteer.jshandle.getproperty_1.md | 23 + docs/api/puppeteer.jshandle.jsonvalue.md | 23 + docs/api/puppeteer.jshandle.md | 42 + docs/api/puppeteer.jshandle.tostring.md | 23 + docs/api/puppeteer.keyboard.down.md | 39 + docs/api/puppeteer.keyboard.md | 58 + docs/api/puppeteer.keyboard.press.md | 38 + docs/api/puppeteer.keyboard.sendcharacter.md | 35 + docs/api/puppeteer.keyboard.type.md | 44 + docs/api/puppeteer.keyboard.up.md | 25 + docs/api/puppeteer.keyinput.md | 268 + docs/api/puppeteer.launch.md | 11 + docs/api/puppeteer.launchoptions.channel.md | 15 + docs/api/puppeteer.launchoptions.dumpio.md | 15 + docs/api/puppeteer.launchoptions.env.md | 15 + .../puppeteer.launchoptions.executablepath.md | 15 + ...ppeteer.launchoptions.extraprefsfirefox.md | 15 + .../puppeteer.launchoptions.handlesighup.md | 15 + .../puppeteer.launchoptions.handlesigint.md | 15 + .../puppeteer.launchoptions.handlesigterm.md | 15 + ...ppeteer.launchoptions.ignoredefaultargs.md | 15 + docs/api/puppeteer.launchoptions.md | 31 + docs/api/puppeteer.launchoptions.pipe.md | 15 + docs/api/puppeteer.launchoptions.product.md | 15 + docs/api/puppeteer.launchoptions.timeout.md | 15 + ...peteer.launchoptions.waitforinitialpage.md | 15 + docs/api/puppeteer.lowercasepaperformat.md | 22 + docs/api/puppeteer.mediafeature.md | 18 + docs/api/puppeteer.mediafeature.name.md | 13 + docs/api/puppeteer.mediafeature.value.md | 13 + docs/api/puppeteer.metrics.documents.md | 13 + docs/api/puppeteer.metrics.frames.md | 13 + .../api/puppeteer.metrics.jseventlisteners.md | 13 + docs/api/puppeteer.metrics.jsheaptotalsize.md | 13 + docs/api/puppeteer.metrics.jsheapusedsize.md | 13 + docs/api/puppeteer.metrics.layoutcount.md | 13 + docs/api/puppeteer.metrics.layoutduration.md | 13 + docs/api/puppeteer.metrics.md | 29 + docs/api/puppeteer.metrics.nodes.md | 13 + .../api/puppeteer.metrics.recalcstylecount.md | 13 + .../puppeteer.metrics.recalcstyleduration.md | 13 + docs/api/puppeteer.metrics.scriptduration.md | 13 + docs/api/puppeteer.metrics.taskduration.md | 13 + docs/api/puppeteer.metrics.timestamp.md | 13 + docs/api/puppeteer.mouse.click.md | 33 + docs/api/puppeteer.mouse.down.md | 25 + docs/api/puppeteer.mouse.drag.md | 26 + docs/api/puppeteer.mouse.draganddrop.md | 33 + docs/api/puppeteer.mouse.dragenter.md | 26 + docs/api/puppeteer.mouse.dragover.md | 26 + docs/api/puppeteer.mouse.drop.md | 26 + docs/api/puppeteer.mouse.md | 91 + docs/api/puppeteer.mouse.move.md | 33 + docs/api/puppeteer.mouse.up.md | 25 + docs/api/puppeteer.mouse.wheel.md | 44 + docs/api/puppeteer.mousebutton.md | 16 + docs/api/puppeteer.mouseoptions.button.md | 13 + docs/api/puppeteer.mouseoptions.clickcount.md | 13 + docs/api/puppeteer.mouseoptions.md | 18 + .../api/puppeteer.mousewheeloptions.deltax.md | 13 + .../api/puppeteer.mousewheeloptions.deltay.md | 13 + docs/api/puppeteer.mousewheeloptions.md | 18 + .../puppeteer.networkconditions.download.md | 13 + .../puppeteer.networkconditions.latency.md | 13 + docs/api/puppeteer.networkconditions.md | 32 + .../api/puppeteer.networkconditions.upload.md | 13 + docs/api/puppeteer.offset.md | 18 + docs/api/puppeteer.offset.x.md | 15 + docs/api/puppeteer.offset.y.md | 15 + docs/api/puppeteer.page._.md | 27 + docs/api/puppeteer.page.__.md | 31 + docs/api/puppeteer.page.__1.md | 23 + docs/api/puppeteer.page.___1.md | 23 + docs/api/puppeteer.page.__eval.md | 80 + docs/api/puppeteer.page.__eval_1.md | 34 + docs/api/puppeteer.page._eval.md | 79 + docs/api/puppeteer.page._eval_1.md | 34 + docs/api/puppeteer.page._x.md | 29 + docs/api/puppeteer.page.accessibility.md | 13 + docs/api/puppeteer.page.addscripttag.md | 37 + docs/api/puppeteer.page.addstyletag.md | 31 + docs/api/puppeteer.page.authenticate.md | 29 + docs/api/puppeteer.page.bringtofront.md | 19 + docs/api/puppeteer.page.browser.md | 19 + docs/api/puppeteer.page.browsercontext.md | 19 + docs/api/puppeteer.page.click.md | 48 + docs/api/puppeteer.page.close.md | 23 + docs/api/puppeteer.page.content.md | 17 + docs/api/puppeteer.page.cookies.md | 25 + docs/api/puppeteer.page.coverage.md | 13 + docs/api/puppeteer.page.createpdfstream.md | 33 + docs/api/puppeteer.page.deletecookie.md | 25 + docs/api/puppeteer.page.emulate.md | 44 + .../puppeteer.page.emulatecputhrottling.md | 25 + docs/api/puppeteer.page.emulateidlestate.md | 41 + .../puppeteer.page.emulatemediafeatures.md | 72 + docs/api/puppeteer.page.emulatemediatype.md | 44 + ...puppeteer.page.emulatenetworkconditions.md | 45 + docs/api/puppeteer.page.emulatetimezone.md | 23 + .../puppeteer.page.emulatevisiondeficiency.md | 50 + docs/api/puppeteer.page.evaluate.md | 71 + docs/api/puppeteer.page.evaluatehandle.md | 73 + .../puppeteer.page.evaluateonnewdocument.md | 55 + docs/api/puppeteer.page.exposefunction.md | 89 + docs/api/puppeteer.page.focus.md | 31 + docs/api/puppeteer.page.frames.md | 19 + docs/api/puppeteer.page.goback.md | 35 + docs/api/puppeteer.page.goforward.md | 35 + docs/api/puppeteer.page.goto.md | 51 + docs/api/puppeteer.page.hover.md | 31 + docs/api/puppeteer.page.isclosed.md | 19 + ...uppeteer.page.isdraginterceptionenabled.md | 19 + .../api/puppeteer.page.isjavascriptenabled.md | 19 + docs/api/puppeteer.page.keyboard.md | 13 + docs/api/puppeteer.page.mainframe.md | 23 + docs/api/puppeteer.page.md | 206 + docs/api/puppeteer.page.metrics.md | 49 + docs/api/puppeteer.page.mouse.md | 13 + docs/api/puppeteer.page.off.md | 27 + docs/api/puppeteer.page.on.md | 35 + docs/api/puppeteer.page.once.md | 27 + docs/api/puppeteer.page.pdf.md | 23 + docs/api/puppeteer.page.queryobjects.md | 48 + docs/api/puppeteer.page.reload.md | 33 + docs/api/puppeteer.page.screenshot.md | 49 + docs/api/puppeteer.page.select.md | 37 + docs/api/puppeteer.page.setbypasscsp.md | 29 + docs/api/puppeteer.page.setcacheenabled.md | 25 + docs/api/puppeteer.page.setcontent.md | 32 + docs/api/puppeteer.page.setcookie.md | 29 + ...peteer.page.setdefaultnavigationtimeout.md | 37 + docs/api/puppeteer.page.setdefaulttimeout.md | 23 + .../api/puppeteer.page.setdraginterception.md | 27 + .../api/puppeteer.page.setextrahttpheaders.md | 25 + docs/api/puppeteer.page.setgeolocation.md | 35 + .../puppeteer.page.setjavascriptenabled.md | 27 + docs/api/puppeteer.page.setofflinemode.md | 27 + .../puppeteer.page.setrequestinterception.md | 54 + docs/api/puppeteer.page.setuseragent.md | 29 + docs/api/puppeteer.page.setviewport.md | 57 + docs/api/puppeteer.page.tap.md | 29 + docs/api/puppeteer.page.target.md | 19 + docs/api/puppeteer.page.title.md | 23 + docs/api/puppeteer.page.touchscreen.md | 13 + docs/api/puppeteer.page.tracing.md | 13 + docs/api/puppeteer.page.type.md | 46 + docs/api/puppeteer.page.url.md | 21 + docs/api/puppeteer.page.viewport.md | 29 + docs/api/puppeteer.page.waitforfilechooser.md | 48 + docs/api/puppeteer.page.waitforframe.md | 45 + docs/api/puppeteer.page.waitforfunction.md | 92 + docs/api/puppeteer.page.waitfornavigation.md | 40 + docs/api/puppeteer.page.waitfornetworkidle.md | 28 + docs/api/puppeteer.page.waitforrequest.md | 53 + docs/api/puppeteer.page.waitforresponse.md | 55 + docs/api/puppeteer.page.waitforselector.md | 63 + docs/api/puppeteer.page.waitforselector_1.md | 27 + docs/api/puppeteer.page.waitfortimeout.md | 37 + docs/api/puppeteer.page.waitforxpath.md | 67 + docs/api/puppeteer.page.workers.md | 23 + docs/api/puppeteer.pageemittedevents.md | 37 + docs/api/puppeteer.pageeventobject.close.md | 13 + docs/api/puppeteer.pageeventobject.console.md | 13 + docs/api/puppeteer.pageeventobject.dialog.md | 13 + ...peteer.pageeventobject.domcontentloaded.md | 13 + docs/api/puppeteer.pageeventobject.error.md | 13 + ...puppeteer.pageeventobject.frameattached.md | 13 + ...puppeteer.pageeventobject.framedetached.md | 13 + ...uppeteer.pageeventobject.framenavigated.md | 13 + docs/api/puppeteer.pageeventobject.load.md | 13 + docs/api/puppeteer.pageeventobject.md | 39 + docs/api/puppeteer.pageeventobject.metrics.md | 16 + .../puppeteer.pageeventobject.pageerror.md | 13 + docs/api/puppeteer.pageeventobject.popup.md | 13 + docs/api/puppeteer.pageeventobject.request.md | 13 + ...puppeteer.pageeventobject.requestfailed.md | 13 + ...ppeteer.pageeventobject.requestfinished.md | 13 + ....pageeventobject.requestservedfromcache.md | 13 + .../api/puppeteer.pageeventobject.response.md | 13 + ...puppeteer.pageeventobject.workercreated.md | 13 + ...ppeteer.pageeventobject.workerdestroyed.md | 13 + docs/api/puppeteer.paperformat.md | 42 + docs/api/puppeteer.pdfmargin.bottom.md | 13 + docs/api/puppeteer.pdfmargin.left.md | 13 + docs/api/puppeteer.pdfmargin.md | 20 + docs/api/puppeteer.pdfmargin.right.md | 13 + docs/api/puppeteer.pdfmargin.top.md | 13 + ...uppeteer.pdfoptions.displayheaderfooter.md | 15 + .../puppeteer.pdfoptions.footertemplate.md | 15 + docs/api/puppeteer.pdfoptions.format.md | 17 + .../puppeteer.pdfoptions.headertemplate.md | 23 + docs/api/puppeteer.pdfoptions.height.md | 15 + docs/api/puppeteer.pdfoptions.landscape.md | 15 + docs/api/puppeteer.pdfoptions.margin.md | 15 + docs/api/puppeteer.pdfoptions.md | 33 + .../puppeteer.pdfoptions.omitbackground.md | 15 + docs/api/puppeteer.pdfoptions.pageranges.md | 15 + docs/api/puppeteer.pdfoptions.path.md | 19 + .../puppeteer.pdfoptions.prefercsspagesize.md | 15 + .../puppeteer.pdfoptions.printbackground.md | 15 + docs/api/puppeteer.pdfoptions.scale.md | 15 + docs/api/puppeteer.pdfoptions.timeout.md | 15 + docs/api/puppeteer.pdfoptions.width.md | 15 + docs/api/puppeteer.permission.md | 28 + docs/api/puppeteer.platform.md | 13 + docs/api/puppeteer.point.md | 18 + docs/api/puppeteer.point.x.md | 13 + docs/api/puppeteer.point.y.md | 13 + docs/api/puppeteer.pressoptions.delay.md | 15 + docs/api/puppeteer.pressoptions.md | 18 + docs/api/puppeteer.pressoptions.text.md | 15 + docs/api/puppeteer.product.md | 13 + .../puppeteer.productlauncher.defaultargs.md | 23 + ...uppeteer.productlauncher.executablepath.md | 13 + docs/api/puppeteer.productlauncher.launch.md | 23 + docs/api/puppeteer.productlauncher.md | 27 + docs/api/puppeteer.productlauncher.product.md | 13 + docs/api/puppeteer.protocolerror.code.md | 13 + docs/api/puppeteer.protocolerror.md | 22 + ...puppeteer.protocolerror.originalmessage.md | 13 + docs/api/puppeteer.protocollifecycleevent.md | 15 + .../puppeteer.puppeteer._changedproduct.md | 13 + .../puppeteer.puppeteer._ispuppeteercore.md | 13 + ...teer.puppeteer.clearcustomqueryhandlers.md | 27 + docs/api/puppeteer.puppeteer.connect.md | 29 + ...eteer.puppeteer.customqueryhandlernames.md | 27 + docs/api/puppeteer.puppeteer.devices.md | 23 + docs/api/puppeteer.puppeteer.errors.md | 23 + docs/api/puppeteer.puppeteer.md | 39 + .../puppeteer.puppeteer.networkconditions.md | 23 + ...er.puppeteer.registercustomqueryhandler.md | 37 + ....puppeteer.unregistercustomqueryhandler.md | 33 + docs/api/puppeteer.puppeteererrors.md | 18 + ...puppeteer.puppeteererrors.protocolerror.md | 13 + .../puppeteer.puppeteererrors.timeouterror.md | 13 + ...uppeteerlaunchoptions.extraprefsfirefox.md | 13 + docs/api/puppeteer.puppeteerlaunchoptions.md | 20 + ...uppeteer.puppeteerlaunchoptions.product.md | 13 + docs/api/puppeteer.puppeteerlifecycleevent.md | 15 + ...peteer.puppeteernode._preferredrevision.md | 13 + docs/api/puppeteer.puppeteernode.connect.md | 27 + ...teer.puppeteernode.createbrowserfetcher.md | 25 + .../puppeteer.puppeteernode.defaultargs.md | 25 + .../puppeteer.puppeteernode.executablepath.md | 29 + docs/api/puppeteer.puppeteernode.launch.md | 41 + docs/api/puppeteer.puppeteernode.md | 60 + docs/api/puppeteer.puppeteernode.product.md | 19 + .../puppeteer.puppeteernodelaunchoptions.md | 17 + .../puppeteer.registercustomqueryhandler.md | 38 + docs/api/puppeteer.remoteaddress.ip.md | 13 + docs/api/puppeteer.remoteaddress.md | 18 + docs/api/puppeteer.remoteaddress.port.md | 13 + docs/api/puppeteer.resourcetype.md | 13 + docs/api/puppeteer.responseforrequest.body.md | 13 + ...uppeteer.responseforrequest.contenttype.md | 13 + .../puppeteer.responseforrequest.headers.md | 15 + docs/api/puppeteer.responseforrequest.md | 22 + .../puppeteer.responseforrequest.status.md | 13 + docs/api/puppeteer.screenshotclip.height.md | 13 + docs/api/puppeteer.screenshotclip.md | 20 + docs/api/puppeteer.screenshotclip.width.md | 13 + docs/api/puppeteer.screenshotclip.x.md | 13 + docs/api/puppeteer.screenshotclip.y.md | 13 + ...screenshotoptions.capturebeyondviewport.md | 15 + docs/api/puppeteer.screenshotoptions.clip.md | 15 + .../puppeteer.screenshotoptions.encoding.md | 15 + ...puppeteer.screenshotoptions.fromsurface.md | 15 + .../puppeteer.screenshotoptions.fullpage.md | 15 + docs/api/puppeteer.screenshotoptions.md | 25 + ...peteer.screenshotoptions.omitbackground.md | 15 + docs/api/puppeteer.screenshotoptions.path.md | 15 + .../puppeteer.screenshotoptions.quality.md | 15 + docs/api/puppeteer.screenshotoptions.type.md | 13 + docs/api/puppeteer.securitydetails.issuer.md | 19 + docs/api/puppeteer.securitydetails.md | 28 + .../api/puppeteer.securitydetails.protocol.md | 19 + ...securitydetails.subjectalternativenames.md | 19 + .../puppeteer.securitydetails.subjectname.md | 19 + .../puppeteer.securitydetails.validfrom.md | 19 + docs/api/puppeteer.securitydetails.validto.md | 19 + ...puppeteer.serializedaxnode.autocomplete.md | 13 + .../api/puppeteer.serializedaxnode.checked.md | 15 + .../puppeteer.serializedaxnode.children.md | 15 + .../puppeteer.serializedaxnode.description.md | 15 + .../puppeteer.serializedaxnode.disabled.md | 13 + .../puppeteer.serializedaxnode.expanded.md | 13 + .../api/puppeteer.serializedaxnode.focused.md | 13 + .../puppeteer.serializedaxnode.haspopup.md | 13 + .../api/puppeteer.serializedaxnode.invalid.md | 15 + ...puppeteer.serializedaxnode.keyshortcuts.md | 15 + docs/api/puppeteer.serializedaxnode.level.md | 15 + docs/api/puppeteer.serializedaxnode.md | 44 + docs/api/puppeteer.serializedaxnode.modal.md | 13 + .../puppeteer.serializedaxnode.multiline.md | 13 + ...peteer.serializedaxnode.multiselectable.md | 15 + docs/api/puppeteer.serializedaxnode.name.md | 15 + .../puppeteer.serializedaxnode.orientation.md | 13 + .../api/puppeteer.serializedaxnode.pressed.md | 15 + .../puppeteer.serializedaxnode.readonly.md | 13 + .../puppeteer.serializedaxnode.required.md | 13 + docs/api/puppeteer.serializedaxnode.role.md | 15 + ...peteer.serializedaxnode.roledescription.md | 15 + .../puppeteer.serializedaxnode.selected.md | 13 + docs/api/puppeteer.serializedaxnode.value.md | 15 + .../puppeteer.serializedaxnode.valuemax.md | 13 + .../puppeteer.serializedaxnode.valuemin.md | 13 + .../puppeteer.serializedaxnode.valuetext.md | 15 + ...ppeteer.snapshotoptions.interestingonly.md | 15 + docs/api/puppeteer.snapshotoptions.md | 18 + docs/api/puppeteer.snapshotoptions.root.md | 15 + docs/api/puppeteer.target.browser.md | 19 + docs/api/puppeteer.target.browsercontext.md | 19 + docs/api/puppeteer.target.createcdpsession.md | 19 + docs/api/puppeteer.target.md | 28 + docs/api/puppeteer.target.opener.md | 19 + docs/api/puppeteer.target.page.md | 19 + docs/api/puppeteer.target.type.md | 30 + docs/api/puppeteer.target.url.md | 17 + docs/api/puppeteer.target.worker.md | 19 + docs/api/puppeteer.targetfiltercallback.md | 13 + docs/api/puppeteer.timeouterror.md | 19 + docs/api/puppeteer.touchscreen.md | 23 + docs/api/puppeteer.touchscreen.tap.md | 26 + docs/api/puppeteer.tracing.md | 34 + docs/api/puppeteer.tracing.start.md | 29 + docs/api/puppeteer.tracing.stop.md | 21 + .../puppeteer.tracingoptions.categories.md | 13 + docs/api/puppeteer.tracingoptions.md | 19 + docs/api/puppeteer.tracingoptions.path.md | 13 + .../puppeteer.tracingoptions.screenshots.md | 13 + .../puppeteer.unregistercustomqueryhandler.md | 21 + .../puppeteer.viewport.devicescalefactor.md | 15 + docs/api/puppeteer.viewport.hastouch.md | 15 + docs/api/puppeteer.viewport.height.md | 15 + docs/api/puppeteer.viewport.islandscape.md | 15 + docs/api/puppeteer.viewport.ismobile.md | 15 + docs/api/puppeteer.viewport.md | 24 + docs/api/puppeteer.viewport.width.md | 15 + docs/api/puppeteer.waitforoptions.md | 18 + docs/api/puppeteer.waitforoptions.timeout.md | 19 + .../api/puppeteer.waitforoptions.waituntil.md | 13 + ...puppeteer.waitforselectoroptions.hidden.md | 13 + docs/api/puppeteer.waitforselectoroptions.md | 20 + .../puppeteer.waitforselectoroptions.root.md | 13 + ...uppeteer.waitforselectoroptions.timeout.md | 13 + ...uppeteer.waitforselectoroptions.visible.md | 13 + docs/api/puppeteer.waitfortargetoptions.md | 17 + .../puppeteer.waitfortargetoptions.timeout.md | 15 + docs/api/puppeteer.waittimeoutoptions.md | 17 + .../puppeteer.waittimeoutoptions.timeout.md | 19 + docs/api/puppeteer.webworker.evaluate.md | 34 + .../api/puppeteer.webworker.evaluatehandle.md | 34 + .../puppeteer.webworker.executioncontext.md | 21 + docs/api/puppeteer.webworker.md | 46 + docs/api/puppeteer.webworker.url.md | 19 + docs/chromium-support.md | 40 + CONTRIBUTING.md => docs/contributing.md | 82 +- docs/faq.md | 154 + docs/index.md | 399 + docs/issue_template.md | 38 - docs/troubleshooting.md | 48 +- package-lock.json | 13845 ++++++++++ package.json | 12 +- src/common/Accessibility.ts | 4 +- src/common/Browser.ts | 16 +- src/common/Connection.ts | 2 +- src/common/Coverage.ts | 2 +- src/common/DeviceDescriptors.ts | 2 +- src/common/Dialog.ts | 2 +- src/common/ElementHandle.ts | 15 +- src/common/Errors.ts | 2 +- src/common/ExecutionContext.ts | 14 +- src/common/FileChooser.ts | 2 +- src/common/FrameManager.ts | 20 +- src/common/HTTPRequest.ts | 10 +- src/common/Input.ts | 18 +- src/common/JSHandle.ts | 6 +- src/common/NetworkConditions.ts | 2 +- src/common/Page.ts | 337 +- src/common/Tracing.ts | 2 +- src/common/WebWorker.ts | 2 +- src/node/BrowserFetcher.ts | 2 +- src/node/Puppeteer.ts | 4 +- test/README.md | 4 +- utils/ESTreeWalker.js | 143 - utils/doclint/.gitignore | 1 - utils/doclint/Message.js | 52 - utils/doclint/README.md | 27 - utils/doclint/Source.js | 119 - utils/doclint/cli.js | 124 - utils/doclint/preprocessor/index.js | 183 - .../doclint/preprocessor/preprocessor.spec.js | 233 - utils/fetch_devices.js | 303 - utils/generate_docs.ts | 86 + utils/get_latest_changelog.js | 34 - utils/internal/custom_markdown_action.ts | 32 + utils/internal/custom_markdown_documenter.ts | 1450 ++ utils/remove-tag.js | 32 - utils/testserver/README.md | 2 +- vendor/mitt/README.md | 2 +- website/README.md | 41 + website/babel.config.js | 19 + website/docusaurus.config.js | 176 + website/package-lock.json | 21663 ++++++++++++++++ website/package.json | 41 + website/sidebars.json | 8 + website/src/css/custom.css | 40 + website/static/.nojekyll | 0 website/static/img/docusaurus.png | Bin 0 -> 5142 bytes website/static/img/favicon.ico | Bin 0 -> 3626 bytes website/static/img/logo.svg | 1 + 783 files changed, 55942 insertions(+), 7517 deletions(-) delete mode 100644 docs/api.md create mode 100644 docs/api/index.md create mode 100644 docs/api/puppeteer.accessibility.md create mode 100644 docs/api/puppeteer.accessibility.snapshot.md create mode 100644 docs/api/puppeteer.actionresult.md create mode 100644 docs/api/puppeteer.awaitable.md create mode 100644 docs/api/puppeteer.boundingbox.height.md create mode 100644 docs/api/puppeteer.boundingbox.md create mode 100644 docs/api/puppeteer.boundingbox.width.md create mode 100644 docs/api/puppeteer.boxmodel.border.md create mode 100644 docs/api/puppeteer.boxmodel.content.md create mode 100644 docs/api/puppeteer.boxmodel.height.md create mode 100644 docs/api/puppeteer.boxmodel.margin.md create mode 100644 docs/api/puppeteer.boxmodel.md create mode 100644 docs/api/puppeteer.boxmodel.padding.md create mode 100644 docs/api/puppeteer.boxmodel.width.md create mode 100644 docs/api/puppeteer.browser.browsercontexts.md create mode 100644 docs/api/puppeteer.browser.close.md create mode 100644 docs/api/puppeteer.browser.createincognitobrowsercontext.md create mode 100644 docs/api/puppeteer.browser.defaultbrowsercontext.md create mode 100644 docs/api/puppeteer.browser.disconnect.md create mode 100644 docs/api/puppeteer.browser.isconnected.md create mode 100644 docs/api/puppeteer.browser.md create mode 100644 docs/api/puppeteer.browser.newpage.md create mode 100644 docs/api/puppeteer.browser.pages.md create mode 100644 docs/api/puppeteer.browser.process.md create mode 100644 docs/api/puppeteer.browser.target.md create mode 100644 docs/api/puppeteer.browser.targets.md create mode 100644 docs/api/puppeteer.browser.useragent.md create mode 100644 docs/api/puppeteer.browser.version.md create mode 100644 docs/api/puppeteer.browser.waitfortarget.md create mode 100644 docs/api/puppeteer.browser.wsendpoint.md create mode 100644 docs/api/puppeteer.browserconnectoptions.defaultviewport.md create mode 100644 docs/api/puppeteer.browserconnectoptions.ignorehttpserrors.md create mode 100644 docs/api/puppeteer.browserconnectoptions.md create mode 100644 docs/api/puppeteer.browserconnectoptions.slowmo.md create mode 100644 docs/api/puppeteer.browserconnectoptions.targetfilter.md create mode 100644 docs/api/puppeteer.browsercontext.browser.md create mode 100644 docs/api/puppeteer.browsercontext.clearpermissionoverrides.md create mode 100644 docs/api/puppeteer.browsercontext.close.md create mode 100644 docs/api/puppeteer.browsercontext.isincognito.md create mode 100644 docs/api/puppeteer.browsercontext.md create mode 100644 docs/api/puppeteer.browsercontext.newpage.md create mode 100644 docs/api/puppeteer.browsercontext.overridepermissions.md create mode 100644 docs/api/puppeteer.browsercontext.pages.md create mode 100644 docs/api/puppeteer.browsercontext.targets.md create mode 100644 docs/api/puppeteer.browsercontext.waitfortarget.md create mode 100644 docs/api/puppeteer.browsercontextemittedevents.md create mode 100644 docs/api/puppeteer.browsercontextoptions.md create mode 100644 docs/api/puppeteer.browsercontextoptions.proxybypasslist.md create mode 100644 docs/api/puppeteer.browsercontextoptions.proxyserver.md create mode 100644 docs/api/puppeteer.browseremittedevents.md create mode 100644 docs/api/puppeteer.browserfetcher.candownload.md create mode 100644 docs/api/puppeteer.browserfetcher.download.md create mode 100644 docs/api/puppeteer.browserfetcher.host.md create mode 100644 docs/api/puppeteer.browserfetcher.localrevisions.md create mode 100644 docs/api/puppeteer.browserfetcher.md create mode 100644 docs/api/puppeteer.browserfetcher.platform.md create mode 100644 docs/api/puppeteer.browserfetcher.product.md create mode 100644 docs/api/puppeteer.browserfetcher.remove.md create mode 100644 docs/api/puppeteer.browserfetcher.revisioninfo.md create mode 100644 docs/api/puppeteer.browserfetcheroptions.host.md create mode 100644 docs/api/puppeteer.browserfetcheroptions.md create mode 100644 docs/api/puppeteer.browserfetcheroptions.path.md create mode 100644 docs/api/puppeteer.browserfetcheroptions.platform.md create mode 100644 docs/api/puppeteer.browserfetcheroptions.product.md create mode 100644 docs/api/puppeteer.browserfetcherrevisioninfo.executablepath.md create mode 100644 docs/api/puppeteer.browserfetcherrevisioninfo.folderpath.md create mode 100644 docs/api/puppeteer.browserfetcherrevisioninfo.local.md create mode 100644 docs/api/puppeteer.browserfetcherrevisioninfo.md create mode 100644 docs/api/puppeteer.browserfetcherrevisioninfo.product.md create mode 100644 docs/api/puppeteer.browserfetcherrevisioninfo.revision.md create mode 100644 docs/api/puppeteer.browserfetcherrevisioninfo.url.md create mode 100644 docs/api/puppeteer.browserlaunchargumentoptions.args.md create mode 100644 docs/api/puppeteer.browserlaunchargumentoptions.debuggingport.md create mode 100644 docs/api/puppeteer.browserlaunchargumentoptions.devtools.md create mode 100644 docs/api/puppeteer.browserlaunchargumentoptions.headless.md create mode 100644 docs/api/puppeteer.browserlaunchargumentoptions.md create mode 100644 docs/api/puppeteer.browserlaunchargumentoptions.userdatadir.md create mode 100644 docs/api/puppeteer.cdpsession.connection.md create mode 100644 docs/api/puppeteer.cdpsession.detach.md create mode 100644 docs/api/puppeteer.cdpsession.id.md create mode 100644 docs/api/puppeteer.cdpsession.md create mode 100644 docs/api/puppeteer.cdpsession.send.md create mode 100644 docs/api/puppeteer.cdpsessiononmessageobject.error.md create mode 100644 docs/api/puppeteer.cdpsessiononmessageobject.id.md create mode 100644 docs/api/puppeteer.cdpsessiononmessageobject.md create mode 100644 docs/api/puppeteer.cdpsessiononmessageobject.method.md create mode 100644 docs/api/puppeteer.cdpsessiononmessageobject.params.md create mode 100644 docs/api/puppeteer.cdpsessiononmessageobject.result.md create mode 100644 docs/api/puppeteer.chromereleasechannel.md create mode 100644 docs/api/puppeteer.clearcustomqueryhandlers.md create mode 100644 docs/api/puppeteer.clickoptions.button.md create mode 100644 docs/api/puppeteer.clickoptions.clickcount.md create mode 100644 docs/api/puppeteer.clickoptions.delay.md create mode 100644 docs/api/puppeteer.clickoptions.md create mode 100644 docs/api/puppeteer.clickoptions.offset.md create mode 100644 docs/api/puppeteer.commoneventemitter.addlistener.md create mode 100644 docs/api/puppeteer.commoneventemitter.emit.md create mode 100644 docs/api/puppeteer.commoneventemitter.listenercount.md create mode 100644 docs/api/puppeteer.commoneventemitter.md create mode 100644 docs/api/puppeteer.commoneventemitter.off.md create mode 100644 docs/api/puppeteer.commoneventemitter.on.md create mode 100644 docs/api/puppeteer.commoneventemitter.once.md create mode 100644 docs/api/puppeteer.commoneventemitter.removealllisteners.md create mode 100644 docs/api/puppeteer.commoneventemitter.removelistener.md create mode 100644 docs/api/puppeteer.connect.md create mode 100644 docs/api/puppeteer.connection._constructor_.md create mode 100644 docs/api/puppeteer.connection.createsession.md create mode 100644 docs/api/puppeteer.connection.dispose.md create mode 100644 docs/api/puppeteer.connection.fromsession.md create mode 100644 docs/api/puppeteer.connection.md create mode 100644 docs/api/puppeteer.connection.send.md create mode 100644 docs/api/puppeteer.connection.session.md create mode 100644 docs/api/puppeteer.connection.url.md create mode 100644 docs/api/puppeteer.connectioncallback.error.md create mode 100644 docs/api/puppeteer.connectioncallback.md create mode 100644 docs/api/puppeteer.connectioncallback.method.md create mode 100644 docs/api/puppeteer.connectioncallback.reject.md create mode 100644 docs/api/puppeteer.connectioncallback.resolve.md create mode 100644 docs/api/puppeteer.connectiontransport.close.md create mode 100644 docs/api/puppeteer.connectiontransport.md create mode 100644 docs/api/puppeteer.connectiontransport.onclose.md create mode 100644 docs/api/puppeteer.connectiontransport.onmessage.md create mode 100644 docs/api/puppeteer.connectiontransport.send.md create mode 100644 docs/api/puppeteer.connectoptions.browserurl.md create mode 100644 docs/api/puppeteer.connectoptions.browserwsendpoint.md create mode 100644 docs/api/puppeteer.connectoptions.md create mode 100644 docs/api/puppeteer.connectoptions.product.md create mode 100644 docs/api/puppeteer.connectoptions.transport.md create mode 100644 docs/api/puppeteer.consolemessage._constructor_.md create mode 100644 docs/api/puppeteer.consolemessage.args.md create mode 100644 docs/api/puppeteer.consolemessage.location.md create mode 100644 docs/api/puppeteer.consolemessage.md create mode 100644 docs/api/puppeteer.consolemessage.stacktrace.md create mode 100644 docs/api/puppeteer.consolemessage.text.md create mode 100644 docs/api/puppeteer.consolemessage.type.md create mode 100644 docs/api/puppeteer.consolemessagelocation.columnnumber.md create mode 100644 docs/api/puppeteer.consolemessagelocation.linenumber.md create mode 100644 docs/api/puppeteer.consolemessagelocation.md create mode 100644 docs/api/puppeteer.consolemessagelocation.url.md create mode 100644 docs/api/puppeteer.consolemessagetype.md create mode 100644 docs/api/puppeteer.continuerequestoverrides.headers.md create mode 100644 docs/api/puppeteer.continuerequestoverrides.md create mode 100644 docs/api/puppeteer.continuerequestoverrides.method.md create mode 100644 docs/api/puppeteer.continuerequestoverrides.postdata.md create mode 100644 docs/api/puppeteer.continuerequestoverrides.url.md create mode 100644 docs/api/puppeteer.coverage._constructor_.md create mode 100644 docs/api/puppeteer.coverage.md create mode 100644 docs/api/puppeteer.coverage.startcsscoverage.md create mode 100644 docs/api/puppeteer.coverage.startjscoverage.md create mode 100644 docs/api/puppeteer.coverage.stopcsscoverage.md create mode 100644 docs/api/puppeteer.coverage.stopjscoverage.md create mode 100644 docs/api/puppeteer.coverageentry.md create mode 100644 docs/api/puppeteer.coverageentry.ranges.md create mode 100644 docs/api/puppeteer.coverageentry.text.md create mode 100644 docs/api/puppeteer.coverageentry.url.md create mode 100644 docs/api/puppeteer.createbrowserfetcher.md create mode 100644 docs/api/puppeteer.credentials.md create mode 100644 docs/api/puppeteer.credentials.password.md create mode 100644 docs/api/puppeteer.credentials.username.md create mode 100644 docs/api/puppeteer.csscoverage._constructor_.md create mode 100644 docs/api/puppeteer.csscoverage.md create mode 100644 docs/api/puppeteer.csscoverage.start.md create mode 100644 docs/api/puppeteer.csscoverage.stop.md create mode 100644 docs/api/puppeteer.csscoverageoptions.md create mode 100644 docs/api/puppeteer.csscoverageoptions.resetonnavigation.md create mode 100644 docs/api/puppeteer.customerror._constructor_.md create mode 100644 docs/api/puppeteer.customerror.md create mode 100644 docs/api/puppeteer.customqueryhandler.md create mode 100644 docs/api/puppeteer.customqueryhandler.queryall.md create mode 100644 docs/api/puppeteer.customqueryhandler.queryone.md create mode 100644 docs/api/puppeteer.customqueryhandlernames.md create mode 100644 docs/api/puppeteer.default_intercept_resolution_priority.md create mode 100644 docs/api/puppeteer.defaultargs.md create mode 100644 docs/api/puppeteer.device.md create mode 100644 docs/api/puppeteer.device.name.md create mode 100644 docs/api/puppeteer.device.useragent.md create mode 100644 docs/api/puppeteer.device.viewport.md create mode 100644 docs/api/puppeteer.devices.md create mode 100644 docs/api/puppeteer.devicesmap.md create mode 100644 docs/api/puppeteer.dialog.accept.md create mode 100644 docs/api/puppeteer.dialog.defaultvalue.md create mode 100644 docs/api/puppeteer.dialog.dismiss.md create mode 100644 docs/api/puppeteer.dialog.md create mode 100644 docs/api/puppeteer.dialog.message.md create mode 100644 docs/api/puppeteer.dialog.type.md create mode 100644 docs/api/puppeteer.elementhandle._.md create mode 100644 docs/api/puppeteer.elementhandle.__.md create mode 100644 docs/api/puppeteer.elementhandle.__1.md create mode 100644 docs/api/puppeteer.elementhandle.___1.md create mode 100644 docs/api/puppeteer.elementhandle.__eval.md create mode 100644 docs/api/puppeteer.elementhandle.__eval_1.md create mode 100644 docs/api/puppeteer.elementhandle._eval.md create mode 100644 docs/api/puppeteer.elementhandle._eval_1.md create mode 100644 docs/api/puppeteer.elementhandle._x.md create mode 100644 docs/api/puppeteer.elementhandle.aselement.md create mode 100644 docs/api/puppeteer.elementhandle.boundingbox.md create mode 100644 docs/api/puppeteer.elementhandle.boxmodel.md create mode 100644 docs/api/puppeteer.elementhandle.click.md create mode 100644 docs/api/puppeteer.elementhandle.clickablepoint.md create mode 100644 docs/api/puppeteer.elementhandle.contentframe.md create mode 100644 docs/api/puppeteer.elementhandle.drag.md create mode 100644 docs/api/puppeteer.elementhandle.draganddrop.md create mode 100644 docs/api/puppeteer.elementhandle.dragenter.md create mode 100644 docs/api/puppeteer.elementhandle.dragover.md create mode 100644 docs/api/puppeteer.elementhandle.drop.md create mode 100644 docs/api/puppeteer.elementhandle.focus.md create mode 100644 docs/api/puppeteer.elementhandle.hover.md create mode 100644 docs/api/puppeteer.elementhandle.isintersectingviewport.md create mode 100644 docs/api/puppeteer.elementhandle.md create mode 100644 docs/api/puppeteer.elementhandle.press.md create mode 100644 docs/api/puppeteer.elementhandle.screenshot.md create mode 100644 docs/api/puppeteer.elementhandle.select.md create mode 100644 docs/api/puppeteer.elementhandle.tap.md create mode 100644 docs/api/puppeteer.elementhandle.type.md create mode 100644 docs/api/puppeteer.elementhandle.uploadfile.md create mode 100644 docs/api/puppeteer.elementhandle.waitforselector.md create mode 100644 docs/api/puppeteer.elementhandle.waitforselector_1.md create mode 100644 docs/api/puppeteer.elementhandle.waitforxpath.md create mode 100644 docs/api/puppeteer.errorcode.md create mode 100644 docs/api/puppeteer.errors.md create mode 100644 docs/api/puppeteer.evaluatefunc.md create mode 100644 docs/api/puppeteer.evaluation_script_url.md create mode 100644 docs/api/puppeteer.eventemitter.addlistener.md create mode 100644 docs/api/puppeteer.eventemitter.emit.md create mode 100644 docs/api/puppeteer.eventemitter.listenercount.md create mode 100644 docs/api/puppeteer.eventemitter.md create mode 100644 docs/api/puppeteer.eventemitter.off.md create mode 100644 docs/api/puppeteer.eventemitter.on.md create mode 100644 docs/api/puppeteer.eventemitter.once.md create mode 100644 docs/api/puppeteer.eventemitter.removealllisteners.md create mode 100644 docs/api/puppeteer.eventemitter.removelistener.md create mode 100644 docs/api/puppeteer.eventtype.md create mode 100644 docs/api/puppeteer.executablepath.md create mode 100644 docs/api/puppeteer.executioncontext.evaluate.md create mode 100644 docs/api/puppeteer.executioncontext.evaluatehandle.md create mode 100644 docs/api/puppeteer.executioncontext.frame.md create mode 100644 docs/api/puppeteer.executioncontext.md create mode 100644 docs/api/puppeteer.executioncontext.queryobjects.md create mode 100644 docs/api/puppeteer.filechooser.accept.md create mode 100644 docs/api/puppeteer.filechooser.cancel.md create mode 100644 docs/api/puppeteer.filechooser.ismultiple.md create mode 100644 docs/api/puppeteer.filechooser.md create mode 100644 docs/api/puppeteer.flattenhandle.md create mode 100644 docs/api/puppeteer.frame._.md create mode 100644 docs/api/puppeteer.frame.__.md create mode 100644 docs/api/puppeteer.frame.__1.md create mode 100644 docs/api/puppeteer.frame.___1.md create mode 100644 docs/api/puppeteer.frame.__eval.md create mode 100644 docs/api/puppeteer.frame.__eval_1.md create mode 100644 docs/api/puppeteer.frame._eval.md create mode 100644 docs/api/puppeteer.frame._eval_1.md create mode 100644 docs/api/puppeteer.frame._x.md create mode 100644 docs/api/puppeteer.frame.addscripttag.md create mode 100644 docs/api/puppeteer.frame.addstyletag.md create mode 100644 docs/api/puppeteer.frame.childframes.md create mode 100644 docs/api/puppeteer.frame.click.md create mode 100644 docs/api/puppeteer.frame.content.md create mode 100644 docs/api/puppeteer.frame.evaluate.md create mode 100644 docs/api/puppeteer.frame.evaluatehandle.md create mode 100644 docs/api/puppeteer.frame.executioncontext.md create mode 100644 docs/api/puppeteer.frame.focus.md create mode 100644 docs/api/puppeteer.frame.goto.md create mode 100644 docs/api/puppeteer.frame.hover.md create mode 100644 docs/api/puppeteer.frame.isdetached.md create mode 100644 docs/api/puppeteer.frame.isoopframe.md create mode 100644 docs/api/puppeteer.frame.md create mode 100644 docs/api/puppeteer.frame.name.md create mode 100644 docs/api/puppeteer.frame.parentframe.md create mode 100644 docs/api/puppeteer.frame.select.md create mode 100644 docs/api/puppeteer.frame.setcontent.md create mode 100644 docs/api/puppeteer.frame.tap.md create mode 100644 docs/api/puppeteer.frame.title.md create mode 100644 docs/api/puppeteer.frame.type.md create mode 100644 docs/api/puppeteer.frame.url.md create mode 100644 docs/api/puppeteer.frame.waitforfunction.md create mode 100644 docs/api/puppeteer.frame.waitfornavigation.md create mode 100644 docs/api/puppeteer.frame.waitforselector.md create mode 100644 docs/api/puppeteer.frame.waitforselector_1.md create mode 100644 docs/api/puppeteer.frame.waitfortimeout.md create mode 100644 docs/api/puppeteer.frame.waitforxpath.md create mode 100644 docs/api/puppeteer.frameaddscripttagoptions.content.md create mode 100644 docs/api/puppeteer.frameaddscripttagoptions.md create mode 100644 docs/api/puppeteer.frameaddscripttagoptions.path.md create mode 100644 docs/api/puppeteer.frameaddscripttagoptions.type.md create mode 100644 docs/api/puppeteer.frameaddscripttagoptions.url.md create mode 100644 docs/api/puppeteer.frameaddstyletagoptions.content.md create mode 100644 docs/api/puppeteer.frameaddstyletagoptions.md create mode 100644 docs/api/puppeteer.frameaddstyletagoptions.path.md create mode 100644 docs/api/puppeteer.frameaddstyletagoptions.url.md create mode 100644 docs/api/puppeteer.framewaitforfunctionoptions.md create mode 100644 docs/api/puppeteer.framewaitforfunctionoptions.polling.md create mode 100644 docs/api/puppeteer.framewaitforfunctionoptions.timeout.md create mode 100644 docs/api/puppeteer.geolocationoptions.accuracy.md create mode 100644 docs/api/puppeteer.geolocationoptions.latitude.md create mode 100644 docs/api/puppeteer.geolocationoptions.longitude.md create mode 100644 docs/api/puppeteer.geolocationoptions.md create mode 100644 docs/api/puppeteer.handlefor.md create mode 100644 docs/api/puppeteer.handleor.md create mode 100644 docs/api/puppeteer.handler.md create mode 100644 docs/api/puppeteer.httprequest.abort.md create mode 100644 docs/api/puppeteer.httprequest.aborterrorreason.md create mode 100644 docs/api/puppeteer.httprequest.client.md create mode 100644 docs/api/puppeteer.httprequest.continue.md create mode 100644 docs/api/puppeteer.httprequest.continuerequestoverrides.md create mode 100644 docs/api/puppeteer.httprequest.enqueueinterceptaction.md create mode 100644 docs/api/puppeteer.httprequest.failure.md create mode 100644 docs/api/puppeteer.httprequest.finalizeinterceptions.md create mode 100644 docs/api/puppeteer.httprequest.frame.md create mode 100644 docs/api/puppeteer.httprequest.headers.md create mode 100644 docs/api/puppeteer.httprequest.initiator.md create mode 100644 docs/api/puppeteer.httprequest.interceptresolutionstate.md create mode 100644 docs/api/puppeteer.httprequest.isinterceptresolutionhandled.md create mode 100644 docs/api/puppeteer.httprequest.isnavigationrequest.md create mode 100644 docs/api/puppeteer.httprequest.md create mode 100644 docs/api/puppeteer.httprequest.method.md create mode 100644 docs/api/puppeteer.httprequest.postdata.md create mode 100644 docs/api/puppeteer.httprequest.redirectchain.md create mode 100644 docs/api/puppeteer.httprequest.resourcetype.md create mode 100644 docs/api/puppeteer.httprequest.respond.md create mode 100644 docs/api/puppeteer.httprequest.response.md create mode 100644 docs/api/puppeteer.httprequest.responseforrequest.md create mode 100644 docs/api/puppeteer.httprequest.url.md create mode 100644 docs/api/puppeteer.httpresponse.buffer.md create mode 100644 docs/api/puppeteer.httpresponse.frame.md create mode 100644 docs/api/puppeteer.httpresponse.fromcache.md create mode 100644 docs/api/puppeteer.httpresponse.fromserviceworker.md create mode 100644 docs/api/puppeteer.httpresponse.headers.md create mode 100644 docs/api/puppeteer.httpresponse.json.md create mode 100644 docs/api/puppeteer.httpresponse.md create mode 100644 docs/api/puppeteer.httpresponse.ok.md create mode 100644 docs/api/puppeteer.httpresponse.remoteaddress.md create mode 100644 docs/api/puppeteer.httpresponse.request.md create mode 100644 docs/api/puppeteer.httpresponse.securitydetails.md create mode 100644 docs/api/puppeteer.httpresponse.status.md create mode 100644 docs/api/puppeteer.httpresponse.statustext.md create mode 100644 docs/api/puppeteer.httpresponse.text.md create mode 100644 docs/api/puppeteer.httpresponse.timing.md create mode 100644 docs/api/puppeteer.httpresponse.url.md create mode 100644 docs/api/puppeteer.innerparams.md create mode 100644 docs/api/puppeteer.interceptresolutionaction.md create mode 100644 docs/api/puppeteer.interceptresolutionstate.action.md create mode 100644 docs/api/puppeteer.interceptresolutionstate.md create mode 100644 docs/api/puppeteer.interceptresolutionstate.priority.md create mode 100644 docs/api/puppeteer.interceptresolutionstrategy.md create mode 100644 docs/api/puppeteer.internalnetworkconditions.md create mode 100644 docs/api/puppeteer.internalnetworkconditions.offline.md create mode 100644 docs/api/puppeteer.jscoverage._constructor_.md create mode 100644 docs/api/puppeteer.jscoverage.md create mode 100644 docs/api/puppeteer.jscoverage.start.md create mode 100644 docs/api/puppeteer.jscoverage.stop.md create mode 100644 docs/api/puppeteer.jscoverageentry.md create mode 100644 docs/api/puppeteer.jscoverageentry.rawscriptcoverage.md create mode 100644 docs/api/puppeteer.jscoverageoptions.includerawscriptcoverage.md create mode 100644 docs/api/puppeteer.jscoverageoptions.md create mode 100644 docs/api/puppeteer.jscoverageoptions.reportanonymousscripts.md create mode 100644 docs/api/puppeteer.jscoverageoptions.resetonnavigation.md create mode 100644 docs/api/puppeteer.jshandle.aselement.md create mode 100644 docs/api/puppeteer.jshandle.dispose.md create mode 100644 docs/api/puppeteer.jshandle.evaluate.md create mode 100644 docs/api/puppeteer.jshandle.evaluatehandle.md create mode 100644 docs/api/puppeteer.jshandle.executioncontext.md create mode 100644 docs/api/puppeteer.jshandle.getproperties.md create mode 100644 docs/api/puppeteer.jshandle.getproperty.md create mode 100644 docs/api/puppeteer.jshandle.getproperty_1.md create mode 100644 docs/api/puppeteer.jshandle.jsonvalue.md create mode 100644 docs/api/puppeteer.jshandle.md create mode 100644 docs/api/puppeteer.jshandle.tostring.md create mode 100644 docs/api/puppeteer.keyboard.down.md create mode 100644 docs/api/puppeteer.keyboard.md create mode 100644 docs/api/puppeteer.keyboard.press.md create mode 100644 docs/api/puppeteer.keyboard.sendcharacter.md create mode 100644 docs/api/puppeteer.keyboard.type.md create mode 100644 docs/api/puppeteer.keyboard.up.md create mode 100644 docs/api/puppeteer.keyinput.md create mode 100644 docs/api/puppeteer.launch.md create mode 100644 docs/api/puppeteer.launchoptions.channel.md create mode 100644 docs/api/puppeteer.launchoptions.dumpio.md create mode 100644 docs/api/puppeteer.launchoptions.env.md create mode 100644 docs/api/puppeteer.launchoptions.executablepath.md create mode 100644 docs/api/puppeteer.launchoptions.extraprefsfirefox.md create mode 100644 docs/api/puppeteer.launchoptions.handlesighup.md create mode 100644 docs/api/puppeteer.launchoptions.handlesigint.md create mode 100644 docs/api/puppeteer.launchoptions.handlesigterm.md create mode 100644 docs/api/puppeteer.launchoptions.ignoredefaultargs.md create mode 100644 docs/api/puppeteer.launchoptions.md create mode 100644 docs/api/puppeteer.launchoptions.pipe.md create mode 100644 docs/api/puppeteer.launchoptions.product.md create mode 100644 docs/api/puppeteer.launchoptions.timeout.md create mode 100644 docs/api/puppeteer.launchoptions.waitforinitialpage.md create mode 100644 docs/api/puppeteer.lowercasepaperformat.md create mode 100644 docs/api/puppeteer.mediafeature.md create mode 100644 docs/api/puppeteer.mediafeature.name.md create mode 100644 docs/api/puppeteer.mediafeature.value.md create mode 100644 docs/api/puppeteer.metrics.documents.md create mode 100644 docs/api/puppeteer.metrics.frames.md create mode 100644 docs/api/puppeteer.metrics.jseventlisteners.md create mode 100644 docs/api/puppeteer.metrics.jsheaptotalsize.md create mode 100644 docs/api/puppeteer.metrics.jsheapusedsize.md create mode 100644 docs/api/puppeteer.metrics.layoutcount.md create mode 100644 docs/api/puppeteer.metrics.layoutduration.md create mode 100644 docs/api/puppeteer.metrics.md create mode 100644 docs/api/puppeteer.metrics.nodes.md create mode 100644 docs/api/puppeteer.metrics.recalcstylecount.md create mode 100644 docs/api/puppeteer.metrics.recalcstyleduration.md create mode 100644 docs/api/puppeteer.metrics.scriptduration.md create mode 100644 docs/api/puppeteer.metrics.taskduration.md create mode 100644 docs/api/puppeteer.metrics.timestamp.md create mode 100644 docs/api/puppeteer.mouse.click.md create mode 100644 docs/api/puppeteer.mouse.down.md create mode 100644 docs/api/puppeteer.mouse.drag.md create mode 100644 docs/api/puppeteer.mouse.draganddrop.md create mode 100644 docs/api/puppeteer.mouse.dragenter.md create mode 100644 docs/api/puppeteer.mouse.dragover.md create mode 100644 docs/api/puppeteer.mouse.drop.md create mode 100644 docs/api/puppeteer.mouse.md create mode 100644 docs/api/puppeteer.mouse.move.md create mode 100644 docs/api/puppeteer.mouse.up.md create mode 100644 docs/api/puppeteer.mouse.wheel.md create mode 100644 docs/api/puppeteer.mousebutton.md create mode 100644 docs/api/puppeteer.mouseoptions.button.md create mode 100644 docs/api/puppeteer.mouseoptions.clickcount.md create mode 100644 docs/api/puppeteer.mouseoptions.md create mode 100644 docs/api/puppeteer.mousewheeloptions.deltax.md create mode 100644 docs/api/puppeteer.mousewheeloptions.deltay.md create mode 100644 docs/api/puppeteer.mousewheeloptions.md create mode 100644 docs/api/puppeteer.networkconditions.download.md create mode 100644 docs/api/puppeteer.networkconditions.latency.md create mode 100644 docs/api/puppeteer.networkconditions.md create mode 100644 docs/api/puppeteer.networkconditions.upload.md create mode 100644 docs/api/puppeteer.offset.md create mode 100644 docs/api/puppeteer.offset.x.md create mode 100644 docs/api/puppeteer.offset.y.md create mode 100644 docs/api/puppeteer.page._.md create mode 100644 docs/api/puppeteer.page.__.md create mode 100644 docs/api/puppeteer.page.__1.md create mode 100644 docs/api/puppeteer.page.___1.md create mode 100644 docs/api/puppeteer.page.__eval.md create mode 100644 docs/api/puppeteer.page.__eval_1.md create mode 100644 docs/api/puppeteer.page._eval.md create mode 100644 docs/api/puppeteer.page._eval_1.md create mode 100644 docs/api/puppeteer.page._x.md create mode 100644 docs/api/puppeteer.page.accessibility.md create mode 100644 docs/api/puppeteer.page.addscripttag.md create mode 100644 docs/api/puppeteer.page.addstyletag.md create mode 100644 docs/api/puppeteer.page.authenticate.md create mode 100644 docs/api/puppeteer.page.bringtofront.md create mode 100644 docs/api/puppeteer.page.browser.md create mode 100644 docs/api/puppeteer.page.browsercontext.md create mode 100644 docs/api/puppeteer.page.click.md create mode 100644 docs/api/puppeteer.page.close.md create mode 100644 docs/api/puppeteer.page.content.md create mode 100644 docs/api/puppeteer.page.cookies.md create mode 100644 docs/api/puppeteer.page.coverage.md create mode 100644 docs/api/puppeteer.page.createpdfstream.md create mode 100644 docs/api/puppeteer.page.deletecookie.md create mode 100644 docs/api/puppeteer.page.emulate.md create mode 100644 docs/api/puppeteer.page.emulatecputhrottling.md create mode 100644 docs/api/puppeteer.page.emulateidlestate.md create mode 100644 docs/api/puppeteer.page.emulatemediafeatures.md create mode 100644 docs/api/puppeteer.page.emulatemediatype.md create mode 100644 docs/api/puppeteer.page.emulatenetworkconditions.md create mode 100644 docs/api/puppeteer.page.emulatetimezone.md create mode 100644 docs/api/puppeteer.page.emulatevisiondeficiency.md create mode 100644 docs/api/puppeteer.page.evaluate.md create mode 100644 docs/api/puppeteer.page.evaluatehandle.md create mode 100644 docs/api/puppeteer.page.evaluateonnewdocument.md create mode 100644 docs/api/puppeteer.page.exposefunction.md create mode 100644 docs/api/puppeteer.page.focus.md create mode 100644 docs/api/puppeteer.page.frames.md create mode 100644 docs/api/puppeteer.page.goback.md create mode 100644 docs/api/puppeteer.page.goforward.md create mode 100644 docs/api/puppeteer.page.goto.md create mode 100644 docs/api/puppeteer.page.hover.md create mode 100644 docs/api/puppeteer.page.isclosed.md create mode 100644 docs/api/puppeteer.page.isdraginterceptionenabled.md create mode 100644 docs/api/puppeteer.page.isjavascriptenabled.md create mode 100644 docs/api/puppeteer.page.keyboard.md create mode 100644 docs/api/puppeteer.page.mainframe.md create mode 100644 docs/api/puppeteer.page.md create mode 100644 docs/api/puppeteer.page.metrics.md create mode 100644 docs/api/puppeteer.page.mouse.md create mode 100644 docs/api/puppeteer.page.off.md create mode 100644 docs/api/puppeteer.page.on.md create mode 100644 docs/api/puppeteer.page.once.md create mode 100644 docs/api/puppeteer.page.pdf.md create mode 100644 docs/api/puppeteer.page.queryobjects.md create mode 100644 docs/api/puppeteer.page.reload.md create mode 100644 docs/api/puppeteer.page.screenshot.md create mode 100644 docs/api/puppeteer.page.select.md create mode 100644 docs/api/puppeteer.page.setbypasscsp.md create mode 100644 docs/api/puppeteer.page.setcacheenabled.md create mode 100644 docs/api/puppeteer.page.setcontent.md create mode 100644 docs/api/puppeteer.page.setcookie.md create mode 100644 docs/api/puppeteer.page.setdefaultnavigationtimeout.md create mode 100644 docs/api/puppeteer.page.setdefaulttimeout.md create mode 100644 docs/api/puppeteer.page.setdraginterception.md create mode 100644 docs/api/puppeteer.page.setextrahttpheaders.md create mode 100644 docs/api/puppeteer.page.setgeolocation.md create mode 100644 docs/api/puppeteer.page.setjavascriptenabled.md create mode 100644 docs/api/puppeteer.page.setofflinemode.md create mode 100644 docs/api/puppeteer.page.setrequestinterception.md create mode 100644 docs/api/puppeteer.page.setuseragent.md create mode 100644 docs/api/puppeteer.page.setviewport.md create mode 100644 docs/api/puppeteer.page.tap.md create mode 100644 docs/api/puppeteer.page.target.md create mode 100644 docs/api/puppeteer.page.title.md create mode 100644 docs/api/puppeteer.page.touchscreen.md create mode 100644 docs/api/puppeteer.page.tracing.md create mode 100644 docs/api/puppeteer.page.type.md create mode 100644 docs/api/puppeteer.page.url.md create mode 100644 docs/api/puppeteer.page.viewport.md create mode 100644 docs/api/puppeteer.page.waitforfilechooser.md create mode 100644 docs/api/puppeteer.page.waitforframe.md create mode 100644 docs/api/puppeteer.page.waitforfunction.md create mode 100644 docs/api/puppeteer.page.waitfornavigation.md create mode 100644 docs/api/puppeteer.page.waitfornetworkidle.md create mode 100644 docs/api/puppeteer.page.waitforrequest.md create mode 100644 docs/api/puppeteer.page.waitforresponse.md create mode 100644 docs/api/puppeteer.page.waitforselector.md create mode 100644 docs/api/puppeteer.page.waitforselector_1.md create mode 100644 docs/api/puppeteer.page.waitfortimeout.md create mode 100644 docs/api/puppeteer.page.waitforxpath.md create mode 100644 docs/api/puppeteer.page.workers.md create mode 100644 docs/api/puppeteer.pageemittedevents.md create mode 100644 docs/api/puppeteer.pageeventobject.close.md create mode 100644 docs/api/puppeteer.pageeventobject.console.md create mode 100644 docs/api/puppeteer.pageeventobject.dialog.md create mode 100644 docs/api/puppeteer.pageeventobject.domcontentloaded.md create mode 100644 docs/api/puppeteer.pageeventobject.error.md create mode 100644 docs/api/puppeteer.pageeventobject.frameattached.md create mode 100644 docs/api/puppeteer.pageeventobject.framedetached.md create mode 100644 docs/api/puppeteer.pageeventobject.framenavigated.md create mode 100644 docs/api/puppeteer.pageeventobject.load.md create mode 100644 docs/api/puppeteer.pageeventobject.md create mode 100644 docs/api/puppeteer.pageeventobject.metrics.md create mode 100644 docs/api/puppeteer.pageeventobject.pageerror.md create mode 100644 docs/api/puppeteer.pageeventobject.popup.md create mode 100644 docs/api/puppeteer.pageeventobject.request.md create mode 100644 docs/api/puppeteer.pageeventobject.requestfailed.md create mode 100644 docs/api/puppeteer.pageeventobject.requestfinished.md create mode 100644 docs/api/puppeteer.pageeventobject.requestservedfromcache.md create mode 100644 docs/api/puppeteer.pageeventobject.response.md create mode 100644 docs/api/puppeteer.pageeventobject.workercreated.md create mode 100644 docs/api/puppeteer.pageeventobject.workerdestroyed.md create mode 100644 docs/api/puppeteer.paperformat.md create mode 100644 docs/api/puppeteer.pdfmargin.bottom.md create mode 100644 docs/api/puppeteer.pdfmargin.left.md create mode 100644 docs/api/puppeteer.pdfmargin.md create mode 100644 docs/api/puppeteer.pdfmargin.right.md create mode 100644 docs/api/puppeteer.pdfmargin.top.md create mode 100644 docs/api/puppeteer.pdfoptions.displayheaderfooter.md create mode 100644 docs/api/puppeteer.pdfoptions.footertemplate.md create mode 100644 docs/api/puppeteer.pdfoptions.format.md create mode 100644 docs/api/puppeteer.pdfoptions.headertemplate.md create mode 100644 docs/api/puppeteer.pdfoptions.height.md create mode 100644 docs/api/puppeteer.pdfoptions.landscape.md create mode 100644 docs/api/puppeteer.pdfoptions.margin.md create mode 100644 docs/api/puppeteer.pdfoptions.md create mode 100644 docs/api/puppeteer.pdfoptions.omitbackground.md create mode 100644 docs/api/puppeteer.pdfoptions.pageranges.md create mode 100644 docs/api/puppeteer.pdfoptions.path.md create mode 100644 docs/api/puppeteer.pdfoptions.prefercsspagesize.md create mode 100644 docs/api/puppeteer.pdfoptions.printbackground.md create mode 100644 docs/api/puppeteer.pdfoptions.scale.md create mode 100644 docs/api/puppeteer.pdfoptions.timeout.md create mode 100644 docs/api/puppeteer.pdfoptions.width.md create mode 100644 docs/api/puppeteer.permission.md create mode 100644 docs/api/puppeteer.platform.md create mode 100644 docs/api/puppeteer.point.md create mode 100644 docs/api/puppeteer.point.x.md create mode 100644 docs/api/puppeteer.point.y.md create mode 100644 docs/api/puppeteer.pressoptions.delay.md create mode 100644 docs/api/puppeteer.pressoptions.md create mode 100644 docs/api/puppeteer.pressoptions.text.md create mode 100644 docs/api/puppeteer.product.md create mode 100644 docs/api/puppeteer.productlauncher.defaultargs.md create mode 100644 docs/api/puppeteer.productlauncher.executablepath.md create mode 100644 docs/api/puppeteer.productlauncher.launch.md create mode 100644 docs/api/puppeteer.productlauncher.md create mode 100644 docs/api/puppeteer.productlauncher.product.md create mode 100644 docs/api/puppeteer.protocolerror.code.md create mode 100644 docs/api/puppeteer.protocolerror.md create mode 100644 docs/api/puppeteer.protocolerror.originalmessage.md create mode 100644 docs/api/puppeteer.protocollifecycleevent.md create mode 100644 docs/api/puppeteer.puppeteer._changedproduct.md create mode 100644 docs/api/puppeteer.puppeteer._ispuppeteercore.md create mode 100644 docs/api/puppeteer.puppeteer.clearcustomqueryhandlers.md create mode 100644 docs/api/puppeteer.puppeteer.connect.md create mode 100644 docs/api/puppeteer.puppeteer.customqueryhandlernames.md create mode 100644 docs/api/puppeteer.puppeteer.devices.md create mode 100644 docs/api/puppeteer.puppeteer.errors.md create mode 100644 docs/api/puppeteer.puppeteer.md create mode 100644 docs/api/puppeteer.puppeteer.networkconditions.md create mode 100644 docs/api/puppeteer.puppeteer.registercustomqueryhandler.md create mode 100644 docs/api/puppeteer.puppeteer.unregistercustomqueryhandler.md create mode 100644 docs/api/puppeteer.puppeteererrors.md create mode 100644 docs/api/puppeteer.puppeteererrors.protocolerror.md create mode 100644 docs/api/puppeteer.puppeteererrors.timeouterror.md create mode 100644 docs/api/puppeteer.puppeteerlaunchoptions.extraprefsfirefox.md create mode 100644 docs/api/puppeteer.puppeteerlaunchoptions.md create mode 100644 docs/api/puppeteer.puppeteerlaunchoptions.product.md create mode 100644 docs/api/puppeteer.puppeteerlifecycleevent.md create mode 100644 docs/api/puppeteer.puppeteernode._preferredrevision.md create mode 100644 docs/api/puppeteer.puppeteernode.connect.md create mode 100644 docs/api/puppeteer.puppeteernode.createbrowserfetcher.md create mode 100644 docs/api/puppeteer.puppeteernode.defaultargs.md create mode 100644 docs/api/puppeteer.puppeteernode.executablepath.md create mode 100644 docs/api/puppeteer.puppeteernode.launch.md create mode 100644 docs/api/puppeteer.puppeteernode.md create mode 100644 docs/api/puppeteer.puppeteernode.product.md create mode 100644 docs/api/puppeteer.puppeteernodelaunchoptions.md create mode 100644 docs/api/puppeteer.registercustomqueryhandler.md create mode 100644 docs/api/puppeteer.remoteaddress.ip.md create mode 100644 docs/api/puppeteer.remoteaddress.md create mode 100644 docs/api/puppeteer.remoteaddress.port.md create mode 100644 docs/api/puppeteer.resourcetype.md create mode 100644 docs/api/puppeteer.responseforrequest.body.md create mode 100644 docs/api/puppeteer.responseforrequest.contenttype.md create mode 100644 docs/api/puppeteer.responseforrequest.headers.md create mode 100644 docs/api/puppeteer.responseforrequest.md create mode 100644 docs/api/puppeteer.responseforrequest.status.md create mode 100644 docs/api/puppeteer.screenshotclip.height.md create mode 100644 docs/api/puppeteer.screenshotclip.md create mode 100644 docs/api/puppeteer.screenshotclip.width.md create mode 100644 docs/api/puppeteer.screenshotclip.x.md create mode 100644 docs/api/puppeteer.screenshotclip.y.md create mode 100644 docs/api/puppeteer.screenshotoptions.capturebeyondviewport.md create mode 100644 docs/api/puppeteer.screenshotoptions.clip.md create mode 100644 docs/api/puppeteer.screenshotoptions.encoding.md create mode 100644 docs/api/puppeteer.screenshotoptions.fromsurface.md create mode 100644 docs/api/puppeteer.screenshotoptions.fullpage.md create mode 100644 docs/api/puppeteer.screenshotoptions.md create mode 100644 docs/api/puppeteer.screenshotoptions.omitbackground.md create mode 100644 docs/api/puppeteer.screenshotoptions.path.md create mode 100644 docs/api/puppeteer.screenshotoptions.quality.md create mode 100644 docs/api/puppeteer.screenshotoptions.type.md create mode 100644 docs/api/puppeteer.securitydetails.issuer.md create mode 100644 docs/api/puppeteer.securitydetails.md create mode 100644 docs/api/puppeteer.securitydetails.protocol.md create mode 100644 docs/api/puppeteer.securitydetails.subjectalternativenames.md create mode 100644 docs/api/puppeteer.securitydetails.subjectname.md create mode 100644 docs/api/puppeteer.securitydetails.validfrom.md create mode 100644 docs/api/puppeteer.securitydetails.validto.md create mode 100644 docs/api/puppeteer.serializedaxnode.autocomplete.md create mode 100644 docs/api/puppeteer.serializedaxnode.checked.md create mode 100644 docs/api/puppeteer.serializedaxnode.children.md create mode 100644 docs/api/puppeteer.serializedaxnode.description.md create mode 100644 docs/api/puppeteer.serializedaxnode.disabled.md create mode 100644 docs/api/puppeteer.serializedaxnode.expanded.md create mode 100644 docs/api/puppeteer.serializedaxnode.focused.md create mode 100644 docs/api/puppeteer.serializedaxnode.haspopup.md create mode 100644 docs/api/puppeteer.serializedaxnode.invalid.md create mode 100644 docs/api/puppeteer.serializedaxnode.keyshortcuts.md create mode 100644 docs/api/puppeteer.serializedaxnode.level.md create mode 100644 docs/api/puppeteer.serializedaxnode.md create mode 100644 docs/api/puppeteer.serializedaxnode.modal.md create mode 100644 docs/api/puppeteer.serializedaxnode.multiline.md create mode 100644 docs/api/puppeteer.serializedaxnode.multiselectable.md create mode 100644 docs/api/puppeteer.serializedaxnode.name.md create mode 100644 docs/api/puppeteer.serializedaxnode.orientation.md create mode 100644 docs/api/puppeteer.serializedaxnode.pressed.md create mode 100644 docs/api/puppeteer.serializedaxnode.readonly.md create mode 100644 docs/api/puppeteer.serializedaxnode.required.md create mode 100644 docs/api/puppeteer.serializedaxnode.role.md create mode 100644 docs/api/puppeteer.serializedaxnode.roledescription.md create mode 100644 docs/api/puppeteer.serializedaxnode.selected.md create mode 100644 docs/api/puppeteer.serializedaxnode.value.md create mode 100644 docs/api/puppeteer.serializedaxnode.valuemax.md create mode 100644 docs/api/puppeteer.serializedaxnode.valuemin.md create mode 100644 docs/api/puppeteer.serializedaxnode.valuetext.md create mode 100644 docs/api/puppeteer.snapshotoptions.interestingonly.md create mode 100644 docs/api/puppeteer.snapshotoptions.md create mode 100644 docs/api/puppeteer.snapshotoptions.root.md create mode 100644 docs/api/puppeteer.target.browser.md create mode 100644 docs/api/puppeteer.target.browsercontext.md create mode 100644 docs/api/puppeteer.target.createcdpsession.md create mode 100644 docs/api/puppeteer.target.md create mode 100644 docs/api/puppeteer.target.opener.md create mode 100644 docs/api/puppeteer.target.page.md create mode 100644 docs/api/puppeteer.target.type.md create mode 100644 docs/api/puppeteer.target.url.md create mode 100644 docs/api/puppeteer.target.worker.md create mode 100644 docs/api/puppeteer.targetfiltercallback.md create mode 100644 docs/api/puppeteer.timeouterror.md create mode 100644 docs/api/puppeteer.touchscreen.md create mode 100644 docs/api/puppeteer.touchscreen.tap.md create mode 100644 docs/api/puppeteer.tracing.md create mode 100644 docs/api/puppeteer.tracing.start.md create mode 100644 docs/api/puppeteer.tracing.stop.md create mode 100644 docs/api/puppeteer.tracingoptions.categories.md create mode 100644 docs/api/puppeteer.tracingoptions.md create mode 100644 docs/api/puppeteer.tracingoptions.path.md create mode 100644 docs/api/puppeteer.tracingoptions.screenshots.md create mode 100644 docs/api/puppeteer.unregistercustomqueryhandler.md create mode 100644 docs/api/puppeteer.viewport.devicescalefactor.md create mode 100644 docs/api/puppeteer.viewport.hastouch.md create mode 100644 docs/api/puppeteer.viewport.height.md create mode 100644 docs/api/puppeteer.viewport.islandscape.md create mode 100644 docs/api/puppeteer.viewport.ismobile.md create mode 100644 docs/api/puppeteer.viewport.md create mode 100644 docs/api/puppeteer.viewport.width.md create mode 100644 docs/api/puppeteer.waitforoptions.md create mode 100644 docs/api/puppeteer.waitforoptions.timeout.md create mode 100644 docs/api/puppeteer.waitforoptions.waituntil.md create mode 100644 docs/api/puppeteer.waitforselectoroptions.hidden.md create mode 100644 docs/api/puppeteer.waitforselectoroptions.md create mode 100644 docs/api/puppeteer.waitforselectoroptions.root.md create mode 100644 docs/api/puppeteer.waitforselectoroptions.timeout.md create mode 100644 docs/api/puppeteer.waitforselectoroptions.visible.md create mode 100644 docs/api/puppeteer.waitfortargetoptions.md create mode 100644 docs/api/puppeteer.waitfortargetoptions.timeout.md create mode 100644 docs/api/puppeteer.waittimeoutoptions.md create mode 100644 docs/api/puppeteer.waittimeoutoptions.timeout.md create mode 100644 docs/api/puppeteer.webworker.evaluate.md create mode 100644 docs/api/puppeteer.webworker.evaluatehandle.md create mode 100644 docs/api/puppeteer.webworker.executioncontext.md create mode 100644 docs/api/puppeteer.webworker.md create mode 100644 docs/api/puppeteer.webworker.url.md create mode 100644 docs/chromium-support.md rename CONTRIBUTING.md => docs/contributing.md (76%) create mode 100644 docs/faq.md create mode 100644 docs/index.md delete mode 100644 docs/issue_template.md create mode 100644 package-lock.json delete mode 100644 utils/ESTreeWalker.js delete mode 100644 utils/doclint/.gitignore delete mode 100644 utils/doclint/Message.js delete mode 100644 utils/doclint/README.md delete mode 100644 utils/doclint/Source.js delete mode 100755 utils/doclint/cli.js delete mode 100644 utils/doclint/preprocessor/index.js delete mode 100644 utils/doclint/preprocessor/preprocessor.spec.js delete mode 100755 utils/fetch_devices.js create mode 100644 utils/generate_docs.ts delete mode 100755 utils/get_latest_changelog.js create mode 100644 utils/internal/custom_markdown_action.ts create mode 100644 utils/internal/custom_markdown_documenter.ts delete mode 100644 utils/remove-tag.js create mode 100644 website/README.md create mode 100644 website/babel.config.js create mode 100644 website/docusaurus.config.js create mode 100644 website/package-lock.json create mode 100644 website/package.json create mode 100644 website/sidebars.json create mode 100644 website/src/css/custom.css create mode 100644 website/static/.nojekyll create mode 100644 website/static/img/docusaurus.png create mode 100644 website/static/img/favicon.ico create mode 100644 website/static/img/logo.svg diff --git a/.eslintignore b/.eslintignore index dc03b7c0cd1ed..2bd5f680d2b9d 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,7 +1,6 @@ assets/ build/ coverage/ -doclint/ lib/ tsconfig.tsbuildinfo vendor/ diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index dd7252ec97528..542730768c6a0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,6 +16,67 @@ concurrency: cancel-in-progress: true jobs: + check-docs: + name: Check documentation + runs-on: ubuntu-latest + outputs: + needs_deploying: ${{ steps.needs_deploying.outputs.value }} + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Set up Node.js + uses: actions/setup-node@v3.3.0 + with: + cache: npm + - name: Cache Chromium binary directory + uses: actions/cache@v3 + with: + path: .local-chromium + key: ${{ runner.os }}-chromium-${{ hashFiles('src/revisions.ts') }} + - name: Install dependencies + run: npm ci + - name: Build + run: npm run docs + - name: Check if autogenerated docs differ + run: $(git diff) || exit 1 + - name: Check if docs need to be deployed + id: needs_deploying + run: | + if [[ $(git diff @~ -- ./docs ./website) ]]; then + needs_deploying=true + else + needs_deploying=false + fi + echo "::set-output name=value::$needs_deploying" + + deploy-docs: + needs: check-docs + name: Deploy docs (if needed) + if: ${{ needs.check-docs.outputs.needs_deploying == 'true' && github.event_name != 'pull_request' }} + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + fetch-depth: 2 + - name: Set up Node.js + uses: actions/setup-node@v3.3.0 + with: + cache: npm + - name: Install dependencies + working-directory: ./website + run: npm ci + - name: Build website + working-directory: ./website + run: npm run build + - name: Deploy to GitHub Pages + uses: peaceiris/actions-gh-pages@v3 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: ./website/build + user_name: release-please[bot] + user_email: 55107282+release-please[bot]@users.noreply.github.com + linux: # https://github.com/actions/virtual-environments#available-environments runs-on: ubuntu-latest @@ -51,9 +112,6 @@ jobs: run: | npm run test:pinned-deps npm run lint - # Skipping as it's flakey and we are not currently using the new documentation site in the wild yet. - # See https://github.com/puppeteer/puppeteer/issues/7710 for more info - # npm run generate:docs npm run test:protocol-revision npm run test:types diff --git a/.github/workflows/pre-release.yml b/.github/workflows/pre-release.yml index c67d46285d0c5..7daaddd63f036 100644 --- a/.github/workflows/pre-release.yml +++ b/.github/workflows/pre-release.yml @@ -21,10 +21,16 @@ jobs: - name: Build run: | node utils/generate_version_file.js - IS_RELEASE=1 npm run doc + npm run docs + - name: Version docs + working-directory: ./website + run: | + npm install + npm run docusaurus docs:version $(jq -r .version ../package.json) - name: Commit run: | git config --global user.name 'release-please[bot]' git config --global user.email '55107282+release-please[bot]@users.noreply.github.com' - git commit -am 'chore: freeze version on docs' + git add . + git commit -m 'chore: generated versioned docs' git push --no-verify diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 78da3291663ee..70efb69fb13ce 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -36,25 +36,3 @@ jobs: npm config set registry 'https://wombat-dressing-room.appspot.com/' npm config set '//wombat-dressing-room.appspot.com/:_authToken' '${NPM_TOKEN}' npm publish - - post-publish: - needs: publish - runs-on: ubuntu-latest - permissions: - contents: write - pull-requests: write - steps: - - name: Checkout - uses: actions/checkout@v3 - with: - ref: main - - name: Install dependencies - run: npm install - - name: Build main docs - run: npm run doc - - name: Commit - run: | - git config --global user.email "55107282+release-please[bot]@users.noreply.github.com" - git config --global user.name "release-please[bot]" - git commit -am "chore: unfreeze version on docs" - git push diff --git a/.gitignore b/.gitignore index ee4a2d28f7fb9..2e0aa2aacc812 100644 --- a/.gitignore +++ b/.gitignore @@ -1,19 +1,33 @@ -.DS_Store -.vscode -/.dev_profile* -/.local-chromium/ -/.local-firefox/ -/test/output-*/ -build/ +# Dependencies +node_modules + +# Production +build +lib + +# Generated files coverage -coverage/ -doclint/ -docs-api-json/ -docs/api.html -lib/ -node_modules/ -package-lock.json +tsconfig.tsbuildinfo puppeteer.api.json puppeteer*.tgz -tsconfig.tsbuildinfo -yarn.lock \ No newline at end of file +yarn.lock +.docusaurus +.cache-loader +.local-chromium +.local-firefox +test/output-*/ +.dev_profile* + +# IDE Artifacts +.vscode + +# Misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* diff --git a/.prettierignore b/.prettierignore index 9ad8f10f58201..35314fbb3dc4f 100644 --- a/.prettierignore +++ b/.prettierignore @@ -4,7 +4,6 @@ assets/ build/ CHANGELOG.md coverage/ -doclint/ lib/ node_modules/ package-lock.json @@ -13,4 +12,6 @@ test/assets/ tsconfig.tsbuildinfo vendor/ yarn.lock -puppeteer.api.json \ No newline at end of file +puppeteer.api.json +website/ +docs/ \ No newline at end of file diff --git a/README.md b/README.md index a41a426fe17c6..57694b4db25cb 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,7 @@ +--- +sidebar_position: 1 +--- + # Puppeteer @@ -6,15 +10,15 @@ - + -###### [API](https://github.com/puppeteer/puppeteer/blob/v15.2.0/docs/api.md) | [FAQ](#faq) | [Contributing](https://github.com/puppeteer/puppeteer/blob/main/CONTRIBUTING.md) | [Troubleshooting](https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md) +###### [API](https://pptr.dev/api) | [FAQ](https://pptr.dev/faq) | [Contributing](https://pptr.dev/contributing) | [Troubleshooting](https://pptr.dev/troubleshooting) > Puppeteer is a Node library which provides a high-level API to control Chrome or Chromium over the [DevTools Protocol](https://chromedevtools.github.io/devtools-protocol/). Puppeteer runs [headless](https://developers.google.com/web/updates/2017/04/headless-chrome) by default, but can be configured to run full (non-headless) Chrome or Chromium. -###### What can I do? +##### What can I do? Most things that you can do manually in the browser can be done using Puppeteer! Here are a few examples to get you started: @@ -39,37 +43,81 @@ npm i puppeteer # or "yarn add puppeteer" ``` -Note: When you install Puppeteer, it downloads a recent version of Chromium (~170MB Mac, ~282MB Linux, ~280MB Win) that is guaranteed to work with the API. To skip the download, download into another path, or download a different browser, see [Environment variables](https://github.com/puppeteer/puppeteer/blob/v15.2.0/docs/api.md#environment-variables). +When you install Puppeteer, it downloads a recent version of Chromium (~170MB Mac, ~282MB Linux, ~280MB Win) that is guaranteed to work with the API (customizable through [Environment Variables](#environment-variables)). For a version of Puppeteer purely for connection, see [`puppeteer-core`](#puppeteer-core). -### puppeteer-core +#### Environment Variables -Since version 1.7.0 we publish the [`puppeteer-core`](https://www.npmjs.com/package/puppeteer-core) package, -a version of Puppeteer that doesn't download any browser by default. +Puppeteer looks for certain [environment variables](https://en.wikipedia.org/wiki/Environment_variable) to aid its operations. +If Puppeteer doesn't find them in the environment during the installation step, a lowercased variant of these variables will be used from the [npm config](https://docs.npmjs.com/cli/config). -```bash -npm i puppeteer-core -# or "yarn add puppeteer-core" -``` +- `HTTP_PROXY`, `HTTPS_PROXY`, `NO_PROXY` - defines HTTP proxy settings that are used to download and run the browser. +- `PUPPETEER_SKIP_CHROMIUM_DOWNLOAD` - do not download bundled Chromium during installation step. +- `PUPPETEER_TMP_DIR` - defines the directory to be used by Puppeteer for creating temporary files. Defaults to [`os.tmpdir()`](https://nodejs.org/api/os.html#os_os_tmpdir). +- `PUPPETEER_DOWNLOAD_HOST` - overwrite URL prefix that is used to download Chromium. Note: this includes protocol and might even include path prefix. Defaults to `https://storage.googleapis.com`. +- `PUPPETEER_DOWNLOAD_PATH` - overwrite the path for the downloads folder. Defaults to `/.local-chromium`, where `` is Puppeteer's package root. +- `PUPPETEER_CHROMIUM_REVISION` - specify a certain version of Chromium you'd like Puppeteer to use. See [`puppeteer.launch`](https://pptr.dev/api/puppeteer.puppeteernode.launch) on how executable path is inferred. +- `PUPPETEER_EXECUTABLE_PATH` - specify an executable path to be used in [`puppeteer.launch`](https://pptr.dev/api/puppeteer.puppeteernode.launch). +- `PUPPETEER_PRODUCT` - specify which browser you'd like Puppeteer to use. Must be one of `chrome` or `firefox`. This can also be used during installation to fetch the recommended browser binary. Setting `product` programmatically in [`puppeteer.launch`](https://pptr.dev/api/puppeteer.puppeteernode.launch) supersedes this environment variable. The product is exposed in [`puppeteer.product`](https://pptr.dev/api/puppeteer.product) +- `PUPPETEER_EXPERIMENTAL_CHROMIUM_MAC_ARM` — specify Puppeteer download Chromium for Apple M1. On Apple M1 devices Puppeteer by default downloads the version for Intel's processor which runs via Rosetta. It works without any problems, however, with this option, you should get more efficient resource usage (CPU and RAM) that could lead to a faster execution time. + +:::danger + +Puppeteer is only [guaranteed to work](https://pptr.dev/faq#q-why-doesnt-puppeteer-vxxx-work-with-chromium-vyyy) with the bundled Chromium, use at your own risk. + +::: + +:::caution + +`PUPPETEER_*` env variables are not accounted for in [`puppeteer-core`](#puppeteer-core). + +::: + +#### puppeteer-core + +Every release since v1.7.0 we publish two packages: + +- [`puppeteer`](https://www.npmjs.com/package/puppeteer) +- [`puppeteer-core`](https://www.npmjs.com/package/puppeteer-core) + +`puppeteer` is a _product_ for browser automation. When installed, it downloads a version of +Chromium, which it then drives using `puppeteer-core`. Being an end-user product, `puppeteer` supports a bunch of convenient `PUPPETEER_*` env variables to tweak its behavior. + +`puppeteer-core` is a _library_ to help drive anything that supports DevTools protocol. `puppeteer-core` doesn't download Chromium when installed. Being a library, `puppeteer-core` is fully driven +through its programmatic interface and disregards all the `PUPPETEER_*` env variables. + +To sum up, the only differences between `puppeteer-core` and `puppeteer` are: -`puppeteer-core` is intended to be a lightweight version of Puppeteer for launching an existing browser installation or for connecting to a remote one. Be sure that the version of puppeteer-core you install is compatible with the browser you intend to connect to. +- `puppeteer-core` doesn't automatically download Chromium when installed. +- `puppeteer-core` ignores all `PUPPETEER_*` env variables. -See [puppeteer vs puppeteer-core](https://github.com/puppeteer/puppeteer/blob/v15.2.0/docs/api.md#puppeteer-vs-puppeteer-core). +In most cases, you'll be fine using the `puppeteer` package. + +However, you should use `puppeteer-core` if: + +- you're building another end-user product or library atop of DevTools protocol. For example, one might build a PDF generator using `puppeteer-core` and write a custom `install.js` script that downloads [`headless_shell`](https://chromium.googlesource.com/chromium/src/+/lkgr/headless/README.md) instead of Chromium to save disk space. +- you're bundling Puppeteer to use in Chrome Extension / browser with the DevTools protocol where downloading an additional Chromium binary is unnecessary. +- you're building a set of tools where `puppeteer-core` is one of the ingredients and you want to postpone `install.js` script execution until Chromium is about to be used. + +When using `puppeteer-core`, remember to change the _include_ line: + +```ts +const puppeteer = require('puppeteer-core'); +``` + +You will then need to call [`puppeteer.connect`](https://pptr.dev/api/puppeteer.puppeteer.connect) or [`puppeteer.launch`](https://pptr.dev/api/puppeteer.puppeteernode.launch) with an explicit `executablePath` or `channel` option. ### Usage Puppeteer follows the latest [maintenance LTS](https://github.com/nodejs/Release#release-schedule) version of Node. -Note: Prior to v1.18.1, Puppeteer required at least Node v6.4.0. Versions from v1.18.1 to v2.1.0 rely on -Node 8.9.0+. Starting from v3.0.0 Puppeteer starts to rely on Node 10.18.1+. All examples below use async/await which is only supported in Node v7.6.0 or greater. - Puppeteer will be familiar to people using other browser testing frameworks. You create an instance -of `Browser`, open pages, and then manipulate them with [Puppeteer's API](https://github.com/puppeteer/puppeteer/blob/v15.2.0/docs/api.md#). +of `Browser`, open pages, and then manipulate them with [Puppeteer's API](https://pptr.dev/api). **Example** - navigating to https://example.com and saving a screenshot as _example.png_: Save file as **example.js** -```js +```ts const puppeteer = require('puppeteer'); (async () => { @@ -88,13 +136,13 @@ Execute script on the command line node example.js ``` -Puppeteer sets an initial page size to 800×600px, which defines the screenshot size. The page size can be customized with [`Page.setViewport()`](https://github.com/puppeteer/puppeteer/blob/v15.2.0/docs/api.md#pagesetviewportviewport). +Puppeteer sets an initial page size to 800×600px, which defines the screenshot size. The page size can be customized with [`Page.setViewport()`](https://pptr.dev/api/puppeteer.page.setviewport). **Example** - create a PDF. Save file as **hn.js** -```js +```ts const puppeteer = require('puppeteer'); (async () => { @@ -115,13 +163,13 @@ Execute script on the command line node hn.js ``` -See [`Page.pdf()`](https://github.com/puppeteer/puppeteer/blob/v15.2.0/docs/api.md#pagepdfoptions) for more information about creating pdfs. +See [`Page.pdf`](https://pptr.dev/api/puppeteer.page.pdf) for more information about creating pdfs. **Example** - evaluate script in the context of the page Save file as **get-dimensions.js** -```js +```ts const puppeteer = require('puppeteer'); (async () => { @@ -150,19 +198,64 @@ Execute script on the command line node get-dimensions.js ``` -See [`Page.evaluate()`](https://github.com/puppeteer/puppeteer/blob/v15.2.0/docs/api.md#pageevaluatepagefunction-args) for more information on `evaluate` and related methods like `evaluateOnNewDocument` and `exposeFunction`. +See [`Page.evaluate`](https://pptr.dev/api/puppeteer.page.evaluate) and related methods like [`Page.evaluateOnNewDocument`](https://pptr.dev/api/puppeteer.page.evaluateOnNewDocument) and [`Page.exposeFunction`](https://pptr.dev/api/puppeteer.page.exposeFunction). +### Working with Chrome Extensions + +Puppeteer can be used for testing Chrome Extensions. + +:::caution + +Extensions in Chrome / Chromium currently only work in non-headless mode and experimental Chrome headless mode. + +::: + +The following is code for getting a handle to the [background page](https://developer.chrome.com/extensions/background_pages) of an extension whose source is located in `./my-extension`: + +```ts +const puppeteer = require('puppeteer'); + +(async () => { + const pathToExtension = require('path').join(__dirname, 'my-extension'); + const browser = await puppeteer.launch({ + headless: 'chrome', + args: [ + `--disable-extensions-except=${pathToExtension}`, + `--load-extension=${pathToExtension}`, + ], + }); + const backgroundPageTarget = await browser.waitForTarget( + target => target.type() === 'background_page' + ); + const backgroundPage = await backgroundPageTarget.page(); + // Test the background page as you would any other page. + await browser.close(); +})(); +``` + +:::note + +Chrome Manifest V3 extensions have a background ServiceWorker of type 'service_worker', instead of a page of type 'background_page'. + +::: + +:::note + +It is not yet possible to test extension popups or content scripts. + +::: + ## Default runtime settings **1. Uses Headless mode** -Puppeteer launches Chromium in [headless mode](https://developers.google.com/web/updates/2017/04/headless-chrome). To launch a full version of Chromium, set the [`headless` option](https://github.com/puppeteer/puppeteer/blob/v15.2.0/docs/api.md#puppeteerlaunchoptions) when launching a browser: +Puppeteer launches Chromium in [headless mode](https://developers.google.com/web/updates/2017/04/headless-chrome). To launch a full version of Chromium, set the [`headless` option](https://pptr.dev/api/puppeteer.browserlaunchargumentoptions.headless) when launching a browser: -```js +```ts const browser = await puppeteer.launch({headless: false}); // default is true ``` @@ -172,11 +265,11 @@ By default, Puppeteer downloads and uses a specific version of Chromium so its A is guaranteed to work out of the box. To use Puppeteer with a different version of Chrome or Chromium, pass in the executable's path when creating a `Browser` instance: -```js +```ts const browser = await puppeteer.launch({executablePath: '/path/to/Chrome'}); ``` -You can also use Puppeteer with Firefox Nightly (experimental support). See [`Puppeteer.launch()`](https://github.com/puppeteer/puppeteer/blob/v15.2.0/docs/api.md#puppeteerlaunchoptions) for more information. +You can also use Puppeteer with Firefox Nightly (experimental support). See [`Puppeteer.launch`](https://pptr.dev/api/puppeteer.puppeteernode.launch) for more information. See [`this article`](https://www.howtogeek.com/202825/what%E2%80%99s-the-difference-between-chromium-and-chrome/) for a description of the differences between Chromium and Chrome. [`This article`](https://chromium.googlesource.com/chromium/src/+/refs/heads/main/docs/chromium_browser_vs_google_chrome.md) describes some differences for Linux users. @@ -188,8 +281,8 @@ Puppeteer creates its own browser user profile which it **cleans up on every run ## Resources -- [API Documentation](https://github.com/puppeteer/puppeteer/blob/v15.2.0/docs/api.md) -- [Examples](https://github.com/puppeteer/puppeteer/tree/main/examples/) +- [API Documentation](https://pptr.dev/api) +- [Examples](https://github.com/puppeteer/puppeteer/tree/main/examples) - [Community list of Puppeteer resources](https://github.com/transitive-bullshit/awesome-puppeteer) @@ -200,14 +293,14 @@ Puppeteer creates its own browser user profile which it **cleans up on every run displaying. Instead of launching in headless mode, launch a full version of the browser using `headless: false`: - ```js + ```ts const browser = await puppeteer.launch({headless: false}); ``` 2. Slow it down - the `slowMo` option slows down Puppeteer operations by the specified amount of milliseconds. It's another way to help see what's going on. - ```js + ```ts const browser = await puppeteer.launch({ headless: false, slowMo: 250, // slow down by 250ms @@ -217,7 +310,7 @@ Puppeteer creates its own browser user profile which it **cleans up on every run 3. Capture console output - You can listen for the `console` event. This is also handy when debugging code in `page.evaluate()`: - ```js + ```ts page.on('console', msg => console.log('PAGE LOG:', msg.text())); await page.evaluate(() => console.log(`url is ${location.href}`)); @@ -231,7 +324,7 @@ Puppeteer creates its own browser user profile which it **cleans up on every run - Use `{devtools: true}` when launching Puppeteer: - ```js + ```ts const browser = await puppeteer.launch({devtools: true}); ``` @@ -245,7 +338,7 @@ Puppeteer creates its own browser user profile which it **cleans up on every run - Add an evaluate statement with `debugger` inside / add `debugger` to an existing evaluate statement: - ```js + ```ts await page.evaluate(() => { debugger; }); @@ -263,7 +356,7 @@ Puppeteer creates its own browser user profile which it **cleans up on every run - Add `debugger;` to your test, eg: - ```js + ```ts debugger; await page.click('a[target=_blank]'); ``` @@ -297,177 +390,10 @@ Puppeteer creates its own browser user profile which it **cleans up on every run - - -## Usage with TypeScript - -We have recently completed a migration to move the Puppeteer source code from JavaScript to TypeScript and as of version 7.0.1 we ship our own built-in type definitions. - -If you are on a version older than 7, we recommend installing the Puppeteer type definitions from the [DefinitelyTyped](https://definitelytyped.org/) repository: - -```bash -npm install --save-dev @types/puppeteer -``` - -The types that you'll see appearing in the Puppeteer source code are based off the great work of those who have contributed to the `@types/puppeteer` package. We really appreciate the hard work those people put in to providing high quality TypeScript definitions for Puppeteer's users. - - - -## Contributing to Puppeteer - -Check out [contributing guide](https://github.com/puppeteer/puppeteer/blob/main/CONTRIBUTING.md) to get an overview of Puppeteer development. - - - -# FAQ - -#### Q: Who maintains Puppeteer? - -The Chrome DevTools team maintains the library, but we'd love your help and expertise on the project! -See [Contributing](https://github.com/puppeteer/puppeteer/blob/main/CONTRIBUTING.md). - -#### Q: What is the status of cross-browser support? - -Official Firefox support is currently experimental. The ongoing collaboration with Mozilla aims to support common end-to-end testing use cases, for which developers expect cross-browser coverage. The Puppeteer team needs input from users to stabilize Firefox support and to bring missing APIs to our attention. - -From Puppeteer v2.1.0 onwards you can specify [`puppeteer.launch({product: 'firefox'})`](https://github.com/puppeteer/puppeteer/blob/v15.2.0/docs/api.md#puppeteerlaunchoptions) to run your Puppeteer scripts in Firefox Nightly, without any additional custom patches. While [an older experiment](https://www.npmjs.com/package/puppeteer-firefox) required a patched version of Firefox, [the current approach](https://wiki.mozilla.org/Remote) works with “stock” Firefox. - -We will continue to collaborate with other browser vendors to bring Puppeteer support to browsers such as Safari. -This effort includes exploration of a standard for executing cross-browser commands (instead of relying on the non-standard DevTools Protocol used by Chrome). - -#### Q: What are Puppeteer’s goals and principles? - -The goals of the project are: - -- Provide a slim, canonical library that highlights the capabilities of the [DevTools Protocol](https://chromedevtools.github.io/devtools-protocol/). -- Provide a reference implementation for similar testing libraries. Eventually, these other frameworks could adopt Puppeteer as their foundational layer. -- Grow the adoption of headless/automated browser testing. -- Help dogfood new DevTools Protocol features...and catch bugs! -- Learn more about the pain points of automated browser testing and help fill those gaps. - -We adapt [Chromium principles](https://www.chromium.org/developers/core-principles) to help us drive product decisions: - -- **Speed**: Puppeteer has almost zero performance overhead over an automated page. -- **Security**: Puppeteer operates off-process with respect to Chromium, making it safe to automate potentially malicious pages. -- **Stability**: Puppeteer should not be flaky and should not leak memory. -- **Simplicity**: Puppeteer provides a high-level API that’s easy to use, understand, and debug. - -#### Q: Is Puppeteer replacing Selenium/WebDriver? - -**No**. Both projects are valuable for very different reasons: - -- Selenium/WebDriver focuses on cross-browser automation; its value proposition is a single standard API that works across all major browsers. -- Puppeteer focuses on Chromium; its value proposition is richer functionality and higher reliability. - -That said, you **can** use Puppeteer to run tests against Chromium, e.g. using the community-driven [jest-puppeteer](https://github.com/smooth-code/jest-puppeteer). While this probably shouldn’t be your only testing solution, it does have a few good points compared to WebDriver: - -- Puppeteer requires zero setup and comes bundled with the Chromium version it works best with, making it [very easy to start with](https://github.com/puppeteer/puppeteer/#getting-started). At the end of the day, it’s better to have a few tests running chromium-only, than no tests at all. -- Puppeteer has event-driven architecture, which removes a lot of potential flakiness. There’s no need for evil “sleep(1000)” calls in puppeteer scripts. -- Puppeteer runs headless by default, which makes it fast to run. Puppeteer v1.5.0 also exposes browser contexts, making it possible to efficiently parallelize test execution. -- Puppeteer shines when it comes to debugging: flip the “headless” bit to false, add “slowMo”, and you’ll see what the browser is doing. You can even open Chrome DevTools to inspect the test environment. - -#### Q: Why doesn’t Puppeteer v.XXX work with Chromium v.YYY? - -We see Puppeteer as an **indivisible entity** with Chromium. Each version of Puppeteer bundles a specific version of Chromium – **the only** version it is guaranteed to work with. - -This is not an artificial constraint: A lot of work on Puppeteer is actually taking place in the Chromium repository. Here’s a typical story: - -- A Puppeteer bug is reported: https://github.com/puppeteer/puppeteer/issues/2709 -- It turned out this is an issue with the DevTools protocol, so we’re fixing it in Chromium: https://chromium-review.googlesource.com/c/chromium/src/+/1102154 -- Once the upstream fix is landed, we roll updated Chromium into Puppeteer: https://github.com/puppeteer/puppeteer/pull/2769 - -However, oftentimes it is desirable to use Puppeteer with the official Google Chrome rather than Chromium. For this to work, you should install a `puppeteer-core` version that corresponds to the Chrome version. - -For example, in order to drive Chrome 71 with puppeteer-core, use `chrome-71` npm tag: - -```bash -npm install puppeteer-core@chrome-71 -``` - -#### Q: Which Chromium version does Puppeteer use? - -Find the version using one of the following ways: - -- Look for the `chromium` entry in [revisions.ts](https://github.com/puppeteer/puppeteer/blob/main/src/revisions.ts). To find the corresponding Chromium commit and version number, search for the revision prefixed by an `r` in [OmahaProxy](https://omahaproxy.appspot.com/)'s "Find Releases" section. -- Look for the `versionsPerRelease` map in [versions.js](https://github.com/puppeteer/puppeteer/blob/main/versions.js) which contains mapping between Chromium and Puppeteer versions. Note: The file contains only Puppeteer versions where Chromium is updated. Not all Puppeteer versions are listed. - -#### Q: Which Firefox version does Puppeteer use? - -Since Firefox support is experimental, Puppeteer downloads the latest [Firefox Nightly](https://wiki.mozilla.org/Nightly) when the `PUPPETEER_PRODUCT` environment variable is set to `firefox`. That's also why the value of `firefox` in [revisions.ts](https://github.com/puppeteer/puppeteer/blob/main/src/revisions.ts) is `latest` -- Puppeteer isn't tied to a particular Firefox version. - -To fetch Firefox Nightly as part of Puppeteer installation: - -```bash -PUPPETEER_PRODUCT=firefox npm i puppeteer -# or "yarn add puppeteer" -``` - -#### Q: What’s considered a “Navigation”? - -From Puppeteer’s standpoint, **“navigation” is anything that changes a page’s URL**. -Aside from regular navigation where the browser hits the network to fetch a new document from the web server, this includes [anchor navigations](https://www.w3.org/TR/html5/single-page.html#scroll-to-fragid) and [History API](https://developer.mozilla.org/en-US/docs/Web/API/History_API) usage. - -With this definition of “navigation,” **Puppeteer works seamlessly with single-page applications.** - -#### Q: What’s the difference between a “trusted" and "untrusted" input event? - -In browsers, input events could be divided into two big groups: trusted vs. untrusted. - -- **Trusted events**: events generated by users interacting with the page, e.g. using a mouse or keyboard. -- **Untrusted event**: events generated by Web APIs, e.g. `document.createEvent` or `element.click()` methods. - -Websites can distinguish between these two groups: - -- using an [`Event.isTrusted`](https://developer.mozilla.org/en-US/docs/Web/API/Event/isTrusted) event flag -- sniffing for accompanying events. For example, every trusted `'click'` event is preceded by `'mousedown'` and `'mouseup'` events. - -For automation purposes it’s important to generate trusted events. **All input events generated with Puppeteer are trusted and fire proper accompanying events.** If, for some reason, one needs an untrusted event, it’s always possible to hop into a page context with `page.evaluate` and generate a fake event: - -```js -await page.evaluate(() => { - document.querySelector('button[type=submit]').click(); -}); -``` - -#### Q: What features does Puppeteer not support? - -You may find that Puppeteer does not behave as expected when controlling pages that incorporate audio and video. (For example, [video playback/screenshots is likely to fail](https://github.com/puppeteer/puppeteer/issues/291).) There are two reasons for this: - -- Puppeteer is bundled with Chromium — not Chrome — and so by default, it inherits all of [Chromium's media-related limitations](https://www.chromium.org/audio-video). This means that Puppeteer does not support licensed formats such as AAC or H.264. (However, it is possible to force Puppeteer to use a separately-installed version Chrome instead of Chromium via the [`executablePath` option to `puppeteer.launch`](https://github.com/puppeteer/puppeteer/blob/v15.2.0/docs/api.md#puppeteerlaunchoptions). You should only use this configuration if you need an official release of Chrome that supports these media formats.) -- Since Puppeteer (in all configurations) controls a desktop version of Chromium/Chrome, features that are only supported by the mobile version of Chrome are not supported. This means that Puppeteer [does not support HTTP Live Streaming (HLS)](https://caniuse.com/#feat=http-live-streaming). - -#### Q: I am having trouble installing / running Puppeteer in my test environment. Where should I look for help? - -We have a [troubleshooting](https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md) guide for various operating systems that lists the required dependencies. - -#### Q: Chromium gets downloaded on every `npm ci` run. How can I cache the download? - -The default download path is `node_modules/puppeteer/.local-chromium`. However, you can change that path with the `PUPPETEER_DOWNLOAD_PATH` environment variable. - -Puppeteer uses that variable to resolve the Chromium executable location during launch, so you don’t need to specify `PUPPETEER_EXECUTABLE_PATH` as well. - -For example, if you wish to keep the Chromium download in `~/.npm/chromium`: - -```sh -export PUPPETEER_DOWNLOAD_PATH=~/.npm/chromium -npm ci - -# by default the Chromium executable path is inferred -# from the download path -npm test - -# a new run of npm ci will check for the existence of -# Chromium in ~/.npm/chromium -npm ci -``` - -#### Q: I have more questions! Where do I ask? - -There are many ways to get help on Puppeteer: +## Contributing -- [bugtracker](https://github.com/puppeteer/puppeteer/issues) -- [Stack Overflow](https://stackoverflow.com/questions/tagged/puppeteer) +Check out our [contributing guide](https://pptr.dev/contributing) to get an overview of Puppeteer development. -Make sure to search these channels before posting your question. +## FAQ - +Our [FAQ](https://pptr.dev/faq) has migrated to [our site](https://pptr.dev/faq). diff --git a/docs/api.md b/docs/api.md deleted file mode 100644 index 6f7185e4be194..0000000000000 --- a/docs/api.md +++ /dev/null @@ -1,5645 +0,0 @@ -# Puppeteer API v15.2.0 - - - -- Interactive Documentation: https://pptr.dev -- API Translations: [中文|Chinese](https://zhaoqize.github.io/puppeteer-api-zh_CN/#/) -- Troubleshooting: [troubleshooting.md](https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md) - - - - -- Releases per Chromium version: - * Chromium 104.0.5109.0 - [Puppeteer v15.1.0](https://github.com/puppeteer/puppeteer/blob/v15.1.0/docs/api.md) - * Chromium 103.0.5059.0 - [Puppeteer v14.2.0](https://github.com/puppeteer/puppeteer/blob/v14.2.0/docs/api.md) - * Chromium 102.0.5002.0 - [Puppeteer v14.0.0](https://github.com/puppeteer/puppeteer/blob/v14.0.0/docs/api.md) - * Chromium 101.0.4950.0 - [Puppeteer v13.6.0](https://github.com/puppeteer/puppeteer/blob/v13.6.0/docs/api.md) - * Chromium 100.0.4889.0 - [Puppeteer v13.5.0](https://github.com/puppeteer/puppeteer/blob/v13.5.0/docs/api.md) - * Chromium 99.0.4844.16 - [Puppeteer v13.2.0](https://github.com/puppeteer/puppeteer/blob/v13.2.0/docs/api.md) - * Chromium 98.0.4758.0 - [Puppeteer v13.1.0](https://github.com/puppeteer/puppeteer/blob/v13.1.0/docs/api.md) - * Chromium 97.0.4692.0 - [Puppeteer v12.0.0](https://github.com/puppeteer/puppeteer/blob/v12.0.0/docs/api.md) - * Chromium 93.0.4577.0 - [Puppeteer v10.2.0](https://github.com/puppeteer/puppeteer/blob/v10.2.0/docs/api.md) - * Chromium 92.0.4512.0 - [Puppeteer v10.0.0](https://github.com/puppeteer/puppeteer/blob/v10.0.0/docs/api.md) - * Chromium 91.0.4469.0 - [Puppeteer v9.0.0](https://github.com/puppeteer/puppeteer/blob/v9.0.0/docs/api.md) - * Chromium 90.0.4427.0 - [Puppeteer v8.0.0](https://github.com/puppeteer/puppeteer/blob/v8.0.0/docs/api.md) - * Chromium 90.0.4403.0 - [Puppeteer v7.0.0](https://github.com/puppeteer/puppeteer/blob/v7.0.0/docs/api.md) - * Chromium 89.0.4389.0 - [Puppeteer v6.0.0](https://github.com/puppeteer/puppeteer/blob/v6.0.0/docs/api.md) - * Chromium 88.0.4298.0 - [Puppeteer v5.5.0](https://github.com/puppeteer/puppeteer/blob/v5.5.0/docs/api.md) - * Chromium 87.0.4272.0 - [Puppeteer v5.4.0](https://github.com/puppeteer/puppeteer/blob/v5.4.0/docs/api.md) - * Chromium 86.0.4240.0 - [Puppeteer v5.3.0](https://github.com/puppeteer/puppeteer/blob/v5.3.0/docs/api.md) - * Chromium 85.0.4182.0 - [Puppeteer v5.2.1](https://github.com/puppeteer/puppeteer/blob/v5.2.1/docs/api.md) - * Chromium 84.0.4147.0 - [Puppeteer v5.1.0](https://github.com/puppeteer/puppeteer/blob/v5.1.0/docs/api.md) - * Chromium 83.0.4103.0 - [Puppeteer v3.1.0](https://github.com/puppeteer/puppeteer/blob/v3.1.0/docs/api.md) - * Chromium 81.0.4044.0 - [Puppeteer v3.0.0](https://github.com/puppeteer/puppeteer/blob/v3.0.0/docs/api.md) - * Chromium 80.0.3987.0 - [Puppeteer v2.1.0](https://github.com/puppeteer/puppeteer/blob/v2.1.0/docs/api.md) - * Chromium 79.0.3942.0 - [Puppeteer v2.0.0](https://github.com/puppeteer/puppeteer/blob/v2.0.0/docs/api.md) - * Chromium 78.0.3882.0 - [Puppeteer v1.20.0](https://github.com/puppeteer/puppeteer/blob/v1.20.0/docs/api.md) - * Chromium 77.0.3803.0 - [Puppeteer v1.19.0](https://github.com/puppeteer/puppeteer/blob/v1.19.0/docs/api.md) - * Chromium 76.0.3803.0 - [Puppeteer v1.17.0](https://github.com/puppeteer/puppeteer/blob/v1.17.0/docs/api.md) - * Chromium 75.0.3765.0 - [Puppeteer v1.15.0](https://github.com/puppeteer/puppeteer/blob/v1.15.0/docs/api.md) - * Chromium 74.0.3723.0 - [Puppeteer v1.13.0](https://github.com/puppeteer/puppeteer/blob/v1.13.0/docs/api.md) - * Chromium 73.0.3679.0 - [Puppeteer v1.12.2](https://github.com/puppeteer/puppeteer/blob/v1.12.2/docs/api.md) - * [All releases](https://github.com/puppeteer/puppeteer/releases) - - - - -##### Table of Contents - - - - -- [Overview](#overview) -- [puppeteer vs puppeteer-core](#puppeteer-vs-puppeteer-core) -- [Environment Variables](#environment-variables) -- [Working with Chrome Extensions](#working-with-chrome-extensions) -- [class: Puppeteer](#class-puppeteer) - * [puppeteer.clearCustomQueryHandlers()](#puppeteerclearcustomqueryhandlers) - * [puppeteer.connect(options)](#puppeteerconnectoptions) - * [puppeteer.createBrowserFetcher([options])](#puppeteercreatebrowserfetcheroptions) - * [puppeteer.customQueryHandlerNames()](#puppeteercustomqueryhandlernames) - * [puppeteer.defaultArgs([options])](#puppeteerdefaultargsoptions) - * [puppeteer.devices](#puppeteerdevices) - * [puppeteer.errors](#puppeteererrors) - * [puppeteer.executablePath()](#puppeteerexecutablepath) - * [puppeteer.launch([options])](#puppeteerlaunchoptions) - * [puppeteer.networkConditions](#puppeteernetworkconditions) - * [puppeteer.product](#puppeteerproduct) - * [puppeteer.registerCustomQueryHandler(name, queryHandler)](#puppeteerregistercustomqueryhandlername-queryhandler) - * [puppeteer.unregisterCustomQueryHandler(name)](#puppeteerunregistercustomqueryhandlername) -- [class: BrowserFetcher](#class-browserfetcher) - * [browserFetcher.canDownload(revision)](#browserfetchercandownloadrevision) - * [browserFetcher.download(revision[, progressCallback])](#browserfetcherdownloadrevision-progresscallback) - * [browserFetcher.host()](#browserfetcherhost) - * [browserFetcher.localRevisions()](#browserfetcherlocalrevisions) - * [browserFetcher.platform()](#browserfetcherplatform) - * [browserFetcher.product()](#browserfetcherproduct) - * [browserFetcher.remove(revision)](#browserfetcherremoverevision) - * [browserFetcher.revisionInfo(revision)](#browserfetcherrevisioninforevision) -- [class: Browser](#class-browser) - * [event: 'disconnected'](#event-disconnected) - * [event: 'targetchanged'](#event-targetchanged) - * [event: 'targetcreated'](#event-targetcreated) - * [event: 'targetdestroyed'](#event-targetdestroyed) - * [browser.browserContexts()](#browserbrowsercontexts) - * [browser.close()](#browserclose) - * [browser.createIncognitoBrowserContext([options])](#browsercreateincognitobrowsercontextoptions) - * [browser.defaultBrowserContext()](#browserdefaultbrowsercontext) - * [browser.disconnect()](#browserdisconnect) - * [browser.isConnected()](#browserisconnected) - * [browser.newPage()](#browsernewpage) - * [browser.pages()](#browserpages) - * [browser.process()](#browserprocess) - * [browser.target()](#browsertarget) - * [browser.targets()](#browsertargets) - * [browser.userAgent()](#browseruseragent) - * [browser.version()](#browserversion) - * [browser.waitForTarget(predicate[, options])](#browserwaitfortargetpredicate-options) - * [browser.wsEndpoint()](#browserwsendpoint) -- [class: BrowserContext](#class-browsercontext) - * [event: 'targetchanged'](#event-targetchanged-1) - * [event: 'targetcreated'](#event-targetcreated-1) - * [event: 'targetdestroyed'](#event-targetdestroyed-1) - * [browserContext.browser()](#browsercontextbrowser) - * [browserContext.clearPermissionOverrides()](#browsercontextclearpermissionoverrides) - * [browserContext.close()](#browsercontextclose) - * [browserContext.isIncognito()](#browsercontextisincognito) - * [browserContext.newPage()](#browsercontextnewpage) - * [browserContext.overridePermissions(origin, permissions)](#browsercontextoverridepermissionsorigin-permissions) - * [browserContext.pages()](#browsercontextpages) - * [browserContext.targets()](#browsercontexttargets) - * [browserContext.waitForTarget(predicate[, options])](#browsercontextwaitfortargetpredicate-options) -- [class: Page](#class-page) - * [event: 'close'](#event-close) - * [event: 'console'](#event-console) - * [event: 'dialog'](#event-dialog) - * [event: 'domcontentloaded'](#event-domcontentloaded) - * [event: 'error'](#event-error) - * [event: 'frameattached'](#event-frameattached) - * [event: 'framedetached'](#event-framedetached) - * [event: 'framenavigated'](#event-framenavigated) - * [event: 'load'](#event-load) - * [event: 'metrics'](#event-metrics) - * [event: 'pageerror'](#event-pageerror) - * [event: 'popup'](#event-popup) - * [event: 'request'](#event-request) - * [event: 'requestfailed'](#event-requestfailed) - * [event: 'requestfinished'](#event-requestfinished) - * [event: 'response'](#event-response) - * [event: 'workercreated'](#event-workercreated) - * [event: 'workerdestroyed'](#event-workerdestroyed) - * [page.$(selector)](#pageselector) - * [page.$$(selector)](#pageselector-1) - * [page.$$eval(selector, pageFunction[, ...args])](#pageevalselector-pagefunction-args) - * [page.$eval(selector, pageFunction[, ...args])](#pageevalselector-pagefunction-args-1) - * [page.$x(expression)](#pagexexpression) - * [page.accessibility](#pageaccessibility) - * [page.addScriptTag(options)](#pageaddscripttagoptions) - * [page.addStyleTag(options)](#pageaddstyletagoptions) - * [page.authenticate(credentials)](#pageauthenticatecredentials) - * [page.bringToFront()](#pagebringtofront) - * [page.browser()](#pagebrowser) - * [page.browserContext()](#pagebrowsercontext) - * [page.click(selector[, options])](#pageclickselector-options) - * [page.close([options])](#pagecloseoptions) - * [page.content()](#pagecontent) - * [page.cookies([...urls])](#pagecookiesurls) - * [page.coverage](#pagecoverage) - * [page.createPDFStream([options])](#pagecreatepdfstreamoptions) - * [page.deleteCookie(...cookies)](#pagedeletecookiecookies) - * [page.emulate(options)](#pageemulateoptions) - * [page.emulateCPUThrottling(factor)](#pageemulatecputhrottlingfactor) - * [page.emulateIdleState(overrides)](#pageemulateidlestateoverrides) - * [page.emulateMediaFeatures(features)](#pageemulatemediafeaturesfeatures) - * [page.emulateMediaType(type)](#pageemulatemediatypetype) - * [page.emulateNetworkConditions(networkConditions)](#pageemulatenetworkconditionsnetworkconditions) - * [page.emulateTimezone(timezoneId)](#pageemulatetimezonetimezoneid) - * [page.emulateVisionDeficiency(type)](#pageemulatevisiondeficiencytype) - * [page.evaluate(pageFunction[, ...args])](#pageevaluatepagefunction-args) - * [page.evaluateHandle(pageFunction[, ...args])](#pageevaluatehandlepagefunction-args) - * [page.evaluateOnNewDocument(pageFunction[, ...args])](#pageevaluateonnewdocumentpagefunction-args) - * [page.exposeFunction(name, puppeteerFunction)](#pageexposefunctionname-puppeteerfunction) - * [page.focus(selector)](#pagefocusselector) - * [page.frames()](#pageframes) - * [page.goBack([options])](#pagegobackoptions) - * [page.goForward([options])](#pagegoforwardoptions) - * [page.goto(url[, options])](#pagegotourl-options) - * [page.hover(selector)](#pagehoverselector) - * [page.isClosed()](#pageisclosed) - * [page.isDragInterceptionEnabled()](#pageisdraginterceptionenabled) - * [page.isJavaScriptEnabled()](#pageisjavascriptenabled) - * [page.keyboard](#pagekeyboard) - * [page.mainFrame()](#pagemainframe) - * [page.metrics()](#pagemetrics) - * [page.mouse](#pagemouse) - * [page.pdf([options])](#pagepdfoptions) - * [page.queryObjects(prototypeHandle)](#pagequeryobjectsprototypehandle) - * [page.reload([options])](#pagereloadoptions) - * [page.screenshot([options])](#pagescreenshotoptions) - * [page.select(selector, ...values)](#pageselectselector-values) - * [page.setBypassCSP(enabled)](#pagesetbypasscspenabled) - * [page.setCacheEnabled([enabled])](#pagesetcacheenabledenabled) - * [page.setContent(html[, options])](#pagesetcontenthtml-options) - * [page.setCookie(...cookies)](#pagesetcookiecookies) - * [page.setDefaultNavigationTimeout(timeout)](#pagesetdefaultnavigationtimeouttimeout) - * [page.setDefaultTimeout(timeout)](#pagesetdefaulttimeouttimeout) - * [page.setDragInterception(enabled)](#pagesetdraginterceptionenabled) - * [page.setExtraHTTPHeaders(headers)](#pagesetextrahttpheadersheaders) - * [page.setGeolocation(options)](#pagesetgeolocationoptions) - * [page.setJavaScriptEnabled(enabled)](#pagesetjavascriptenabledenabled) - * [page.setOfflineMode(enabled)](#pagesetofflinemodeenabled) - * [page.setRequestInterception(value)](#pagesetrequestinterceptionvalue) - - [Multiple Intercept Handlers and Asynchronous Resolutions](#multiple-intercept-handlers-and-asynchronous-resolutions) - - [Cooperative Intercept Mode](#cooperative-intercept-mode) - - [Cooperative Request Continuation](#cooperative-request-continuation) - - [Upgrading to Cooperative Intercept Mode for package maintainers](#upgrading-to-cooperative-intercept-mode-for-package-maintainers) - * [page.setUserAgent(userAgent[, userAgentMetadata])](#pagesetuseragentuseragent-useragentmetadata) - * [page.setViewport(viewport)](#pagesetviewportviewport) - * [page.tap(selector)](#pagetapselector) - * [page.target()](#pagetarget) - * [page.title()](#pagetitle) - * [page.touchscreen](#pagetouchscreen) - * [page.tracing](#pagetracing) - * [page.type(selector, text[, options])](#pagetypeselector-text-options) - * [page.url()](#pageurl) - * [page.viewport()](#pageviewport) - * [page.waitFor(selectorOrFunctionOrTimeout[, options[, ...args]])](#pagewaitforselectororfunctionortimeout-options-args) - * [page.waitForFileChooser([options])](#pagewaitforfilechooseroptions) - * [page.waitForFrame(urlOrPredicate[, options])](#pagewaitforframeurlorpredicate-options) - * [page.waitForFunction(pageFunction[, options[, ...args]])](#pagewaitforfunctionpagefunction-options-args) - * [page.waitForNavigation([options])](#pagewaitfornavigationoptions) - * [page.waitForNetworkIdle([options])](#pagewaitfornetworkidleoptions) - * [page.waitForRequest(urlOrPredicate[, options])](#pagewaitforrequesturlorpredicate-options) - * [page.waitForResponse(urlOrPredicate[, options])](#pagewaitforresponseurlorpredicate-options) - * [page.waitForSelector(selector[, options])](#pagewaitforselectorselector-options) - * [page.waitForTimeout(milliseconds)](#pagewaitfortimeoutmilliseconds) - * [page.waitForXPath(xpath[, options])](#pagewaitforxpathxpath-options) - * [page.workers()](#pageworkers) - * [GeolocationOptions](#geolocationoptions) - * [WaitTimeoutOptions](#waittimeoutoptions) -- [class: WebWorker](#class-webworker) - * [webWorker.evaluate(pageFunction[, ...args])](#webworkerevaluatepagefunction-args) - * [webWorker.evaluateHandle(pageFunction[, ...args])](#webworkerevaluatehandlepagefunction-args) - * [webWorker.executionContext()](#webworkerexecutioncontext) - * [webWorker.url()](#webworkerurl) -- [class: Accessibility](#class-accessibility) - * [accessibility.snapshot([options])](#accessibilitysnapshotoptions) -- [class: Keyboard](#class-keyboard) - * [keyboard.down(key[, options])](#keyboarddownkey-options) - * [keyboard.press(key[, options])](#keyboardpresskey-options) - * [keyboard.sendCharacter(char)](#keyboardsendcharacterchar) - * [keyboard.type(text[, options])](#keyboardtypetext-options) - * [keyboard.up(key)](#keyboardupkey) -- [class: Mouse](#class-mouse) - * [mouse.click(x, y[, options])](#mouseclickx-y-options) - * [mouse.down([options])](#mousedownoptions) - * [mouse.drag(start, target)](#mousedragstart-target) - * [mouse.dragAndDrop(start, target[, options])](#mousedraganddropstart-target-options) - * [mouse.dragEnter(target, data)](#mousedragentertarget-data) - * [mouse.dragOver(target, data)](#mousedragovertarget-data) - * [mouse.drop(target, data)](#mousedroptarget-data) - * [mouse.move(x, y[, options])](#mousemovex-y-options) - * [mouse.up([options])](#mouseupoptions) - * [mouse.wheel([options])](#mousewheeloptions) -- [class: Touchscreen](#class-touchscreen) - * [touchscreen.tap(x, y)](#touchscreentapx-y) -- [class: Tracing](#class-tracing) - * [tracing.start([options])](#tracingstartoptions) - * [tracing.stop()](#tracingstop) -- [class: FileChooser](#class-filechooser) - * [fileChooser.accept(filePaths)](#filechooseracceptfilepaths) - * [fileChooser.cancel()](#filechoosercancel) - * [fileChooser.isMultiple()](#filechooserismultiple) -- [class: Dialog](#class-dialog) - * [dialog.accept([promptText])](#dialogacceptprompttext) - * [dialog.defaultValue()](#dialogdefaultvalue) - * [dialog.dismiss()](#dialogdismiss) - * [dialog.message()](#dialogmessage) - * [dialog.type()](#dialogtype) -- [class: ConsoleMessage](#class-consolemessage) - * [consoleMessage.args()](#consolemessageargs) - * [consoleMessage.location()](#consolemessagelocation) - * [consoleMessage.stackTrace()](#consolemessagestacktrace) - * [consoleMessage.text()](#consolemessagetext) - * [consoleMessage.type()](#consolemessagetype) -- [class: Frame](#class-frame) - * [frame.$(selector)](#frameselector) - * [frame.$$(selector)](#frameselector-1) - * [frame.$$eval(selector, pageFunction[, ...args])](#frameevalselector-pagefunction-args) - * [frame.$eval(selector, pageFunction[, ...args])](#frameevalselector-pagefunction-args-1) - * [frame.$x(expression)](#framexexpression) - * [frame.addScriptTag(options)](#frameaddscripttagoptions) - * [frame.addStyleTag(options)](#frameaddstyletagoptions) - * [frame.childFrames()](#framechildframes) - * [frame.click(selector[, options])](#frameclickselector-options) - * [frame.content()](#framecontent) - * [frame.evaluate(pageFunction[, ...args])](#frameevaluatepagefunction-args) - * [frame.evaluateHandle(pageFunction[, ...args])](#frameevaluatehandlepagefunction-args) - * [frame.executionContext()](#frameexecutioncontext) - * [frame.focus(selector)](#framefocusselector) - * [frame.goto(url[, options])](#framegotourl-options) - * [frame.hover(selector)](#framehoverselector) - * [frame.isDetached()](#frameisdetached) - * [frame.isOOPFrame()](#frameisoopframe) - * [frame.name()](#framename) - * [frame.parentFrame()](#frameparentframe) - * [frame.select(selector, ...values)](#frameselectselector-values) - * [frame.setContent(html[, options])](#framesetcontenthtml-options) - * [frame.tap(selector)](#frametapselector) - * [frame.title()](#frametitle) - * [frame.type(selector, text[, options])](#frametypeselector-text-options) - * [frame.url()](#frameurl) - * [frame.waitFor(selectorOrFunctionOrTimeout[, options[, ...args]])](#framewaitforselectororfunctionortimeout-options-args) - * [frame.waitForFunction(pageFunction[, options[, ...args]])](#framewaitforfunctionpagefunction-options-args) - * [frame.waitForNavigation([options])](#framewaitfornavigationoptions) - * [frame.waitForSelector(selector[, options])](#framewaitforselectorselector-options) - * [frame.waitForTimeout(milliseconds)](#framewaitfortimeoutmilliseconds) - * [frame.waitForXPath(xpath[, options])](#framewaitforxpathxpath-options) -- [class: ExecutionContext](#class-executioncontext) - * [executionContext.evaluate(pageFunction[, ...args])](#executioncontextevaluatepagefunction-args) - * [executionContext.evaluateHandle(pageFunction[, ...args])](#executioncontextevaluatehandlepagefunction-args) - * [executionContext.frame()](#executioncontextframe) - * [executionContext.queryObjects(prototypeHandle)](#executioncontextqueryobjectsprototypehandle) -- [class: JSHandle](#class-jshandle) - * [jsHandle.asElement()](#jshandleaselement) - * [jsHandle.dispose()](#jshandledispose) - * [jsHandle.evaluate(pageFunction[, ...args])](#jshandleevaluatepagefunction-args) - * [jsHandle.evaluateHandle(pageFunction[, ...args])](#jshandleevaluatehandlepagefunction-args) - * [jsHandle.executionContext()](#jshandleexecutioncontext) - * [jsHandle.getProperties()](#jshandlegetproperties) - * [jsHandle.getProperty(propertyName)](#jshandlegetpropertypropertyname) - * [jsHandle.jsonValue()](#jshandlejsonvalue) -- [class: ElementHandle](#class-elementhandle) - * [elementHandle.$(selector)](#elementhandleselector) - * [elementHandle.$$(selector)](#elementhandleselector-1) - * [elementHandle.$$eval(selector, pageFunction[, ...args])](#elementhandleevalselector-pagefunction-args) - * [elementHandle.$eval(selector, pageFunction[, ...args])](#elementhandleevalselector-pagefunction-args-1) - * [elementHandle.$x(expression)](#elementhandlexexpression) - * [elementHandle.asElement()](#elementhandleaselement) - * [elementHandle.boundingBox()](#elementhandleboundingbox) - * [elementHandle.boxModel()](#elementhandleboxmodel) - * [elementHandle.click([options])](#elementhandleclickoptions) - * [elementHandle.clickablePoint([offset])](#elementhandleclickablepointoffset) - * [elementHandle.contentFrame()](#elementhandlecontentframe) - * [elementHandle.dispose()](#elementhandledispose) - * [elementHandle.drag(target)](#elementhandledragtarget) - * [elementHandle.dragAndDrop(target[, options])](#elementhandledraganddroptarget-options) - * [elementHandle.dragEnter([data])](#elementhandledragenterdata) - * [elementHandle.dragOver([data])](#elementhandledragoverdata) - * [elementHandle.drop([data])](#elementhandledropdata) - * [elementHandle.evaluate(pageFunction[, ...args])](#elementhandleevaluatepagefunction-args) - * [elementHandle.evaluateHandle(pageFunction[, ...args])](#elementhandleevaluatehandlepagefunction-args) - * [elementHandle.executionContext()](#elementhandleexecutioncontext) - * [elementHandle.focus()](#elementhandlefocus) - * [elementHandle.getProperties()](#elementhandlegetproperties) - * [elementHandle.getProperty(propertyName)](#elementhandlegetpropertypropertyname) - * [elementHandle.hover()](#elementhandlehover) - * [elementHandle.isIntersectingViewport([options])](#elementhandleisintersectingviewportoptions) - * [elementHandle.jsonValue()](#elementhandlejsonvalue) - * [elementHandle.press(key[, options])](#elementhandlepresskey-options) - * [elementHandle.screenshot([options])](#elementhandlescreenshotoptions) - * [elementHandle.select(...values)](#elementhandleselectvalues) - * [elementHandle.tap()](#elementhandletap) - * [elementHandle.toString()](#elementhandletostring) - * [elementHandle.type(text[, options])](#elementhandletypetext-options) - * [elementHandle.uploadFile(...filePaths)](#elementhandleuploadfilefilepaths) - * [elementHandle.waitForSelector(selector[, options])](#elementhandlewaitforselectorselector-options) - * [elementHandle.waitForXPath(xpath[, options])](#elementhandlewaitforxpathxpath-options) -- [class: HTTPRequest](#class-httprequest) - * [httpRequest.abort([errorCode], [priority])](#httprequestaborterrorcode-priority) - * [httpRequest.abortErrorReason()](#httprequestaborterrorreason) - * [httpRequest.continue([overrides], [priority])](#httprequestcontinueoverrides-priority) - * [httpRequest.continueRequestOverrides()](#httprequestcontinuerequestoverrides) - * [httpRequest.enqueueInterceptAction(pendingHandler)](#httprequestenqueueinterceptactionpendinghandler) - * [httpRequest.failure()](#httprequestfailure) - * [httpRequest.finalizeInterceptions()](#httprequestfinalizeinterceptions) - * [httpRequest.frame()](#httprequestframe) - * [httpRequest.headers()](#httprequestheaders) - * [httpRequest.initiator()](#httprequestinitiator) - * [httpRequest.interceptResolutionState()](#httprequestinterceptresolutionstate) - * [httpRequest.isInterceptResolutionHandled()](#httprequestisinterceptresolutionhandled) - * [httpRequest.isNavigationRequest()](#httprequestisnavigationrequest) - * [httpRequest.method()](#httprequestmethod) - * [httpRequest.postData()](#httprequestpostdata) - * [httpRequest.redirectChain()](#httprequestredirectchain) - * [httpRequest.resourceType()](#httprequestresourcetype) - * [httpRequest.respond(response, [priority])](#httprequestrespondresponse-priority) - * [httpRequest.response()](#httprequestresponse) - * [httpRequest.responseForRequest()](#httprequestresponseforrequest) - * [httpRequest.url()](#httprequesturl) -- [class: HTTPResponse](#class-httpresponse) - * [httpResponse.buffer()](#httpresponsebuffer) - * [httpResponse.frame()](#httpresponseframe) - * [httpResponse.fromCache()](#httpresponsefromcache) - * [httpResponse.fromServiceWorker()](#httpresponsefromserviceworker) - * [httpResponse.headers()](#httpresponseheaders) - * [httpResponse.json()](#httpresponsejson) - * [httpResponse.ok()](#httpresponseok) - * [httpResponse.remoteAddress()](#httpresponseremoteaddress) - * [httpResponse.request()](#httpresponserequest) - * [httpResponse.securityDetails()](#httpresponsesecuritydetails) - * [httpResponse.status()](#httpresponsestatus) - * [httpResponse.statusText()](#httpresponsestatustext) - * [httpResponse.text()](#httpresponsetext) - * [httpResponse.timing()](#httpresponsetiming) - * [httpResponse.url()](#httpresponseurl) -- [class: SecurityDetails](#class-securitydetails) - * [securityDetails.issuer()](#securitydetailsissuer) - * [securityDetails.protocol()](#securitydetailsprotocol) - * [securityDetails.subjectAlternativeNames()](#securitydetailssubjectalternativenames) - * [securityDetails.subjectName()](#securitydetailssubjectname) - * [securityDetails.validFrom()](#securitydetailsvalidfrom) - * [securityDetails.validTo()](#securitydetailsvalidto) -- [class: Target](#class-target) - * [target.browser()](#targetbrowser) - * [target.browserContext()](#targetbrowsercontext) - * [target.createCDPSession()](#targetcreatecdpsession) - * [target.opener()](#targetopener) - * [target.page()](#targetpage) - * [target.type()](#targettype) - * [target.url()](#targeturl) - * [target.worker()](#targetworker) -- [class: CDPSession](#class-cdpsession) - * [cdpSession.connection()](#cdpsessionconnection) - * [cdpSession.detach()](#cdpsessiondetach) - * [cdpSession.id()](#cdpsessionid) - * [cdpSession.send(method[, ...paramArgs])](#cdpsessionsendmethod-paramargs) -- [class: Coverage](#class-coverage) - * [coverage.startCSSCoverage([options])](#coveragestartcsscoverageoptions) - * [coverage.startJSCoverage([options])](#coveragestartjscoverageoptions) - * [coverage.stopCSSCoverage()](#coveragestopcsscoverage) - * [coverage.stopJSCoverage()](#coveragestopjscoverage) -- [class: TimeoutError](#class-timeouterror) -- [class: EventEmitter](#class-eventemitter) - * [eventEmitter.addListener(event, handler)](#eventemitteraddlistenerevent-handler) - * [eventEmitter.emit(event, [eventData])](#eventemitteremitevent-eventdata) - * [eventEmitter.listenerCount(event)](#eventemitterlistenercountevent) - * [eventEmitter.off(event, handler)](#eventemitteroffevent-handler) - * [eventEmitter.on(event, handler)](#eventemitteronevent-handler) - * [eventEmitter.once(event, handler)](#eventemitteronceevent-handler) - * [eventEmitter.removeAllListeners([event])](#eventemitterremovealllistenersevent) - * [eventEmitter.removeListener(event, handler)](#eventemitterremovelistenerevent-handler) -- [interface: CustomQueryHandler](#interface-customqueryhandler) -- [interface: Selector](#interface-selector) - - - - -### Overview - -Puppeteer is a Node library which provides a high-level API to control Chromium or Chrome over the DevTools Protocol. - -The Puppeteer API is hierarchical and mirrors the browser structure. - -> **NOTE** On the following diagram, faded entities are not currently represented in Puppeteer. - -![puppeteer overview](https://user-images.githubusercontent.com/81942/86137523-ab2ba080-baed-11ea-9d4b-30eda784585a.png) - -- [`Puppeteer`](#class-puppeteer) communicates with the browser using [DevTools Protocol](https://chromedevtools.github.io/devtools-protocol/). -- [`Browser`](#class-browser) instance can own multiple browser contexts. -- [`BrowserContext`](#class-browsercontext) instance defines a browsing session and can own multiple pages. -- [`Page`](#class-page) has at least one frame: main frame. There might be other frames created by [iframe](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe) or [frame](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/frame) tags. -- [`Frame`](#class-frame) has at least one execution context - the default execution context - where the frame's JavaScript is executed. A Frame might have additional execution contexts that are associated with [extensions](https://developer.chrome.com/extensions). -- [`WebWorker`](#class-webworker) has a single execution context and facilitates interacting with [WebWorkers](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API). - -(Diagram source: [link](https://docs.google.com/drawings/d/1Q_AM6KYs9kbyLZF-Lpp5mtpAWth73Cq8IKCsWYgi8MM/edit?usp=sharing)) - -### puppeteer vs puppeteer-core - -Every release since v1.7.0 we publish two packages: - -- [puppeteer](https://www.npmjs.com/package/puppeteer) -- [puppeteer-core](https://www.npmjs.com/package/puppeteer-core) - -`puppeteer` is a _product_ for browser automation. When installed, it downloads a version of -Chromium, which it then drives using `puppeteer-core`. Being an end-user product, `puppeteer` supports a bunch of convenient `PUPPETEER_*` env variables to tweak its behavior. - -`puppeteer-core` is a _library_ to help drive anything that supports DevTools protocol. `puppeteer-core` doesn't download Chromium when installed. Being a library, `puppeteer-core` is fully driven -through its programmatic interface and disregards all the `PUPPETEER_*` env variables. - -To sum up, the only differences between `puppeteer-core` and `puppeteer` are: - -- `puppeteer-core` doesn't automatically download Chromium when installed. -- `puppeteer-core` ignores all `PUPPETEER_*` env variables. - -In most cases, you'll be fine using the `puppeteer` package. - -However, you should use `puppeteer-core` if: - -- you're building another end-user product or library atop of DevTools protocol. For example, one might build a PDF generator using `puppeteer-core` and write a custom `install.js` script that downloads [`headless_shell`](https://chromium.googlesource.com/chromium/src/+/lkgr/headless/README.md) instead of Chromium to save disk space. -- you're bundling Puppeteer to use in Chrome Extension / browser with the DevTools protocol where downloading an additional Chromium binary is unnecessary. -- you're building a set of tools where `puppeteer-core` is one of the ingredients and you want to postpone `install.js` script execution until Chromium is about to be used. - -When using `puppeteer-core`, remember to change the _include_ line: - -```js -const puppeteer = require('puppeteer-core'); -``` - -You will then need to call [`puppeteer.connect([options])`](#puppeteerconnectoptions) or [`puppeteer.launch([options])`](#puppeteerlaunchoptions) with an explicit `executablePath` or `channel` option. - -### Environment Variables - -Puppeteer looks for certain [environment variables](https://en.wikipedia.org/wiki/Environment_variable) to aid its operations. -If Puppeteer doesn't find them in the environment during the installation step, a lowercased variant of these variables will be used from the [npm config](https://docs.npmjs.com/cli/config). - -- `HTTP_PROXY`, `HTTPS_PROXY`, `NO_PROXY` - defines HTTP proxy settings that are used to download and run the browser. -- `PUPPETEER_SKIP_CHROMIUM_DOWNLOAD` - do not download bundled Chromium during installation step. -- `PUPPETEER_TMP_DIR` - defines the directory to be used by Puppeteer for creating temporary files. Defaults to [`os.tmpdir()`](https://nodejs.org/api/os.html#os_os_tmpdir). -- `PUPPETEER_DOWNLOAD_HOST` - overwrite URL prefix that is used to download Chromium. Note: this includes protocol and might even include path prefix. Defaults to `https://storage.googleapis.com`. -- `PUPPETEER_DOWNLOAD_PATH` - overwrite the path for the downloads folder. Defaults to `/.local-chromium`, where `` is Puppeteer's package root. -- `PUPPETEER_CHROMIUM_REVISION` - specify a certain version of Chromium you'd like Puppeteer to use. See [puppeteer.launch([options])](#puppeteerlaunchoptions) on how executable path is inferred. **BEWARE**: Puppeteer is only [guaranteed to work](https://github.com/puppeteer/puppeteer/#q-why-doesnt-puppeteer-vxxx-work-with-chromium-vyyy) with the bundled Chromium, use at your own risk. -- `PUPPETEER_EXECUTABLE_PATH` - specify an executable path to be used in `puppeteer.launch`. See [puppeteer.launch([options])](#puppeteerlaunchoptions) on how the executable path is inferred. **BEWARE**: Puppeteer is only [guaranteed to work](https://github.com/puppeteer/puppeteer/#q-why-doesnt-puppeteer-vxxx-work-with-chromium-vyyy) with the bundled Chromium, use at your own risk. -- `PUPPETEER_PRODUCT` - specify which browser you'd like Puppeteer to use. Must be one of `chrome` or `firefox`. This can also be used during installation to fetch the recommended browser binary. Setting `product` programmatically in [puppeteer.launch([options])](#puppeteerlaunchoptions) supersedes this environment variable. The product is exposed in [`puppeteer.product`](#puppeteerproduct) -- `PUPPETEER_EXPERIMENTAL_CHROMIUM_MAC_ARM` — specify Puppeteer download Chromium for Apple M1. On Apple M1 devices Puppeteer by default downloads the version for Intel's processor which runs via Rosetta. It works without any problems, however, with this option, you should get more efficient resource usage (CPU and RAM) that could lead to a faster execution time. **BEWARE**: it's an experimental option that makes sense only if you have an Apple M1 device, use at your own risk. - -> **NOTE** `PUPPETEER_*` env variables are not accounted for in the [`puppeteer-core`](https://www.npmjs.com/package/puppeteer-core) package. - -### Working with Chrome Extensions - -Puppeteer can be used for testing Chrome Extensions. - -> **NOTE** Extensions in Chrome / Chromium currently only work in non-headless mode and experimental Chrome headless mode. - -The following is code for getting a handle to the [background page](https://developer.chrome.com/extensions/background_pages) of an extension whose source is located in `./my-extension`: - -```js -const puppeteer = require('puppeteer'); - -(async () => { - const pathToExtension = require('path').join(__dirname, 'my-extension'); - const browser = await puppeteer.launch({ - headless: 'chrome', - args: [ - `--disable-extensions-except=${pathToExtension}`, - `--load-extension=${pathToExtension}`, - ], - }); - const backgroundPageTarget = await browser.waitForTarget( - target => target.type() === 'background_page' - ); - const backgroundPage = await backgroundPageTarget.page(); - // Test the background page as you would any other page. - await browser.close(); -})(); -``` - -> **NOTE** Chrome Manifest V3 extensions have a background ServiceWorker of type 'service_worker', instead of a page of type 'background_page'. - -> **NOTE** It is not yet possible to test extension popups or content scripts. - -### class: Puppeteer - -Puppeteer module provides a method to launch a Chromium instance. -The following is a typical example of using Puppeteer to drive automation: - -```js -const puppeteer = require('puppeteer'); - -(async () => { - const browser = await puppeteer.launch(); - const page = await browser.newPage(); - await page.goto('https://www.google.com'); - // other actions... - await browser.close(); -})(); -``` - -#### puppeteer.clearCustomQueryHandlers() - -Clears all registered handlers. - -#### puppeteer.connect(options) - -- `options` <[Object]> - - `browserWSEndpoint` a [browser websocket endpoint](#browserwsendpoint) to connect to. - - `browserURL` a browser URL to connect to, in format `http://${host}:${port}`. Use interchangeably with `browserWSEndpoint` to let Puppeteer fetch it from [metadata endpoint](https://chromedevtools.github.io/devtools-protocol/#how-do-i-access-the-browser-target). - - `ignoreHTTPSErrors` <[boolean]> Whether to ignore HTTPS errors during navigation. Defaults to `false`. - - `defaultViewport` Sets a consistent viewport for each page. Defaults to an 800x600 viewport. `null` disables the default viewport. - - `width` <[number]> page width in pixels. - - `height` <[number]> page height in pixels. - - `deviceScaleFactor` <[number]> Specify device scale factor (can be thought of as DPR). Defaults to `1`. - - `isMobile` <[boolean]> Whether the `meta viewport` tag is taken into account. Defaults to `false`. - - `hasTouch`<[boolean]> Specifies if viewport supports touch events. Defaults to `false` - - `isLandscape` <[boolean]> Specifies if viewport is in landscape mode. Defaults to `false`. - - `slowMo` <[number]> Slows down Puppeteer operations by the specified amount of milliseconds. Useful so that you can see what is going on. - - `transport` <[ConnectionTransport]> **Experimental** Specify a custom transport object for Puppeteer to use. - - `product` <[string]> Possible values are: `chrome`, `firefox`. Defaults to `chrome`. - - `targetFilter` Use this function to decide if Puppeteer should connect to the given target. If a `targetFilter` is provided, Puppeteer only connects to targets for which `targetFilter` returns `true`. By default, Puppeteer connects to all available targets. -- returns: <[Promise]<[Browser]>> - -This methods attaches Puppeteer to an existing browser instance. - -#### puppeteer.createBrowserFetcher([options]) - -- `options` <[Object]> - - `host` <[string]> A download host to be used. Defaults to `https://storage.googleapis.com`. If the `product` is `firefox`, this defaults to `https://archive.mozilla.org/pub/firefox/nightly/latest-mozilla-central`. - - `path` <[string]> A path for the downloads folder. Defaults to `/.local-chromium`, where `` is Puppeteer's package root. If the `product` is `firefox`, this defaults to `/.local-firefox`. - - `platform` <"linux"|"mac"|"win32"|"win64"> [string] for the current platform. Possible values are: `mac`, `win32`, `win64`, `linux`. Defaults to the current platform. - - `product` <"chrome"|"firefox"> [string] for the product to run. Possible values are: `chrome`, `firefox`. Defaults to `chrome`. -- returns: <[BrowserFetcher]> - -#### puppeteer.customQueryHandlerNames() - -- returns: <[Array]> A list with the names of all registered custom query handlers. - -#### puppeteer.defaultArgs([options]) - -- `options` <[Object]> Set of configurable options to set on the browser. Can have the following fields: - - `headless` <[boolean]|"chrome"> Whether to run browser in [headless mode](https://developers.google.com/web/updates/2017/04/headless-chrome). Defaults to `true` unless the `devtools` option is `true`. "chrome" is a new experimental headless mode (use at your own risk). - - `args` <[Array]<[string]>> Additional arguments to pass to the browser instance. The list of Chromium flags can be found [here](http://peter.sh/experiments/chromium-command-line-switches/). - - `userDataDir` <[string]> Path to a [User Data Directory](https://chromium.googlesource.com/chromium/src/+/refs/heads/main/docs/user_data_dir.md). - - `devtools` <[boolean]> Whether to auto-open a DevTools panel for each tab. If this option is `true`, the `headless` option will be set `false`. - - `debuggingPort` <[number]> Specify custom debugging port. Pass `0` to discover a random port. Defaults to `0`. -- returns: <[Array]<[string]>> - -The default flags that Chromium will be launched with. - -#### puppeteer.devices - -- returns: <[Object]> - -Returns a list of devices to be used with [`page.emulate(options)`](#pageemulateoptions). Actual list of -devices can be found in [`src/common/DeviceDescriptors.ts`](https://github.com/puppeteer/puppeteer/blob/main/src/common/DeviceDescriptors.ts). - -```js -const puppeteer = require('puppeteer'); -const iPhone = puppeteer.devices['iPhone 6']; - -(async () => { - const browser = await puppeteer.launch(); - const page = await browser.newPage(); - await page.emulate(iPhone); - await page.goto('https://www.google.com'); - // other actions... - await browser.close(); -})(); -``` - -#### puppeteer.errors - -- returns: <[Object]> - - `TimeoutError` <[function]> A class of [TimeoutError]. - -Puppeteer methods might throw errors if they are unable to fulfill a request. For example, [page.waitForSelector(selector[, options])](#pagewaitforselectorselector-options) -might fail if the selector doesn't match any nodes during the given timeframe. - -For certain types of errors Puppeteer uses specific error classes. -These classes are available via [`puppeteer.errors`](#puppeteererrors) - -An example of handling a timeout error: - -```js -try { - await page.waitForSelector('.foo'); -} catch (e) { - if (e instanceof puppeteer.errors.TimeoutError) { - // Do something if this is a timeout. - } -} -``` - -> **NOTE** The old way (Puppeteer versions <= v1.14.0) errors can be obtained with `require('puppeteer/Errors')`. - -#### puppeteer.executablePath() - -- returns: <[string]> A path where Puppeteer expects to find the bundled browser. The browser binary might not be there if the download was skipped with [`PUPPETEER_SKIP_CHROMIUM_DOWNLOAD`](#environment-variables). - -> **NOTE** `puppeteer.executablePath()` is affected by the `PUPPETEER_EXECUTABLE_PATH` and `PUPPETEER_CHROMIUM_REVISION` env variables. See [Environment Variables](#environment-variables) for details. - -#### puppeteer.launch([options]) - -- `options` <[Object]> Set of configurable options to set on the browser. Can have the following fields: - - `product` <[string]> Which browser to launch. At this time, this is either `chrome` or `firefox`. See also `PUPPETEER_PRODUCT`. - - `ignoreHTTPSErrors` <[boolean]> Whether to ignore HTTPS errors during navigation. Defaults to `false`. - - `headless` <[boolean]|"chrome"> Whether to run browser in [headless mode](https://developers.google.com/web/updates/2017/04/headless-chrome). Defaults to `true` unless the `devtools` option is `true`. "chrome" is a new experimental headless mode (use at your own risk). - - `channel` <[string]> When specified, Puppeteer will search for the locally installed release channel of Google Chrome and use it to launch. Available values are `chrome`, `chrome-beta`, `chrome-canary`, `chrome-dev`. When channel is specified, `executablePath` cannot be specified. - - `executablePath` <[string]> Path to a browser executable to run instead of the bundled Chromium. If `executablePath` is a relative path, then it is resolved relative to [current working directory](https://nodejs.org/api/process.html#process_process_cwd). **BEWARE**: Puppeteer is only [guaranteed to work](https://github.com/puppeteer/puppeteer/#q-why-doesnt-puppeteer-vxxx-work-with-chromium-vyyy) with the bundled Chromium, use at your own risk. - - `slowMo` <[number]> Slows down Puppeteer operations by the specified amount of milliseconds. Useful so that you can see what is going on. - - `defaultViewport` Sets a consistent viewport for each page. Defaults to an 800x600 viewport. `null` disables the default viewport. - - `width` <[number]> page width in pixels. - - `height` <[number]> page height in pixels. - - `deviceScaleFactor` <[number]> Specify device scale factor (can be thought of as DPR). Defaults to `1`. - - `isMobile` <[boolean]> Whether the `meta viewport` tag is taken into account. Defaults to `false`. - - `hasTouch`<[boolean]> Specifies if viewport supports touch events. Defaults to `false` - - `isLandscape` <[boolean]> Specifies if viewport is in landscape mode. Defaults to `false`. - - `args` <[Array]<[string]>> Additional arguments to pass to the browser instance. The list of Chromium flags can be found [here](http://peter.sh/experiments/chromium-command-line-switches/), and here is the list of [Firefox flags](https://wiki.mozilla.org/Firefox/CommandLineOptions). - - `ignoreDefaultArgs` <[boolean]|[Array]<[string]>> If `true`, then do not use [`puppeteer.defaultArgs()`](#puppeteerdefaultargsoptions). If an array is given, then filter out the given default arguments. Dangerous option; use with care. Defaults to `false`. - - `handleSIGINT` <[boolean]> Close the browser process on Ctrl-C. Defaults to `true`. - - `handleSIGTERM` <[boolean]> Close the browser process on SIGTERM. Defaults to `true`. - - `handleSIGHUP` <[boolean]> Close the browser process on SIGHUP. Defaults to `true`. - - `timeout` <[number]> Maximum time in milliseconds to wait for the browser instance to start. Defaults to `30000` (30 seconds). Pass `0` to disable timeout. - - `dumpio` <[boolean]> Whether to pipe the browser process stdout and stderr into `process.stdout` and `process.stderr`. Defaults to `false`. - - `userDataDir` <[string]> Path to a [User Data Directory](https://chromium.googlesource.com/chromium/src/+/refs/heads/main/docs/user_data_dir.md). - - `debuggingPort` <[number]> Specify custom debugging port. Pass `0` to discover a random port. Defaults to `0`. - - `env` <[Object]> Specify environment variables that will be visible to the browser. Defaults to `process.env`. - - `devtools` <[boolean]> Whether to auto-open a DevTools panel for each tab. If this option is `true`, the `headless` option will be set `false`. - - `pipe` <[boolean]> Connects to the browser over a pipe instead of a WebSocket. Defaults to `false`. - - `extraPrefsFirefox` <[Object]> Additional [preferences](https://searchfox.org/mozilla-release/source/modules/libpref/init/all.js) that can be passed to Firefox (see `PUPPETEER_PRODUCT`) - - `targetFilter` Use this function to decide if Puppeteer should connect to the given target. If a `targetFilter` is provided, Puppeteer only connects to targets for which `targetFilter` returns `true`. By default, Puppeteer connects to all available targets. - - `waitForInitialPage` <[boolean]> Whether to wait for the initial page to be ready. Defaults to `true`. -- returns: <[Promise]<[Browser]>> Promise which resolves to browser instance. - -You can use `ignoreDefaultArgs` to filter out `--mute-audio` from default arguments: - -```js -const browser = await puppeteer.launch({ - ignoreDefaultArgs: ['--mute-audio'], -}); -``` - -> **NOTE** Puppeteer can also be used to control the Chrome browser, but it works best with the version of Chromium it is bundled with. There is no guarantee it will work with any other version. Use `executablePath` or `channel` option with extreme caution. -> -> If Google Chrome (rather than Chromium) is preferred, a [Chrome Canary](https://www.google.com/chrome/browser/canary.html) or [Dev Channel](https://www.chromium.org/getting-involved/dev-channel) build is suggested. -> -> In [puppeteer.launch([options])](#puppeteerlaunchoptions) above, any mention of Chromium also applies to Chrome. -> -> See [`this article`](https://www.howtogeek.com/202825/what%E2%80%99s-the-difference-between-chromium-and-chrome/) for a description of the differences between Chromium and Chrome. [`This article`](https://chromium.googlesource.com/chromium/src/+/lkgr/docs/chromium_browser_vs_google_chrome.md) describes some differences for Linux users. - -#### puppeteer.networkConditions - -- returns: <[Object]> - -Returns a list of network conditions to be used with [`page.emulateNetworkConditions(networkConditions)`](#pageemulatenetworkconditionsnetworkconditions). Actual list of -conditions can be found in [`src/common/NetworkConditions.ts`](https://github.com/puppeteer/puppeteer/blob/main/src/common/NetworkConditions.ts). - -```js -const puppeteer = require('puppeteer'); -const slow3G = puppeteer.networkConditions['Slow 3G']; - -(async () => { - const browser = await puppeteer.launch(); - const page = await browser.newPage(); - await page.emulateNetworkConditions(slow3G); - await page.goto('https://www.google.com'); - // other actions... - await browser.close(); -})(); -``` - -#### puppeteer.product - -- returns: <[string]> returns the name of the browser that is under automation (`"chrome"` or `"firefox"`) - -The product is set by the `PUPPETEER_PRODUCT` environment variable or the `product` option in [puppeteer.launch([options])](#puppeteerlaunchoptions) and defaults to `chrome`. Firefox support is experimental and requires to install Puppeteer via `PUPPETEER_PRODUCT=firefox npm i puppeteer`. - -#### puppeteer.registerCustomQueryHandler(name, queryHandler) - -- `name` <[string]> The name that the custom query handler will be registered under. -- `queryHandler` <[CustomQueryHandler]> The [custom query handler](#interface-customqueryhandler) to register. - -Registers a [custom query handler](#interface-customqueryhandler). - -Example: - -```js -puppeteer.registerCustomQueryHandler('getByClass', { - queryOne: (element, selector) => { - return element.querySelector(`.${selector}`); - }, - queryAll: (element, selector) => { - return element.querySelectorAll(`.${selector}`); - }, -}); -const aHandle = await page.$('getByClass/…'); -``` - -#### puppeteer.unregisterCustomQueryHandler(name) - -- `name` <[string]> The name of the query handler to unregister. - -### class: BrowserFetcher - -BrowserFetcher can download and manage different versions of Chromium and Firefox. - -BrowserFetcher operates on revision strings that specify a precise version of Chromium, e.g. `"533271"`. Revision strings can be obtained from [omahaproxy.appspot.com](http://omahaproxy.appspot.com/). - -In the Firefox case, BrowserFetcher downloads Firefox Nightly and operates on version numbers such as `"75"`. - -An example of using BrowserFetcher to download a specific version of Chromium and running -Puppeteer against it: - -```js -const browserFetcher = puppeteer.createBrowserFetcher(); -const revisionInfo = await browserFetcher.download('533271'); -const browser = await puppeteer.launch({ - executablePath: revisionInfo.executablePath, -}); -``` - -> **NOTE** BrowserFetcher is not designed to work concurrently with other -> instances of BrowserFetcher that share the same downloads directory. - -#### browserFetcher.canDownload(revision) - -- `revision` <[string]> a revision to check availability. -- returns: <[Promise]<[boolean]>> returns `true` if the revision could be downloaded from the host. - -The method initiates a HEAD request to check if the revision is available. - -#### browserFetcher.download(revision[, progressCallback]) - -- `revision` <[string]> a revision to download. -- `progressCallback` <[function]([number], [number])> A function that will be called with two arguments: - - `downloadedBytes` <[number]> how many bytes have been downloaded - - `totalBytes` <[number]> how large is the total download -- returns: <[Promise]<[Object]>> Resolves with revision information when the revision is downloaded and extracted - - `revision` <[string]> the revision the info was created from - - `folderPath` <[string]> path to the extracted revision folder - - `executablePath` <[string]> path to the revision executable - - `url` <[string]> URL this revision can be downloaded from - - `local` <[boolean]> whether the revision is locally available on disk - -The method initiates a GET request to download the revision from the host. - -#### browserFetcher.host() - -- returns: <[string]> The download host being used. - -#### browserFetcher.localRevisions() - -- returns: <[Promise]<[Array]<[string]>>> A list of all revisions (for the current `product`) available locally on disk. - -#### browserFetcher.platform() - -- returns: <[string]> One of `mac`, `linux`, `win32` or `win64`. - -#### browserFetcher.product() - -- returns: <[string]> One of `chrome` or `firefox`. - -#### browserFetcher.remove(revision) - -- `revision` <[string]> a revision to remove for the current `product`. The method will throw if the revision has not been downloaded. -- returns: <[Promise]> Resolves when the revision has been removed. - -#### browserFetcher.revisionInfo(revision) - -- `revision` <[string]> a revision to get info for. -- returns: <[Object]> - - `revision` <[string]> the revision the info was created from - - `folderPath` <[string]> path to the extracted revision folder - - `executablePath` <[string]> path to the revision executable - - `url` <[string]> URL this revision can be downloaded from - - `local` <[boolean]> whether the revision is locally available on disk - - `product` <[string]> one of `chrome` or `firefox` - -> **NOTE** Many BrowserFetcher methods, like `remove` and `revisionInfo` -> are affected by the choice of `product`. See [puppeteer.createBrowserFetcher([options])](#puppeteercreatebrowserfetcheroptions). - -### class: Browser - -- extends: [EventEmitter](#class-eventemitter) - -A Browser is created when Puppeteer connects to a Chromium instance, either through [`puppeteer.launch`](#puppeteerlaunchoptions) or [`puppeteer.connect`](#puppeteerconnectoptions). - -An example of using a [Browser] to create a [Page]: - -```js -const puppeteer = require('puppeteer'); - -(async () => { - const browser = await puppeteer.launch(); - const page = await browser.newPage(); - await page.goto('https://example.com'); - await browser.close(); -})(); -``` - -An example of disconnecting from and reconnecting to a [Browser]: - -```js -const puppeteer = require('puppeteer'); - -(async () => { - const browser = await puppeteer.launch(); - // Store the endpoint to be able to reconnect to Chromium - const browserWSEndpoint = browser.wsEndpoint(); - // Disconnect puppeteer from Chromium - browser.disconnect(); - - // Use the endpoint to reestablish a connection - const browser2 = await puppeteer.connect({browserWSEndpoint}); - // Close Chromium - await browser2.close(); -})(); -``` - -#### event: 'disconnected' - -Emitted when Puppeteer gets disconnected from the Chromium instance. This might happen because of one of the following: - -- Chromium is closed or crashed -- The [`browser.disconnect`](#browserdisconnect) method was called - -#### event: 'targetchanged' - -- <[Target]> - -Emitted when the URL of a target changes. - -> **NOTE** This includes target changes in incognito browser contexts. - -#### event: 'targetcreated' - -- <[Target]> - -Emitted when a target is created, for example when a new page is opened by [`window.open`](https://developer.mozilla.org/en-US/docs/Web/API/Window/open) or [`browser.newPage`](#browsernewpage). - -> **NOTE** This includes target creations in incognito browser contexts. - -#### event: 'targetdestroyed' - -- <[Target]> - -Emitted when a target is destroyed, for example when a page is closed. - -> **NOTE** This includes target destructions in incognito browser contexts. - -#### browser.browserContexts() - -- returns: <[Array]<[BrowserContext]>> - -Returns an array of all open browser contexts. In a newly created browser, this will return -a single instance of [BrowserContext]. - -#### browser.close() - -- returns: <[Promise]> - -Closes Chromium and all of its pages (if any were opened). The [Browser] object itself is considered to be disposed and cannot be used anymore. - -During the process of closing the browser, Puppeteer attempts to delete the temp folder created exclusively for this browser instance. If this fails (either because a file in the temp folder is locked by another process or because of insufficient permissions) an error is logged. This implies that: a) the folder and/or its content is not fully deleted; and b) the connection with the browser is not properly disposed (see [browser.disconnect()](#browserdisconnect)). - -#### browser.createIncognitoBrowserContext([options]) - -- `options` <[Object]> Set of configurable options to set on the browserContext. Can have the following fields: - - `proxyServer` <[string]> Optional proxy server with optional port to use for all requests. Username and password can be set in [page.authenticate(credentials)](#pageauthenticatecredentials). - - `proxyBypassList` <[string]> Optional: Bypass the proxy for the given semi-colon-separated list of hosts. -- returns: <[Promise]<[BrowserContext]>> - -Creates a new incognito browser context. This won't share cookies/cache with other browser contexts. - -```js -(async () => { - const browser = await puppeteer.launch(); - // Create a new incognito browser context. - const context = await browser.createIncognitoBrowserContext(); - // Create a new page in a pristine context. - const page = await context.newPage(); - // Do stuff - await page.goto('https://example.com'); -})(); -``` - -#### browser.defaultBrowserContext() - -- returns: <[BrowserContext]> - -Returns the default browser context. The default browser context can not be closed. - -#### browser.disconnect() - -Disconnects Puppeteer from the browser but leaves the Chromium process running. After calling `disconnect`, the [Browser] object is considered disposed and cannot be used anymore. - -#### browser.isConnected() - -- returns: <[boolean]> - -Indicates that the browser is connected. - -#### browser.newPage() - -- returns: <[Promise]<[Page]>> - -Promise which resolves to a new [Page] object. The [Page] is created in a default browser context. - -#### browser.pages() - -- returns: <[Promise]<[Array]<[Page]>>> Promise which resolves to an array of all open pages. Non visible pages, such as `"background_page"`, will not be listed here. You can find them using [target.page()](#targetpage). - -An array of all pages inside the Browser. In case of multiple browser contexts, -the method will return an array with all the pages in all browser contexts. - -#### browser.process() - -- returns: Spawned browser process. Returns `null` if the browser instance was created with [`puppeteer.connect`](#puppeteerconnectoptions) method. - -#### browser.target() - -- returns: <[Target]> - -A target associated with the browser. - -#### browser.targets() - -- returns: <[Array]<[Target]>> - -An array of all active targets inside the Browser. In case of multiple browser contexts, -the method will return an array with all the targets in all browser contexts. - -#### browser.userAgent() - -- returns: <[Promise]<[string]>> Promise which resolves to the browser's original user agent. - -> **NOTE** Pages can override browser user agent with [page.setUserAgent](#pagesetuseragentuseragent-useragentmetadata) - -#### browser.version() - -- returns: <[Promise]<[string]>> For headless Chromium, this is similar to `HeadlessChrome/61.0.3153.0`. For non-headless, this is similar to `Chrome/61.0.3153.0`. - -> **NOTE** the format of browser.version() might change with future releases of Chromium. - -#### browser.waitForTarget(predicate[, options]) - -- `predicate` <[function]\([Target]\):[boolean]|[Promise]> A function to be run for every target -- `options` <[Object]> - - `timeout` <[number]> Maximum wait time in milliseconds. Pass `0` to disable the timeout. Defaults to 30 seconds. -- returns: <[Promise]<[Target]>> Promise which resolves to the first target found that matches the `predicate` function. - -This searches for a target in all browser contexts. - -An example of finding a target for a page opened via `window.open`: - -```js -await page.evaluate(() => window.open('https://www.example.com/')); -const newWindowTarget = await browser.waitForTarget( - target => target.url() === 'https://www.example.com/' -); -``` - -#### browser.wsEndpoint() - -- returns: <[string]> Browser websocket URL. - -Browser websocket endpoint which can be used as an argument to -[puppeteer.connect](#puppeteerconnectoptions). The format is `ws://${host}:${port}/devtools/browser/` - -You can find the `webSocketDebuggerUrl` from `http://${host}:${port}/json/version`. Learn more about the [devtools protocol](https://chromedevtools.github.io/devtools-protocol) and the [browser endpoint](https://chromedevtools.github.io/devtools-protocol/#how-do-i-access-the-browser-target). - -### class: BrowserContext - -- extends: [EventEmitter](#class-eventemitter) - -BrowserContexts provide a way to operate multiple independent browser sessions. When a browser is launched, it has -a single BrowserContext used by default. The method `browser.newPage()` creates a page in the default browser context. - -If a page opens another page, e.g. with a `window.open` call, the popup will belong to the parent page's browser -context. - -Puppeteer allows creation of "incognito" browser contexts with `browser.createIncognitoBrowserContext()` method. -"Incognito" browser contexts don't write any browsing data to disk. - -```js -// Create a new incognito browser context -const context = await browser.createIncognitoBrowserContext(); -// Create a new page inside context. -const page = await context.newPage(); -// ... do stuff with page ... -await page.goto('https://example.com'); -// Dispose context once it's no longer needed. -await context.close(); -``` - -#### event: 'targetchanged' - -- <[Target]> - -Emitted when the URL of a target inside the browser context changes. - -#### event: 'targetcreated' - -- <[Target]> - -Emitted when a new target is created inside the browser context, for example when a new page is opened by [`window.open`](https://developer.mozilla.org/en-US/docs/Web/API/Window/open) or [`browserContext.newPage`](#browsercontextnewpage). - -#### event: 'targetdestroyed' - -- <[Target]> - -Emitted when a target inside the browser context is destroyed, for example when a page is closed. - -#### browserContext.browser() - -- returns: <[Browser]> - -The browser this browser context belongs to. - -#### browserContext.clearPermissionOverrides() - -- returns: <[Promise]> - -Clears all permission overrides for the browser context. - -```js -const context = browser.defaultBrowserContext(); -context.overridePermissions('https://example.com', ['clipboard-read']); -// do stuff .. -context.clearPermissionOverrides(); -``` - -#### browserContext.close() - -- returns: <[Promise]> - -Closes the browser context. All the targets that belong to the browser context -will be closed. - -> **NOTE** only incognito browser contexts can be closed. - -#### browserContext.isIncognito() - -- returns: <[boolean]> - -Returns whether BrowserContext is incognito. -The default browser context is the only non-incognito browser context. - -> **NOTE** the default browser context cannot be closed. - -#### browserContext.newPage() - -- returns: <[Promise]<[Page]>> - -Creates a new page in the browser context. - -#### browserContext.overridePermissions(origin, permissions) - -- `origin` <[string]> The [origin] to grant permissions to, e.g. "https://example.com". -- `permissions` <[Array]<[string]>> An array of permissions to grant. All permissions that are not listed here will be automatically denied. Permissions can be one of the following values: - - `'geolocation'` - - `'midi'` - - `'midi-sysex'` (system-exclusive midi) - - `'notifications'` - - `'push'` - - `'camera'` - - `'microphone'` - - `'background-sync'` - - `'ambient-light-sensor'` - - `'accelerometer'` - - `'gyroscope'` - - `'magnetometer'` - - `'accessibility-events'` - - `'clipboard-read'` - - `'clipboard-write'` - - `'payment-handler'` - - `'persistent-storage'` -- returns: <[Promise]> - -```js -const context = browser.defaultBrowserContext(); -await context.overridePermissions('https://html5demos.com', ['geolocation']); -``` - -#### browserContext.pages() - -- returns: <[Promise]<[Array]<[Page]>>> Promise which resolves to an array of all open pages. Non visible pages, such as `"background_page"`, will not be listed here. You can find them using [target.page()](#targetpage). - -An array of all pages inside the browser context. - -#### browserContext.targets() - -- returns: <[Array]<[Target]>> - -An array of all active targets inside the browser context. - -#### browserContext.waitForTarget(predicate[, options]) - -- `predicate` <[function]\([Target]\):[boolean]|[Promise]> A function to be run for every target -- `options` <[Object]> - - `timeout` <[number]> Maximum wait time in milliseconds. Pass `0` to disable the timeout. Defaults to 30 seconds. -- returns: <[Promise]<[Target]>> Promise which resolves to the first target found that matches the `predicate` function. - -This searches for a target in this specific browser context. - -An example of finding a target for a page opened via `window.open`: - -```js -await page.evaluate(() => window.open('https://www.example.com/')); -const newWindowTarget = await browserContext.waitForTarget( - target => target.url() === 'https://www.example.com/' -); -``` - -### class: Page - -- extends: [EventEmitter](#class-eventemitter) - -Page provides methods to interact with a single tab or [extension background page](https://developer.chrome.com/extensions/background_pages) in Chromium. One [Browser] instance might have multiple [Page] instances. - -This example creates a page, navigates it to a URL, and then saves a screenshot: - -```js -const puppeteer = require('puppeteer'); - -(async () => { - const browser = await puppeteer.launch(); - const page = await browser.newPage(); - await page.goto('https://example.com'); - await page.screenshot({path: 'screenshot.png'}); - await browser.close(); -})(); -``` - -The Page class emits various events (described below) which can be handled using -any of the [`EventEmitter`](#class-eventemitter) methods, such as `on`, `once` -or `off`. - -This example logs a message for a single page `load` event: - -```js -page.once('load', () => console.log('Page loaded!')); -``` - -To unsubscribe from events use the `off` method: - -```js -function logRequest(interceptedRequest) { - console.log('A request was made:', interceptedRequest.url()); -} -page.on('request', logRequest); -// Sometime later... -page.off('request', logRequest); -``` - -#### event: 'close' - -Emitted when the page closes. - -#### event: 'console' - -- <[ConsoleMessage]> - -Emitted when JavaScript within the page calls one of console API methods, e.g. `console.log` or `console.dir`. Also emitted if the page throws an error or a warning. - -The arguments passed into `console.log` appear as arguments on the event handler. - -An example of handling `console` event: - -```js -page.on('console', msg => { - for (let i = 0; i < msg.args().length; ++i) - console.log(`${i}: ${msg.args()[i]}`); -}); -page.evaluate(() => console.log('hello', 5, {foo: 'bar'})); -``` - -#### event: 'dialog' - -- <[Dialog]> - -Emitted when a JavaScript dialog appears, such as `alert`, `prompt`, `confirm` or `beforeunload`. Puppeteer can respond to the dialog via [Dialog]'s [accept](#dialogacceptprompttext) or [dismiss](#dialogdismiss) methods. - -#### event: 'domcontentloaded' - -Emitted when the JavaScript [`DOMContentLoaded`](https://developer.mozilla.org/en-US/docs/Web/Events/DOMContentLoaded) event is dispatched. - -#### event: 'error' - -- <[Error]> - -Emitted when the page crashes. - -> **NOTE** `error` event has a special meaning in Node, see [error events](https://nodejs.org/api/events.html#events_error_events) for details. - -#### event: 'frameattached' - -- <[Frame]> - -Emitted when a frame is attached. - -#### event: 'framedetached' - -- <[Frame]> - -Emitted when a frame is detached. - -#### event: 'framenavigated' - -- <[Frame]> - -Emitted when a frame is navigated to a new URL. - -#### event: 'load' - -Emitted when the JavaScript [`load`](https://developer.mozilla.org/en-US/docs/Web/Events/load) event is dispatched. - -#### event: 'metrics' - -- <[Object]> - - `title` <[string]> The title passed to `console.timeStamp`. - - `metrics` <[Object]> Object containing metrics as key/value pairs. The values - of metrics are of <[number]> type. - -Emitted when the JavaScript code makes a call to `console.timeStamp`. For the list -of metrics see `page.metrics`. - -#### event: 'pageerror' - -- <[Error]> The exception message - -Emitted when an uncaught exception happens within the page. - -#### event: 'popup' - -- <[Page]> Page corresponding to "popup" window - -Emitted when the page opens a new tab or window. - -```js -const [popup] = await Promise.all([ - new Promise(resolve => page.once('popup', resolve)), - page.click('a[target=_blank]'), -]); -``` - -```js -const [popup] = await Promise.all([ - new Promise(resolve => page.once('popup', resolve)), - page.evaluate(() => window.open('https://example.com')), -]); -``` - -#### event: 'request' - -- <[HTTPRequest]> - -Emitted when a page issues a request. The [HTTPRequest] object is read-only. -In order to intercept and mutate requests, see `page.setRequestInterception`. - -#### event: 'requestfailed' - -- <[HTTPRequest]> - -Emitted when a request fails, for example by timing out. - -> **NOTE** HTTP Error responses, such as 404 or 503, are still successful responses from HTTP standpoint, so request will complete with [`'requestfinished'`](#event-requestfinished) event and not with [`'requestfailed'`](#event-requestfailed). - -#### event: 'requestfinished' - -- <[HTTPRequest]> - -Emitted when a request finishes successfully. - -#### event: 'response' - -- <[HTTPResponse]> - -Emitted when a [HTTPResponse] is received. - -#### event: 'workercreated' - -- <[WebWorker]> - -Emitted when a dedicated [WebWorker](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API) is spawned by the page. - -#### event: 'workerdestroyed' - -- <[WebWorker]> - -Emitted when a dedicated [WebWorker](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API) is terminated. - -#### page.$(selector) - -- `selector` <[string]> A [selector] to query page for -- returns: <[Promise]> - -The method runs `document.querySelector` within the page. If no element matches the selector, the return value resolves to `null`. - -Shortcut for [page.mainFrame().$(selector)](#frameselector). - -#### page.$$(selector) - -- `selector` <[string]> A [selector] to query page for -- returns: <[Promise]<[Array]<[ElementHandle]>>> - -The method runs `document.querySelectorAll` within the page. If no elements match the selector, the return value resolves to `[]`. - -Shortcut for [page.mainFrame().$$(selector)](#frameselector-1). - -#### page.$$eval(selector, pageFunction[, ...args]) - -- `selector` <[string]> A [selector] to query page for -- `pageFunction` <[function]\([Array]<[Element]>\)> Function to be evaluated in browser context -- `...args` <...[Serializable]|[JSHandle]> Arguments to pass to `pageFunction` -- returns: <[Promise]<[Serializable]>> Promise which resolves to the return value of `pageFunction` - -This method runs `Array.from(document.querySelectorAll(selector))` within the page and passes it as the first argument to `pageFunction`. - -If `pageFunction` returns a [Promise], then `page.$$eval` would wait for the promise to resolve and return its value. - -Examples: - -```js -const divCount = await page.$$eval('div', divs => divs.length); -``` - -```js -const options = await page.$$eval('div > span.options', options => - options.map(option => option.textContent) -); -``` - -#### page.$eval(selector, pageFunction[, ...args]) - -- `selector` <[string]> A [selector] to query page for -- `pageFunction` <[function]\([Element]\)> Function to be evaluated in browser context -- `...args` <...[Serializable]|[JSHandle]> Arguments to pass to `pageFunction` -- returns: <[Promise]<[Serializable]>> Promise which resolves to the return value of `pageFunction` - -This method runs `document.querySelector` within the page and passes it as the first argument to `pageFunction`. If there's no element matching `selector`, the method throws an error. - -If `pageFunction` returns a [Promise], then `page.$eval` would wait for the promise to resolve and return its value. - -Examples: - -```js -const searchValue = await page.$eval('#search', el => el.value); -const preloadHref = await page.$eval('link[rel=preload]', el => el.href); -const html = await page.$eval('.main-container', e => e.outerHTML); -``` - -Shortcut for [page.mainFrame().$eval(selector, pageFunction)](#frameevalselector-pagefunction-args). - -#### page.$x(expression) - -- `expression` <[string]> Expression to [evaluate](https://developer.mozilla.org/en-US/docs/Web/API/Document/evaluate). -- returns: <[Promise]<[Array]<[ElementHandle]>>> - -The method evaluates the XPath expression relative to the page document as its context node. If there are no such elements, the method resolves to an empty array. - -Shortcut for [page.mainFrame().$x(expression)](#framexexpression) - -#### page.accessibility - -- returns: <[Accessibility]> - -#### page.addScriptTag(options) - -- `options` <[Object]> - - `url` <[string]> URL of a script to be added. - - `path` <[string]> Path to the JavaScript file to be injected into frame. If `path` is a relative path, then it is resolved relative to [current working directory](https://nodejs.org/api/process.html#process_process_cwd). - - `content` <[string]> Raw JavaScript content to be injected into frame. - - `type` <[string]> Script type. Use 'module' in order to load a Javascript ES6 module. See [script](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script) for more details. - - `id` <[string]> id attribute to add to the script tag. -- returns: <[Promise]<[ElementHandle]>> which resolves to the added tag when the script's onload fires or when the script content was injected into frame. - -Adds a `