From 3ad75597ca42a7995e816c2672d87caf54500553 Mon Sep 17 00:00:00 2001
From: fanyong920 <1023079644@qq.com>
Date: Tue, 17 Dec 2024 16:29:51 +0800
Subject: [PATCH] =?UTF-8?q?=E5=8D=87=E7=BA=A7=203.0.0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.gitignore | 2 +-
...43\345\206\263\346\226\271\346\241\210.md" | 222 -
README.md | 120 +-
api.md | 3969 -----------------
example/pom.xml | 11 +-
.../java/com/ruiyun/example/A_LaunchTest.java | 260 +-
.../com/ruiyun/example/B_PageGotoTest.java | 31 +-
.../com/ruiyun/example/C_PageGoBackTest.java | 14 +-
.../ruiyun/example/D_PageGoForwardTest.java | 19 +-
.../com/ruiyun/example/E_PageEventsTest.java | 168 +-
.../ruiyun/example/F_PageViewPortTest.java | 25 +-
.../com/ruiyun/example/G_PageContentTest.java | 35 +-
.../com/ruiyun/example/H_PageEvaluteTest.java | 45 +-
.../com/ruiyun/example/I_PageMouseTest.java | 40 +-
.../com/ruiyun/example/J_RequestTest.java | 152 +-
.../java/com/ruiyun/example/K_PDFTest.java | 40 +-
.../com/ruiyun/example/L_CDPSessionTest.java | 21 +-
.../com/ruiyun/example/M_ResponseTest.java | 32 +-
.../ruiyun/example/N_ExposeFunctionTest.java | 28 +-
.../example/O_WaitForNavigationTest.java | 20 +-
.../com/ruiyun/example/P_AddStyleTagTest.java | 12 +-
.../com/ruiyun/example/PageExtendExample.java | 30 -
.../com/ruiyun/example/Q_ScreenshotTest.java | 31 +-
.../example/R_ElementHandleApiTest.java | 193 +-
.../com/ruiyun/example/S_PageApiTest.java | 265 +-
.../example/T_BroswerContextApiTest.java | 137 +-
.../main/java/com/ruiyun/example/Test.java | 94 +-
.../main/java/com/ruiyun/example/Test2.java | 49 +-
.../com/ruiyun/example/U_BroswerApiTest.java | 160 +-
.../com/ruiyun/example/V_DownloadApiTest.java | 52 +-
.../example/W_AccessibilityApiTest.java | 10 +-
.../example/X_WorkingWithExtension.java | 23 +-
.../com/ruiyun/example/Z_FrameApiTest.java | 15 +-
.../src/main/resources/META-INF/MANIFEST.MF | 3 +
.../main/resources}/simplelogger.properties | 2 +-
pom.xml | 8 +-
.../ruiyun/jvppeteer/api/core/Browser.java | 207 +
.../jvppeteer/api/core/BrowserContext.java | 136 +
.../ruiyun/jvppeteer/api/core/CDPSession.java | 29 +
.../ruiyun/jvppeteer/api/core/Connection.java | 92 +
.../com/ruiyun/jvppeteer/api/core/Dialog.java | 79 +
.../{ => api}/core/ElementHandle.java | 1350 +++---
.../{events => api/core}/EventEmitter.java | 41 +-
.../com/ruiyun/jvppeteer/api/core/Frame.java | 682 +++
.../ruiyun/jvppeteer/api/core/JSHandle.java | 170 +
.../jvppeteer/{ => api}/core/Keyboard.java | 295 +-
.../com/ruiyun/jvppeteer/api/core/Mouse.java | 132 +
.../com/ruiyun/jvppeteer/api/core/Page.java | 1618 +++++++
.../com/ruiyun/jvppeteer/api/core/Realm.java | 90 +
.../jvppeteer/{ => api}/core/Request.java | 647 ++-
.../ruiyun/jvppeteer/api/core/Response.java | 126 +
.../com/ruiyun/jvppeteer/api/core/Target.java | 69 +
.../jvppeteer/api/core/TouchHandle.java | 12 +
.../jvppeteer/api/core/Touchscreen.java | 64 +
.../ruiyun/jvppeteer/api/core/WebWorker.java | 106 +
.../api/events/BrowserContextEvents.java | 8 +
.../jvppeteer/api/events/BrowserEvents.java | 41 +
.../api/events/ConnectionEvents.java | 92 +
.../jvppeteer/api/events/FrameEvents.java | 19 +
.../jvppeteer/api/events/PageEvents.java | 119 +
.../jvppeteer/api/events/TrustedEmitter.java | 25 +
.../jvppeteer/bidi/core/BidiBrowser.java | 272 ++
.../bidi/core/BidiBrowserContext.java | 281 ++
.../bidi/core/BidiBrowserTarget.java | 51 +
.../jvppeteer/bidi/core/BidiCdpSession.java | 103 +
.../jvppeteer/bidi/core/BidiConnection.java | 237 +
.../jvppeteer/bidi/core/BidiDeserializer.java | 136 +
.../jvppeteer/bidi/core/BidiDialog.java | 24 +
.../bidi/core/BidiElementHandle.java | 108 +
.../bidi/core/BidiExposeableFunction.java | 219 +
.../ruiyun/jvppeteer/bidi/core/BidiFrame.java | 530 +++
.../jvppeteer/bidi/core/BidiFrameRealm.java | 116 +
.../jvppeteer/bidi/core/BidiFrameTarget.java | 64 +
.../jvppeteer/bidi/core/BidiJSHandle.java | 96 +
.../jvppeteer/bidi/core/BidiKeyboard.java | 356 ++
.../bidi/core/BidiLifeCycleWatch.java | 200 +
.../ruiyun/jvppeteer/bidi/core/BidiMouse.java | 190 +
.../ruiyun/jvppeteer/bidi/core/BidiPage.java | 905 ++++
.../jvppeteer/bidi/core/BidiPageTarget.java | 57 +
.../ruiyun/jvppeteer/bidi/core/BidiRealm.java | 183 +
.../jvppeteer/bidi/core/BidiRealmCore.java | 129 +
.../jvppeteer/bidi/core/BidiRequest.java | 304 ++
.../jvppeteer/bidi/core/BidiResponse.java | 148 +
.../jvppeteer/bidi/core/BidiSerializer.java | 115 +
.../jvppeteer/bidi/core/BidiTouchHandle.java | 109 +
.../jvppeteer/bidi/core/BidiTouchscreen.java | 30 +
.../jvppeteer/bidi/core/BidiWebWorker.java | 50 +
.../jvppeteer/bidi/core/BidiWorkerRealm.java | 45 +
.../jvppeteer/bidi/core/BidiWorkerTarget.java | 56 +
.../jvppeteer/bidi/core/BrowserCore.java | 229 +
.../jvppeteer/bidi/core/BrowsingContext.java | 516 +++
.../bidi/core/DedicatedWorkerRealm.java | 60 +
.../jvppeteer/bidi/core/Navigation.java | 186 +
.../jvppeteer/bidi/core/NoneSourceAction.java | 4 +
.../jvppeteer/bidi/core/ReadinessState.java | 12 +
.../jvppeteer/bidi/core/RequestCore.java | 278 ++
.../ruiyun/jvppeteer/bidi/core/Session.java | 143 +
.../bidi/core/SharedWorkerRealm.java | 57 +
.../jvppeteer/bidi/core/UserContext.java | 197 +
.../jvppeteer/bidi/core/UserPrompt.java | 127 +
.../jvppeteer/bidi/core/WindowRealm.java | 78 +
.../bidi/entities/AddInterceptOptions.java | 28 +
.../entities/AddPreloadScriptOptions.java | 33 +
.../bidi/entities/ArrayLocalValue.java | 24 +
.../bidi/entities/AuthCredentials.java | 46 +
.../bidi/entities/AuthRequiredParameters.java | 78 +
.../bidi/entities/BaseParameters.java | 69 +
.../entities/BeforeRequestSentParameters.java | 78 +
.../jvppeteer/bidi/entities/BidiViewport.java | 38 +
.../jvppeteer/bidi/entities/BytesValue.java | 38 +
.../bidi/entities/CallFunctionOptions.java | 53 +
.../jvppeteer/bidi/entities/Capabilities.java | 85 +
.../bidi/entities/CapabilitiesRequest.java | 24 +
.../bidi/entities/CapabilityRequest.java | 66 +
.../entities/CaptureScreenshotOptions.java | 60 +
.../bidi/entities/ChannelProperties.java | 31 +
.../jvppeteer/bidi/entities/ChannelValue.java | 33 +
.../bidi/entities/ClipRectangle.java | 82 +
.../jvppeteer/bidi/entities/ClosedEvent.java | 27 +
.../entities/Cookie.java} | 72 +-
.../jvppeteer/bidi/entities/CookieFilter.java | 115 +
.../CreateBrowsingContextOptions.java | 37 +
.../jvppeteer/bidi/entities/CreateType.java | 6 +
.../bidi/entities/EvaluateOptions.java | 31 +
.../bidi/entities/EvaluateResult.java | 51 +
.../bidi/entities/ExceptionDetails.java | 51 +
.../bidi/entities/FetchErrorParameters.java | 78 +
.../bidi/entities/FetchTimingInfo.java | 123 +
.../bidi/entities/GetCookiesOptions.java | 13 +
.../entities/HandleUserPromptOptions.java | 38 +
.../jvppeteer/bidi/entities/Header.java | 38 +
.../jvppeteer/bidi/entities/ImageFormat.java | 38 +
.../jvppeteer/bidi/entities/Initiator.java | 69 +
.../jvppeteer/bidi/entities/InputId.java | 23 +
.../bidi/entities/InterceptPhase.java | 17 +
.../jvppeteer/bidi/entities/LocalValue.java | 31 +
.../jvppeteer/bidi/entities/LogEntry.java | 126 +
.../bidi/entities/MessageParameters.java | 31 +
.../bidi/entities/NavigationInfo.java | 24 +
.../jvppeteer/bidi/entities/NewResult.java | 23 +
.../jvppeteer/bidi/entities/Orientation.java | 10 +
.../jvppeteer/bidi/entities/Origin.java | 10 +
.../bidi/entities/PartialCookie.java | 151 +
.../bidi/entities/PartitionDescriptor.java | 61 +
.../bidi/entities/PermissionOverride.java | 29 +
.../bidi/entities/PermissionState.java | 12 +
.../entities/PointerCommonProperties.java | 80 +
.../bidi/entities/PointerParameters.java | 27 +
.../jvppeteer/bidi/entities/PointerType.java | 12 +
.../bidi/entities/PrintMarginParameters.java | 60 +
.../jvppeteer/bidi/entities/PrintOptions.java | 82 +
.../bidi/entities/PrintPageParameters.java | 38 +
.../bidi/entities/ProxyConfiguration.java | 95 +
.../entities/RealmDestroyedParameters.java | 14 +
.../jvppeteer/bidi/entities/RealmInfo.java | 60 +
.../jvppeteer/bidi/entities/RealmType.java | 32 +
.../bidi/entities/ReloadParameters.java | 33 +
.../bidi/entities/RemoteReference.java | 22 +
.../jvppeteer/bidi/entities/RemoteValue.java | 62 +
.../jvppeteer/bidi/entities/RequestData.java | 126 +
.../entities/ResponseCompletedParameters.java | 78 +
.../bidi/entities/ResponseContent.java | 20 +
.../jvppeteer/bidi/entities/ResponseData.java | 145 +
.../entities/ResponseStartedParameters.java | 78 +
.../bidi/entities/ResultOwnership.java | 10 +
.../jvppeteer/bidi/entities/SameSite.java | 12 +
.../bidi/entities/SerializationOptions.java | 40 +
.../bidi/entities/SetViewportParameters.java | 32 +
.../bidi/entities/SharedReference.java | 27 +
.../jvppeteer/bidi/entities/Source.java | 30 +
.../bidi/entities/SourceActions.java | 207 +
.../bidi/entities/SourceActionsType.java | 28 +
.../SupportedWebDriverCapabilities.java | 33 +
.../SupportedWebDriverCapability.java | 53 +
.../jvppeteer/bidi/entities/Target.java | 31 +
.../jvppeteer/bidi/entities/UrlPattern.java | 67 +
.../entities/UserPromptClosedParameters.java | 51 +
.../bidi/entities/UserPromptHandler.java | 52 +
.../bidi/entities/UserPromptHandlerType.java | 19 +
.../entities/UserPromptOpenedParameters.java | 60 +
.../bidi/entities/UserPromptResult.java | 31 +
.../bidi/entities/UserPromptType.java | 16 +
.../ruiyun/jvppeteer/bidi/entities/Value.java | 38 +
.../bidi/entities/WaitForOptions.java | 54 +
.../bidi/events/ContextCreatedEvent.java | 82 +
.../bidi/events/NavigationInfoEvent.java | 51 +
.../bidi/events/SharedworkerEvent.java | 15 +
.../jvppeteer/{ => cdp}/core/AXNode.java | 19 +-
.../{ => cdp}/core/Accessibility.java | 11 +-
.../{ => cdp}/core/BrowserFetcher.java | 285 +-
.../{ => cdp}/core/BrowserRunner.java | 169 +-
.../jvppeteer/{ => cdp}/core/CSSCoverage.java | 32 +-
.../Browser.java => cdp/core/CdpBrowser.java} | 254 +-
.../jvppeteer/cdp/core/CdpBrowserContext.java | 157 +
.../ruiyun/jvppeteer/cdp/core/CdpDialog.java | 36 +
.../jvppeteer/cdp/core/CdpElementHandle.java | 164 +
.../ruiyun/jvppeteer/cdp/core/CdpFrame.java | 407 ++
.../jvppeteer/cdp/core/CdpJSHandle.java | 95 +
.../jvppeteer/cdp/core/CdpKeyboard.java | 219 +
.../Mouse.java => cdp/core/CdpMouse.java} | 67 +-
.../ruiyun/jvppeteer/cdp/core/CdpPage.java | 1093 +++++
.../ruiyun/jvppeteer/cdp/core/CdpRequest.java | 321 ++
.../core/CdpResponse.java} | 49 +-
.../Target.java => cdp/core/CdpTarget.java} | 86 +-
.../jvppeteer/cdp/core/CdpTouchHandle.java | 68 +
.../jvppeteer/cdp/core/CdpTouchscreen.java | 47 +
.../jvppeteer/cdp/core/CdpWebWorker.java | 83 +
.../{ => cdp}/core/ChromeTargetManager.java | 110 +-
.../jvppeteer/{ => cdp}/core/Coverage.java | 21 +-
.../jvppeteer/cdp/core/DevToolsTarget.java | 13 +
.../{ => cdp}/core/EmulationManager.java | 54 +-
.../jvppeteer/cdp/core/ExecutionContext.java | 451 ++
.../jvppeteer/{ => cdp}/core/FileChooser.java | 6 +-
.../{ => cdp}/core/FirefoxTargetManager.java | 61 +-
.../{ => cdp}/core/FrameManager.java | 173 +-
.../jvppeteer/{ => cdp}/core/FrameTree.java | 41 +-
.../{ => cdp}/core/FrameTreeEvent.java | 4 +-
.../{ => cdp}/core/IsolatedWorld.java | 74 +-
.../jvppeteer/{ => cdp}/core/JSCoverage.java | 40 +-
.../{ => cdp}/core/LifecycleWatcher.java | 80 +-
.../{ => cdp}/core/NetworkEventManager.java | 21 +-
.../{ => cdp}/core/NetworkManager.java | 194 +-
.../jvppeteer/cdp/core/OtherTarget.java | 11 +
.../jvppeteer/{ => cdp}/core/PageTarget.java | 32 +-
.../jvppeteer/{ => cdp}/core/Puppeteer.java | 92 +-
.../{ => cdp}/core/TargetManager.java | 17 +-
.../jvppeteer/{ => cdp}/core/Tracing.java | 19 +-
.../ruiyun/jvppeteer/cdp/core/WaitTask.java | 171 +
.../{ => cdp}/core/WorkerTarget.java | 16 +-
.../jvppeteer/{ => cdp}/entities/AXNode.java | 2 +-
.../{ => cdp}/entities/AXProperty.java | 2 +-
.../{ => cdp}/entities/AXRelatedNode.java | 2 +-
.../jvppeteer/{ => cdp}/entities/AXValue.java | 2 +-
.../{ => cdp}/entities/AXValueSource.java | 2 +-
.../{ => cdp}/entities/ActiveProperty.java | 2 +-
.../{ => cdp}/entities/AdFrameStatus.java | 2 +-
.../{ => cdp}/entities/AuthChallenge.java | 2 +-
.../entities/AuthChallengeResponse.java | 2 +-
.../{ => cdp}/entities/AutofillData.java | 2 +-
.../jvppeteer/{ => cdp}/entities/AuxData.java | 2 +-
.../jvppeteer/{ => cdp}/entities/Binding.java | 18 +-
.../{ => cdp}/entities/BindingPayload.java | 2 +-
.../entities/BlockedSetCookieWithReason.java | 2 +-
.../{ => cdp}/entities/BoundingBox.java | 3 +-
.../{ => cdp}/entities/BoxModel.java | 2 +-
.../entities/BrowserConnectOptions.java | 32 +-
.../entities/BrowserContextOptions.java | 2 +-
.../BrowserLaunchArgumentOptions.java | 12 +-
.../entities/CSSCoverageOptions.java | 2 +-
.../entities/CSSStyleSheetHeader.java | 2 +-
.../{ => cdp}/entities/CallFrame.java | 2 +-
.../{ => cdp}/entities/ClickOptions.java | 2 +-
.../{ => cdp}/entities/ClientProvider.java | 5 +-
.../{ => cdp}/entities/ConnectOptions.java | 24 +-
.../{ => cdp}/entities/ConsoleMessage.java | 21 +-
.../entities/ConsoleMessageLocation.java | 2 +-
.../cdp/entities/ConsoleMessageType.java | 23 +
.../entities/ContinueRequestOverrides.java | 10 +-
.../jvppeteer/{ => cdp}/entities/Cookie.java | 30 +-
.../jvppeteer/cdp/entities/CookieParam.java | 185 +
.../entities/CookiePartitionKey.java | 2 +-
.../cdp/entities/CookiePriority.java | 12 +
.../cdp/entities/CookieSameSite.java | 7 +
.../cdp/entities/CookieSourceScheme.java | 12 +
.../{ => cdp}/entities/CorsErrorStatus.java | 2 +-
.../{ => cdp}/entities/CoverageEntry.java | 2 +-
.../{ => cdp}/entities/CoveragePoint.java | 2 +-
.../{ => cdp}/entities/CoverageRange.java | 2 +-
.../entities/CpuThrottlingState.java | 2 +-
.../{ => cdp}/entities/Credentials.java | 2 +-
.../{ => cdp}/entities/CreditCard.java | 2 +-
.../{ => cdp}/entities/CustomPreview.java | 2 +-
.../{ => cdp}/entities/DebugInfo.java | 2 +-
.../entities/DefaultBackgroundColorState.java | 2 +-
.../entities/DeleteCookiesRequest.java | 11 +-
.../jvppeteer/{ => cdp}/entities/Device.java | 2 +-
.../entities/DeviceRequestPromptDevice.java | 2 +-
.../{ => cdp}/entities/DialogType.java | 4 +-
.../entities/DisposableStackConsumer.java | 2 +-
.../{ => cdp}/entities/DownloadOptions.java | 12 +-
.../entities/DownloadPolicy.java} | 6 +-
.../{ => cdp}/entities/DownloadState.java | 2 +-
.../{ => cdp}/entities/DragData.java | 2 +-
.../{ => cdp}/entities/DragDataItem.java | 2 +-
.../entities/DragInterceptedEvent.java | 2 +-
.../entities/ElementScreenshotOptions.java | 2 +-
.../{ => cdp}/entities/EmulatedState.java | 2 +-
.../{ => cdp}/entities/EntryPreview.java | 2 +-
.../{ => cdp}/entities/ErrorReasons.java | 2 +-
.../{ => cdp}/entities/EvaluateResponse.java | 2 +-
.../{ => cdp}/entities/EvaluateType.java | 2 +-
.../{ => cdp}/entities/ExceptionDetails.java | 2 +-
.../entities/ExecutionContextDescription.java | 2 +-
.../entities/ExemptedSetCookieWithReason.java | 2 +-
.../{ => cdp}/entities/FetcherOptions.java | 4 +-
.../{ => cdp}/entities/FilterEntry.java | 2 +-
.../entities/FrameAddScriptTagOptions.java | 2 +-
.../entities/FrameAddStyleTagOptions.java | 6 +-
.../{ => cdp}/entities/FramePayload.java | 2 +-
.../{ => cdp}/entities/FunctionCoverage.java | 2 +-
.../{ => cdp}/entities/GeoLocationState.java | 2 +-
.../entities/GeolocationOptions.java | 2 +-
.../entities/GetMetricsResponse.java | 2 +-
.../GetNavigationHistoryResponse.java | 2 +-
.../entities/GetVersionResponse.java | 2 +-
.../{ => cdp}/entities/GoToOptions.java | 7 +-
.../{ => cdp}/entities/HeaderEntry.java | 10 +-
.../entities/IdleOverridesState.java | 2 +-
.../{ => cdp}/entities/ImageType.java | 2 +-
.../{ => cdp}/entities/Initiator.java | 2 +-
.../entities/InterceptResolutionAction.java | 2 +-
.../entities/InterceptResolutionState.java | 2 +-
.../{ => cdp}/entities/Interception.java | 2 +-
.../entities/InternalNetworkConditions.java | 2 +-
.../{ => cdp}/entities/JSCoverageEntry.java | 2 +-
.../{ => cdp}/entities/JSCoverageOptions.java | 2 +-
.../entities/JavascriptEnabledState.java | 2 +-
.../{ => cdp}/entities/KeyDefinition.java | 2 +-
.../{ => cdp}/entities/KeyDescription.java | 2 +-
.../{ => cdp}/entities/KeyDownOptions.java | 2 +-
.../{ => cdp}/entities/KeyPressOptions.java | 2 +-
.../entities/KeyboardTypeOptions.java | 2 +-
.../{ => cdp}/entities/LaunchOptions.java | 32 +-
.../{ => cdp}/entities/LengthUnit.java | 2 +-
.../{ => cdp}/entities/LogEntry.java | 2 +-
.../{ => cdp}/entities/MediaFeature.java | 2 +-
.../entities/MediaFeaturesState.java | 2 +-
.../{ => cdp}/entities/MediaTypeState.java | 2 +-
.../jvppeteer/{ => cdp}/entities/Metric.java | 2 +-
.../jvppeteer/{ => cdp}/entities/Metrics.java | 2 +-
.../{ => cdp}/entities/MouseClickOptions.java | 15 +-
.../cdp/entities/MouseMoveOptions.java | 26 +
.../{ => cdp}/entities/MouseOptions.java | 2 +-
.../{ => cdp}/entities/MouseState.java | 6 +-
.../{ => cdp}/entities/MouseWheelOptions.java | 2 +-
.../{ => cdp}/entities/NavigationEntry.java | 2 +-
.../{ => cdp}/entities/NetworkConditions.java | 2 +-
.../entities/NewDocumentScriptEvaluation.java | 2 +-
.../{ => cdp}/entities/ObjectPreview.java | 2 +-
.../jvppeteer/{ => cdp}/entities/Offset.java | 2 +-
.../{ => cdp}/entities/PDFMargin.java | 2 +-
.../{ => cdp}/entities/PDFOptions.java | 2 +-
.../{ => cdp}/entities/PageMetrics.java | 2 +-
.../{ => cdp}/entities/PaperFormats.java | 2 +-
.../jvppeteer/{ => cdp}/entities/Point.java | 3 +-
.../{ => cdp}/entities/PostDataEntry.java | 2 +-
.../{ => cdp}/entities/PreloadScript.java | 12 +-
.../{ => cdp}/entities/PropertyPreview.java | 2 +-
.../jvppeteer/cdp/entities/Protocol.java | 6 +
.../{ => cdp}/entities/QueuedEventGroup.java | 8 +-
.../jvppeteer/{ => cdp}/entities/RGBA.java | 2 +-
.../jvppeteer/{ => cdp}/entities/Range.java | 2 +-
.../{ => cdp}/entities/RedirectInfo.java | 4 +-
.../{ => cdp}/entities/RemoteAddress.java | 2 +-
.../{ => cdp}/entities/RemoteObject.java | 2 +-
.../{ => cdp}/entities/RequestPayload.java | 2 +-
.../{ => cdp}/entities/ResourceTiming.java | 29 +-
.../{ => cdp}/entities/ResourceType.java | 8 +-
.../entities/ResponseForRequest.java | 2 +-
.../{ => cdp}/entities/ResponsePayload.java | 2 +-
.../entities/ResponseSecurityDetails.java | 4 +-
.../{ => cdp}/entities/RevisionInfo.java | 2 +-
.../{ => cdp}/entities/ScreenCastFormat.java | 2 +-
.../{ => cdp}/entities/ScreenOrientation.java | 2 +-
.../entities/ScreenRecorderOptions.java | 2 +-
.../entities/ScreencastFrameMetadata.java | 2 +-
.../{ => cdp}/entities/ScreencastOptions.java | 2 +-
.../{ => cdp}/entities/ScreenshotClip.java | 3 +-
.../{ => cdp}/entities/ScreenshotOptions.java | 2 +-
.../{ => cdp}/entities/ScriptCoverage.java | 2 +-
.../{ => cdp}/entities/SecurityDetails.java | 2 +-
.../cdp/entities/SelectorParseResult.java | 53 +
.../{ => cdp}/entities/SerializedAXNode.java | 5 +-
.../entities/ServiceWorkerRouterInfo.java | 2 +-
.../entities/SignedCertificateTimestamp.java | 2 +-
.../{ => cdp}/entities/SnapshotOptions.java | 10 +-
.../{ => cdp}/entities/StackTrace.java | 2 +-
.../{ => cdp}/entities/StackTraceId.java | 2 +-
.../entities/TakePreciseCoverageResponse.java | 2 +-
.../{ => cdp}/entities/TargetInfo.java | 2 +-
.../{ => cdp}/entities/TargetType.java | 2 +-
.../{ => cdp}/entities/Timeoutable.java | 2 +-
.../{ => cdp}/entities/Timestamp.java | 2 +-
.../{ => cdp}/entities/TimezoneState.java | 2 +-
.../ruiyun/jvppeteer/cdp/entities/Token.java | 50 +
.../{ => cdp}/entities/TouchPoint.java | 2 +-
.../{ => cdp}/entities/TrustTokenParams.java | 2 +-
.../jvppeteer/{ => cdp}/entities/Updater.java | 4 +-
.../entities/UserAgentBrandVersion.java | 2 +-
.../{ => cdp}/entities/UserAgentMetadata.java | 18 +-
.../{ => cdp}/entities/Viewport.java | 2 +-
.../{ => cdp}/entities/ViewportState.java | 2 +-
.../{ => cdp}/entities/VisionDeficiency.java | 2 +-
.../entities/VisionDeficiencyState.java | 2 +-
.../entities/WaitForNetworkIdleOptions.java | 18 +-
.../{ => cdp}/entities/WaitForOptions.java | 3 +-
.../entities/WaitForSelectorOptions.java | 23 +-
.../cdp/entities/WaitTaskOptions.java | 40 +
.../events/AttachedToTargetEvent.java | 4 +-
.../{ => cdp}/events/AuthRequiredEvent.java | 6 +-
.../{ => cdp}/events/BindingCalledEvent.java | 2 +-
.../events/ConsoleAPICalledEvent.java | 6 +-
.../events/DetachedFromTargetEvent.java | 2 +-
.../events/DeviceRequestPromptedEvent.java | 4 +-
.../events/DownloadProgressEvent.java | 4 +-
.../events/DownloadWillBeginEvent.java | 2 +-
.../{ => cdp}/events/EntryAddedEvent.java | 4 +-
.../events/ExceptionThrownEvent.java | 5 +-
.../events/ExecutionContextCreatedEvent.java | 4 +-
.../ExecutionContextDestroyedEvent.java | 2 +-
.../events/FileChooserOpenedEvent.java | 2 +-
.../{ => cdp}/events/FrameAttachedEvent.java | 4 +-
.../{ => cdp}/events/FrameDetachedEvent.java | 2 +-
.../{ => cdp}/events/FrameNavigatedEvent.java | 4 +-
.../events/FrameStartedLoadingEvent.java | 2 +-
.../events/FrameStoppedLoadingEvent.java | 2 +-
.../events/IsolatedWorldEmitter.java | 4 +-
.../events/JavascriptDialogOpeningEvent.java | 4 +-
.../{ => cdp}/events/LifecycleEvent.java | 2 +-
.../{ => cdp}/events/LoadingFailedEvent.java | 4 +-
.../events/LoadingFinishedEvent.java | 2 +-
.../{ => cdp}/events/MetricsEvent.java | 4 +-
.../events/NavigatedWithinDocumentEvent.java | 2 +-
.../{ => cdp}/events/RequestPausedEvent.java | 6 +-
.../events/RequestServedFromCacheEvent.java | 2 +-
.../events/RequestWillBeSentEvent.java | 8 +-
.../events/ResponseReceivedEvent.java | 4 +-
.../ResponseReceivedExtraInfoEvent.java | 23 +-
.../events/ScreencastFrameEvent.java | 4 +-
.../{ => cdp}/events/ScriptParsedEvent.java | 6 +-
.../events/StyleSheetAddedEvent.java | 4 +-
.../{ => cdp}/events/TargetCreatedEvent.java | 4 +-
.../events/TargetDestroyedEvent.java | 2 +-
.../events/TargetInfoChangedEvent.java | 4 +-
.../events/TracingCompleteEvent.java | 2 +-
.../jvppeteer/common/ARIAQueryHandler.java | 39 +-
.../jvppeteer/common/BrowserRevision.java | 24 +
.../jvppeteer/common/CSSQueryHandler.java | 21 +
.../jvppeteer/common/ChromeEnvironment.java | 12 +-
.../ruiyun/jvppeteer/common/ConsoleAPI.java | 7 +-
.../com/ruiyun/jvppeteer/common/Constant.java | 180 +-
.../jvppeteer/common/DeviceRequestPrompt.java | 16 +-
.../common/DeviceRequestPromptManager.java | 14 +-
.../jvppeteer/common/DisposableStack.java | 40 +
.../jvppeteer/common/FirefoxChannel.java | 2 +-
.../jvppeteer/common/FrameProvider.java | 2 +-
.../jvppeteer/common/PQueryHandler.java | 25 +
.../jvppeteer/common/PierceQueryHandler.java | 25 +
.../jvppeteer/common/PollingOptions.java | 11 +
.../common/PredefinedNetworkConditions.java | 2 +-
.../jvppeteer/common/PrimitiveValue.java | 15 +
.../com/ruiyun/jvppeteer/common/Product.java | 10 +-
.../PuppeteerLifeCycle.java | 10 +-
.../ruiyun/jvppeteer/common/QueryHandler.java | 133 +-
.../jvppeteer/common/QuerySelector.java | 16 +-
.../jvppeteer/common/ScreenRecorder.java | 39 +-
.../ruiyun/jvppeteer/common/TaskManager.java | 39 +-
.../jvppeteer/common/TextQueryHandler.java | 19 +
.../jvppeteer/common/WebPermission.java | 2 -
.../jvppeteer/common/XPathQueryHandler.java | 28 +
.../ruiyun/jvppeteer/core/BrowserContext.java | 196 -
.../ruiyun/jvppeteer/core/DevToolsTarget.java | 13 -
.../com/ruiyun/jvppeteer/core/Dialog.java | 93 -
.../jvppeteer/core/ExecutionContext.java | 459 --
.../java/com/ruiyun/jvppeteer/core/Frame.java | 845 ----
.../com/ruiyun/jvppeteer/core/JSHandle.java | 143 -
.../ruiyun/jvppeteer/core/OtherTarget.java | 11 -
.../java/com/ruiyun/jvppeteer/core/Page.java | 2543 -----------
.../com/ruiyun/jvppeteer/core/PageExtend.java | 65 -
.../java/com/ruiyun/jvppeteer/core/Realm.java | 73 -
.../ruiyun/jvppeteer/core/Touchscreen.java | 93 -
.../com/ruiyun/jvppeteer/core/WaitTask.java | 228 -
.../com/ruiyun/jvppeteer/core/WebWorker.java | 123 -
.../entities/ConsoleMessageType.java | 23 -
.../jvppeteer/entities/LogEntryLevel.java | 14 -
.../jvppeteer/entities/MouseMoveOptions.java | 13 -
.../jvppeteer/entities/WaitTaskOptions.java | 52 -
.../jvppeteer/launch/BrowserLauncher.java | 242 +-
.../jvppeteer/launch/ChromeLauncher.java | 33 +-
.../jvppeteer/launch/FirefoxLauncher.java | 80 +-
.../ruiyun/jvppeteer/transport/Callback.java | 2 +-
.../jvppeteer/transport/CallbackRegistry.java | 17 +-
.../{CDPSession.java => CdpCDPSession.java} | 113 +-
.../{Connection.java => CdpConnection.java} | 599 ++-
.../transport/ConnectionTransport.java | 2 +
.../jvppeteer/transport/PipeTransport.java | 1 +
.../jvppeteer/transport/SessionFactory.java | 2 +
.../transport/WebSocketTransport.java | 42 +-
.../transport/WebSocketTransportFactory.java | 72 +-
.../com/ruiyun/jvppeteer/util/FileUtil.java | 2 -
.../com/ruiyun/jvppeteer/util/Helper.java | 214 +-
.../jvppeteer/util/QueryHandlerUtil.java | 228 +-
.../com/ruiyun/jvppeteer/util/StringUtil.java | 2 -
.../install-chrome-for-testing-linux.sh | 48 +-
.../install-chrome-for-testing-win.ps1 | 67 +-
495 files changed, 24308 insertions(+), 13665 deletions(-)
delete mode 100644 "1.1.5\347\211\210\346\234\254\344\271\213\345\211\215\347\232\204\345\206\205\345\255\230\351\227\256\351\242\230\350\247\243\345\206\263\346\226\271\346\241\210.md"
delete mode 100644 api.md
delete mode 100644 example/src/main/java/com/ruiyun/example/PageExtendExample.java
create mode 100644 example/src/main/resources/META-INF/MANIFEST.MF
rename example/{ => src/main/resources}/simplelogger.properties (85%)
create mode 100644 src/main/java/com/ruiyun/jvppeteer/api/core/Browser.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/api/core/BrowserContext.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/api/core/CDPSession.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/api/core/Connection.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/api/core/Dialog.java
rename src/main/java/com/ruiyun/jvppeteer/{ => api}/core/ElementHandle.java (76%)
rename src/main/java/com/ruiyun/jvppeteer/{events => api/core}/EventEmitter.java (74%)
create mode 100644 src/main/java/com/ruiyun/jvppeteer/api/core/Frame.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/api/core/JSHandle.java
rename src/main/java/com/ruiyun/jvppeteer/{ => api}/core/Keyboard.java (75%)
create mode 100644 src/main/java/com/ruiyun/jvppeteer/api/core/Mouse.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/api/core/Page.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/api/core/Realm.java
rename src/main/java/com/ruiyun/jvppeteer/{ => api}/core/Request.java (53%)
create mode 100644 src/main/java/com/ruiyun/jvppeteer/api/core/Response.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/api/core/Target.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/api/core/TouchHandle.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/api/core/Touchscreen.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/api/core/WebWorker.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/api/events/BrowserContextEvents.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/api/events/BrowserEvents.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/api/events/ConnectionEvents.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/api/events/FrameEvents.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/api/events/PageEvents.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/api/events/TrustedEmitter.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/core/BidiBrowser.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/core/BidiBrowserContext.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/core/BidiBrowserTarget.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/core/BidiCdpSession.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/core/BidiConnection.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/core/BidiDeserializer.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/core/BidiDialog.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/core/BidiElementHandle.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/core/BidiExposeableFunction.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/core/BidiFrame.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/core/BidiFrameRealm.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/core/BidiFrameTarget.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/core/BidiJSHandle.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/core/BidiKeyboard.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/core/BidiLifeCycleWatch.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/core/BidiMouse.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/core/BidiPage.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/core/BidiPageTarget.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/core/BidiRealm.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/core/BidiRealmCore.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/core/BidiRequest.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/core/BidiResponse.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/core/BidiSerializer.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/core/BidiTouchHandle.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/core/BidiTouchscreen.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/core/BidiWebWorker.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/core/BidiWorkerRealm.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/core/BidiWorkerTarget.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/core/BrowserCore.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/core/BrowsingContext.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/core/DedicatedWorkerRealm.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/core/Navigation.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/core/NoneSourceAction.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/core/ReadinessState.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/core/RequestCore.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/core/Session.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/core/SharedWorkerRealm.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/core/UserContext.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/core/UserPrompt.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/core/WindowRealm.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/AddInterceptOptions.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/AddPreloadScriptOptions.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/ArrayLocalValue.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/AuthCredentials.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/AuthRequiredParameters.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/BaseParameters.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/BeforeRequestSentParameters.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/BidiViewport.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/BytesValue.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/CallFunctionOptions.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/Capabilities.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/CapabilitiesRequest.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/CapabilityRequest.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/CaptureScreenshotOptions.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/ChannelProperties.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/ChannelValue.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/ClipRectangle.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/ClosedEvent.java
rename src/main/java/com/ruiyun/jvppeteer/{entities/CookieParam.java => bidi/entities/Cookie.java} (51%)
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/CookieFilter.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/CreateBrowsingContextOptions.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/CreateType.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/EvaluateOptions.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/EvaluateResult.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/ExceptionDetails.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/FetchErrorParameters.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/FetchTimingInfo.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/GetCookiesOptions.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/HandleUserPromptOptions.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/Header.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/ImageFormat.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/Initiator.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/InputId.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/InterceptPhase.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/LocalValue.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/LogEntry.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/MessageParameters.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/NavigationInfo.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/NewResult.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/Orientation.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/Origin.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/PartialCookie.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/PartitionDescriptor.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/PermissionOverride.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/PermissionState.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/PointerCommonProperties.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/PointerParameters.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/PointerType.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/PrintMarginParameters.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/PrintOptions.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/PrintPageParameters.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/ProxyConfiguration.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/RealmDestroyedParameters.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/RealmInfo.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/RealmType.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/ReloadParameters.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/RemoteReference.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/RemoteValue.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/RequestData.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/ResponseCompletedParameters.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/ResponseContent.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/ResponseData.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/ResponseStartedParameters.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/ResultOwnership.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/SameSite.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/SerializationOptions.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/SetViewportParameters.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/SharedReference.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/Source.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/SourceActions.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/SourceActionsType.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/SupportedWebDriverCapabilities.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/SupportedWebDriverCapability.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/Target.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/UrlPattern.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/UserPromptClosedParameters.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/UserPromptHandler.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/UserPromptHandlerType.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/UserPromptOpenedParameters.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/UserPromptResult.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/UserPromptType.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/Value.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/entities/WaitForOptions.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/events/ContextCreatedEvent.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/events/NavigationInfoEvent.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/bidi/events/SharedworkerEvent.java
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/core/AXNode.java (95%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/core/Accessibility.java (92%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/core/BrowserFetcher.java (78%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/core/BrowserRunner.java (55%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/core/CSSCoverage.java (79%)
rename src/main/java/com/ruiyun/jvppeteer/{core/Browser.java => cdp/core/CdpBrowser.java} (57%)
create mode 100644 src/main/java/com/ruiyun/jvppeteer/cdp/core/CdpBrowserContext.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/cdp/core/CdpDialog.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/cdp/core/CdpElementHandle.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/cdp/core/CdpFrame.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/cdp/core/CdpJSHandle.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/cdp/core/CdpKeyboard.java
rename src/main/java/com/ruiyun/jvppeteer/{core/Mouse.java => cdp/core/CdpMouse.java} (89%)
create mode 100644 src/main/java/com/ruiyun/jvppeteer/cdp/core/CdpPage.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/cdp/core/CdpRequest.java
rename src/main/java/com/ruiyun/jvppeteer/{core/Response.java => cdp/core/CdpResponse.java} (82%)
rename src/main/java/com/ruiyun/jvppeteer/{core/Target.java => cdp/core/CdpTarget.java} (75%)
create mode 100644 src/main/java/com/ruiyun/jvppeteer/cdp/core/CdpTouchHandle.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/cdp/core/CdpTouchscreen.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/cdp/core/CdpWebWorker.java
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/core/ChromeTargetManager.java (78%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/core/Coverage.java (88%)
create mode 100644 src/main/java/com/ruiyun/jvppeteer/cdp/core/DevToolsTarget.java
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/core/EmulationManager.java (88%)
create mode 100644 src/main/java/com/ruiyun/jvppeteer/cdp/core/ExecutionContext.java
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/core/FileChooser.java (90%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/core/FirefoxTargetManager.java (72%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/core/FrameManager.java (76%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/core/FrameTree.java (70%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/core/FrameTreeEvent.java (83%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/core/IsolatedWorld.java (75%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/core/JSCoverage.java (81%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/core/LifecycleWatcher.java (69%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/core/NetworkEventManager.java (90%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/core/NetworkManager.java (73%)
create mode 100644 src/main/java/com/ruiyun/jvppeteer/cdp/core/OtherTarget.java
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/core/PageTarget.java (65%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/core/Puppeteer.java (72%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/core/TargetManager.java (66%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/core/Tracing.java (89%)
create mode 100644 src/main/java/com/ruiyun/jvppeteer/cdp/core/WaitTask.java
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/core/WorkerTarget.java (50%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/AXNode.java (98%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/AXProperty.java (95%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/AXRelatedNode.java (94%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/AXValue.java (97%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/AXValueSource.java (98%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/ActiveProperty.java (86%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/AdFrameStatus.java (94%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/AuthChallenge.java (96%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/AuthChallengeResponse.java (95%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/AutofillData.java (89%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/AuxData.java (92%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/Binding.java (92%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/BindingPayload.java (95%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/BlockedSetCookieWithReason.java (94%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/BoundingBox.java (94%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/BoxModel.java (97%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/BrowserConnectOptions.java (72%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/BrowserContextOptions.java (96%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/BrowserLaunchArgumentOptions.java (80%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/CSSCoverageOptions.java (89%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/CSSStyleSheetHeader.java (99%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/CallFrame.java (96%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/ClickOptions.java (88%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/ClientProvider.java (60%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/ConnectOptions.java (57%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/ConsoleMessage.java (80%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/ConsoleMessageLocation.java (97%)
create mode 100644 src/main/java/com/ruiyun/jvppeteer/cdp/entities/ConsoleMessageType.java
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/ContinueRequestOverrides.java (74%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/Cookie.java (85%)
create mode 100644 src/main/java/com/ruiyun/jvppeteer/cdp/entities/CookieParam.java
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/CookiePartitionKey.java (94%)
create mode 100644 src/main/java/com/ruiyun/jvppeteer/cdp/entities/CookiePriority.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/cdp/entities/CookieSameSite.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/cdp/entities/CookieSourceScheme.java
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/CorsErrorStatus.java (91%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/CoverageEntry.java (95%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/CoveragePoint.java (94%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/CoverageRange.java (96%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/CpuThrottlingState.java (90%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/Credentials.java (93%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/CreditCard.java (96%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/CustomPreview.java (95%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/DebugInfo.java (94%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/DefaultBackgroundColorState.java (92%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/DeleteCookiesRequest.java (85%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/Device.java (99%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/DeviceRequestPromptDevice.java (93%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/DialogType.java (86%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/DisposableStackConsumer.java (67%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/DownloadOptions.java (80%)
rename src/main/java/com/ruiyun/jvppeteer/{entities/DownloadBehavior.java => cdp/entities/DownloadPolicy.java} (69%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/DownloadState.java (83%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/DragData.java (96%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/DragDataItem.java (96%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/DragInterceptedEvent.java (82%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/ElementScreenshotOptions.java (88%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/EmulatedState.java (94%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/EntryPreview.java (92%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/ErrorReasons.java (94%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/EvaluateResponse.java (91%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/EvaluateType.java (76%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/ExceptionDetails.java (98%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/ExecutionContextDescription.java (97%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/ExemptedSetCookieWithReason.java (95%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/FetcherOptions.java (97%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/FilterEntry.java (92%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/FrameAddScriptTagOptions.java (96%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/FrameAddStyleTagOptions.java (82%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/FramePayload.java (99%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/FunctionCoverage.java (96%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/GeoLocationState.java (93%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/GeolocationOptions.java (96%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/GetMetricsResponse.java (85%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/GetNavigationHistoryResponse.java (93%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/GetVersionResponse.java (95%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/GoToOptions.java (89%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/HeaderEntry.java (69%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/IdleOverridesState.java (96%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/ImageType.java (79%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/Initiator.java (97%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/InterceptResolutionAction.java (89%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/InterceptResolutionState.java (94%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/Interception.java (97%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/InternalNetworkConditions.java (92%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/JSCoverageEntry.java (95%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/JSCoverageOptions.java (98%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/JavascriptEnabledState.java (94%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/KeyDefinition.java (98%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/KeyDescription.java (96%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/KeyDownOptions.java (91%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/KeyPressOptions.java (95%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/KeyboardTypeOptions.java (81%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/LaunchOptions.java (92%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/LengthUnit.java (83%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/LogEntry.java (98%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/MediaFeature.java (93%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/MediaFeaturesState.java (94%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/MediaTypeState.java (92%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/Metric.java (92%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/Metrics.java (99%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/MouseClickOptions.java (55%)
create mode 100644 src/main/java/com/ruiyun/jvppeteer/cdp/entities/MouseMoveOptions.java
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/MouseOptions.java (92%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/MouseState.java (69%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/MouseWheelOptions.java (93%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/NavigationEntry.java (97%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/NetworkConditions.java (96%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/NewDocumentScriptEvaluation.java (90%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/ObjectPreview.java (97%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/Offset.java (87%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/PDFMargin.java (94%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/PDFOptions.java (99%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/PageMetrics.java (92%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/PaperFormats.java (94%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/Point.java (90%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/PostDataEntry.java (81%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/PreloadScript.java (54%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/PropertyPreview.java (97%)
create mode 100644 src/main/java/com/ruiyun/jvppeteer/cdp/entities/Protocol.java
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/QueuedEventGroup.java (80%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/RGBA.java (96%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/Range.java (93%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/RedirectInfo.java (81%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/RemoteAddress.java (91%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/RemoteObject.java (98%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/RequestPayload.java (99%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/ResourceTiming.java (82%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/ResourceType.java (81%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/ResponseForRequest.java (94%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/ResponsePayload.java (99%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/ResponseSecurityDetails.java (93%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/RevisionInfo.java (97%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/ScreenCastFormat.java (84%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/ScreenOrientation.java (94%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/ScreenRecorderOptions.java (97%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/ScreencastFrameMetadata.java (98%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/ScreencastOptions.java (97%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/ScreenshotClip.java (92%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/ScreenshotOptions.java (98%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/ScriptCoverage.java (96%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/SecurityDetails.java (99%)
create mode 100644 src/main/java/com/ruiyun/jvppeteer/cdp/entities/SelectorParseResult.java
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/SerializedAXNode.java (98%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/ServiceWorkerRouterInfo.java (94%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/SignedCertificateTimestamp.java (98%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/SnapshotOptions.java (69%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/StackTrace.java (96%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/StackTraceId.java (93%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/TakePreciseCoverageResponse.java (88%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/TargetInfo.java (97%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/TargetType.java (91%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/Timeoutable.java (91%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/Timestamp.java (88%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/TimezoneState.java (91%)
create mode 100644 src/main/java/com/ruiyun/jvppeteer/cdp/entities/Token.java
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/TouchPoint.java (97%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/TrustTokenParams.java (93%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/Updater.java (52%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/UserAgentBrandVersion.java (94%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/UserAgentMetadata.java (78%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/Viewport.java (98%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/ViewportState.java (89%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/VisionDeficiency.java (95%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/VisionDeficiencyState.java (94%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/WaitForNetworkIdleOptions.java (71%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/WaitForOptions.java (93%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/entities/WaitForSelectorOptions.java (66%)
create mode 100644 src/main/java/com/ruiyun/jvppeteer/cdp/entities/WaitTaskOptions.java
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/events/AttachedToTargetEvent.java (93%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/events/AuthRequiredEvent.java (91%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/events/BindingCalledEvent.java (94%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/events/ConsoleAPICalledEvent.java (93%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/events/DetachedFromTargetEvent.java (95%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/events/DeviceRequestPromptedEvent.java (88%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/events/DownloadProgressEvent.java (92%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/events/DownloadWillBeginEvent.java (97%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/events/EntryAddedEvent.java (82%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/events/ExceptionThrownEvent.java (86%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/events/ExecutionContextCreatedEvent.java (78%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/events/ExecutionContextDestroyedEvent.java (90%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/events/FileChooserOpenedEvent.java (95%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/events/FrameAttachedEvent.java (90%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/events/FrameDetachedEvent.java (93%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/events/FrameNavigatedEvent.java (85%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/events/FrameStartedLoadingEvent.java (89%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/events/FrameStoppedLoadingEvent.java (87%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/events/IsolatedWorldEmitter.java (84%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/events/JavascriptDialogOpeningEvent.java (94%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/events/LifecycleEvent.java (96%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/events/LoadingFailedEvent.java (95%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/events/LoadingFinishedEvent.java (95%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/events/MetricsEvent.java (85%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/events/NavigatedWithinDocumentEvent.java (93%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/events/RequestPausedEvent.java (96%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/events/RequestServedFromCacheEvent.java (89%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/events/RequestWillBeSentEvent.java (94%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/events/ResponseReceivedEvent.java (95%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/events/ResponseReceivedExtraInfoEvent.java (75%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/events/ScreencastFrameEvent.java (88%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/events/ScriptParsedEvent.java (97%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/events/StyleSheetAddedEvent.java (74%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/events/TargetCreatedEvent.java (76%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/events/TargetDestroyedEvent.java (84%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/events/TargetInfoChangedEvent.java (80%)
rename src/main/java/com/ruiyun/jvppeteer/{ => cdp}/events/TracingCompleteEvent.java (92%)
create mode 100644 src/main/java/com/ruiyun/jvppeteer/common/BrowserRevision.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/common/CSSQueryHandler.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/common/DisposableStack.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/common/PQueryHandler.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/common/PierceQueryHandler.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/common/PollingOptions.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/common/PrimitiveValue.java
rename src/main/java/com/ruiyun/jvppeteer/{entities => common}/PuppeteerLifeCycle.java (81%)
create mode 100644 src/main/java/com/ruiyun/jvppeteer/common/TextQueryHandler.java
create mode 100644 src/main/java/com/ruiyun/jvppeteer/common/XPathQueryHandler.java
delete mode 100644 src/main/java/com/ruiyun/jvppeteer/core/BrowserContext.java
delete mode 100644 src/main/java/com/ruiyun/jvppeteer/core/DevToolsTarget.java
delete mode 100644 src/main/java/com/ruiyun/jvppeteer/core/Dialog.java
delete mode 100644 src/main/java/com/ruiyun/jvppeteer/core/ExecutionContext.java
delete mode 100644 src/main/java/com/ruiyun/jvppeteer/core/Frame.java
delete mode 100644 src/main/java/com/ruiyun/jvppeteer/core/JSHandle.java
delete mode 100644 src/main/java/com/ruiyun/jvppeteer/core/OtherTarget.java
delete mode 100644 src/main/java/com/ruiyun/jvppeteer/core/Page.java
delete mode 100644 src/main/java/com/ruiyun/jvppeteer/core/PageExtend.java
delete mode 100644 src/main/java/com/ruiyun/jvppeteer/core/Realm.java
delete mode 100644 src/main/java/com/ruiyun/jvppeteer/core/Touchscreen.java
delete mode 100644 src/main/java/com/ruiyun/jvppeteer/core/WaitTask.java
delete mode 100644 src/main/java/com/ruiyun/jvppeteer/core/WebWorker.java
delete mode 100644 src/main/java/com/ruiyun/jvppeteer/entities/ConsoleMessageType.java
delete mode 100644 src/main/java/com/ruiyun/jvppeteer/entities/LogEntryLevel.java
delete mode 100644 src/main/java/com/ruiyun/jvppeteer/entities/MouseMoveOptions.java
delete mode 100644 src/main/java/com/ruiyun/jvppeteer/entities/WaitTaskOptions.java
rename src/main/java/com/ruiyun/jvppeteer/transport/{CDPSession.java => CdpCDPSession.java} (51%)
rename src/main/java/com/ruiyun/jvppeteer/transport/{Connection.java => CdpConnection.java} (60%)
diff --git a/.gitignore b/.gitignore
index 7ea0acb9..c13cd45e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,7 +2,7 @@
*.class
.settings/**
.idea/**
-.local-browser/**
+.local-cdpBrowser/**
*.png
*.jpg
target/**
diff --git "a/1.1.5\347\211\210\346\234\254\344\271\213\345\211\215\347\232\204\345\206\205\345\255\230\351\227\256\351\242\230\350\247\243\345\206\263\346\226\271\346\241\210.md" "b/1.1.5\347\211\210\346\234\254\344\271\213\345\211\215\347\232\204\345\206\205\345\255\230\351\227\256\351\242\230\350\247\243\345\206\263\346\226\271\346\241\210.md"
deleted file mode 100644
index 70048096..00000000
--- "a/1.1.5\347\211\210\346\234\254\344\271\213\345\211\215\347\232\204\345\206\205\345\255\230\351\227\256\351\242\230\350\247\243\345\206\263\346\226\271\346\241\210.md"
+++ /dev/null
@@ -1,222 +0,0 @@
-
-
-# 解决思路:
-
-通过获取 PID ,执行shell命令杀死进程。
-
-如果单单在需要 LINUX 上获取 PID,可以不导入 JNA 包,LINUX上获取 PID 可以 通过反射得到。
-
-更高版本的 JDK ,通过JDK 自带的方法就能获取。
-
-## step 1 导入jna包
-
-```xml
-
- net.java.dev.jna
- jna
- 5.13.0
-
-```
-## step 2 创建内部接口
-```java
-public interface Kernel32 extends StdCallLibrary {
- Kernel32 INSTANCE = Native.load("kernel32", Kernel32.class);
- long GetProcessId(Long hProcess);
-}
-```
-
-## step 3 写获取进程id的方法
-
-````java
- import com.ruiyun.jvppeteer.core.Browser;
-
-/**
- * 获取进程id
- * @param process chrome进程 可以通过{@link com.ruiyun.jvppeteer.core.Browser#process()} 获取}
- * @return 进程id
- */
-public static String getProcessId(Process process) {
- long pid = -1;
- Field field;
- if (Platform.isWindows()) {
- try {
- field = process.getClass().getDeclaredField("handle");
- field.setAccessible(true);
- pid = BrowserRunner.Kernel32.INSTANCE.GetProcessId((Long) field.get(process));
- } catch (Exception e) {
- LOGGER.error("Failed to get processId on Windows platform.", e);
- }
- } else if (Platform.isLinux() || Platform.isAIX()) {
- try {
- String version = System.getProperty("java.version");
- double jdkversion = Double.parseDouble(version.substring(0, 3));
- Class> clazz;
- //如果生产环境是jdk8,就不用if判断了
- if (jdkversion <= 1.8) {
- clazz = Class.forName("java.lang.UNIXProcess");
- } else {
- clazz = Class.forName("java.lang.ProcessImpl");
- }
- field = clazz.getDeclaredField("pid");
- field.setAccessible(true);
- pid = (Integer) field.get(process);
- } catch (Throwable e) {
- LOGGER.error("Failed to get processId on Linux or Aix platform.", e);
- }
- }
- return String.valueOf(pid);
-}
-````
-## step 4 通过kill 命令杀死进程
-
-```java
-/**
- * kill 掉浏览器进程
- */
-public boolean kill() {
- try {
- String pid = pidMap.get(this.process);
- if("-1".equals(pid)){
- LOGGER.warn("Chrome process pid is -1,will not use kill cmd");
- return false;
- }
- if(StringUtil.isEmpty(pid) ){
- LOGGER.warn("Chrome process pid is empty,will not use kill cmd");
- return false;
- }
- Process exec;
- String command = "";
- if (Platform.isWindows()) {
- command = "cmd.exe /c taskkill /PID " + pid + " /F /T ";
- } else if (Platform.isLinux() || Platform.isAIX()) {
- command = "kill -9 " + pid;
- }
- LOGGER.info("kill chrome process by pid,command: kill -9 {}", pid);
- exec = Runtime.getRuntime().exec(new String[]{"/bin/sh","-c",command});
- return exec.waitFor(Constant.DEFAULT_TIMEOUT, TimeUnit.MILLISECONDS);
- } catch (Exception e) {
- LOGGER.error("kill chrome process error ", e);
- return false;
- }
-}
-```
-## 完整代码示例
-
-```java
-
-package com.ruiyun.example;
-
-import com.ruiyun.jvppeteer.common.Constant;
-import com.ruiyun.jvppeteer.core.Puppeteer;
-import com.ruiyun.jvppeteer.core.Browser;
-import com.ruiyun.jvppeteer.core.BrowserRunner;
-import com.ruiyun.jvppeteer.core.Page;
-import com.ruiyun.jvppeteer.entities.LaunchOptions;
-import com.ruiyun.jvppeteer.util.StringUtil;
-import com.sun.jna.Native;
-import com.sun.jna.Platform;
-import com.sun.jna.win32.StdCallLibrary;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.IOException;
-import java.lang.reflect.Field;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.concurrent.TimeUnit;
-
-public class KillExample {
-
- private static final Logger LOGGER = LoggerFactory.getLogger(KillExample.class);
- /**
- * 多个browser的时候用pids储存pid
- */
- private static Map pids = new HashMap<>();
-
- public static void main(String[] args) throws IOException, InterruptedException {
- LaunchOptions launchOptions = new LaunchOptionsBuilder().withExecutablePath("C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe").withIgnoreDefaultArgs(Collections.singletonList("--enable-automation")).withHeadless(false).build();
- Browser browser = Puppeteer.launch(launchOptions);
- Page page = browser.newPage();
- page.goTo("https://www.baidu.com/?tn=98012088_10_dg&ch=3");
- Process process = browser.process();
- String processId = getProcessId(process);
- KillExample.LOGGER.info("process pid {}", processId);
- // 做一些其他操作
-
-
- browser.close(); //可以关闭websocket连接
- kill(processId);
- }
-
- public interface Kernel32 extends StdCallLibrary {
- Kernel32 INSTANCE = Native.load("kernel32", Kernel32.class);
-
- long GetProcessId(Long hProcess);
- }
-
- public static String getProcessId(Process process) {
- long pid = -1;
- Field field;
- if (Platform.isWindows()) {
- try {
- field = process.getClass().getDeclaredField("handle");
- field.setAccessible(true);
- pid = KillExample.Kernel32.INSTANCE.GetProcessId((Long) field.get(process));
- } catch (Exception e) {
- KillExample.LOGGER.error("Failed to get processId on Windows platform.", e);
- }
- } else if (Platform.isLinux() || Platform.isAIX()) {
- try {
- String version = System.getProperty("java.version");
- double jdkversion = Double.parseDouble(version.substring(0, 3));
- Class> clazz;
- //如果生产环境是jdk8,就不用if判断了
- if (jdkversion <= 1.8) {
- clazz = Class.forName("java.lang.UNIXProcess");
- } else {
- clazz = Class.forName("java.lang.ProcessImpl");
- }
- field = clazz.getDeclaredField("pid");
- field.setAccessible(true);
- pid = (Integer) field.get(process);
- } catch (Throwable e) {
- KillExample.LOGGER.error("Failed to get processId on Linux or Aix platform.", e);
- }
- }
- return String.valueOf(pid);
- }
-
- public static boolean kill(String pid) {
- try {
- if ("-1".equals(pid)) {
- LOGGER.warn("Chrome process pid is -1,will not use kill cmd");
- return false;
- }
- if (StringUtil.isEmpty(pid)) {
- LOGGER.warn("Chrome process pid is empty,will not use kill cmd");
- return false;
- }
- Process exec = null;
- String command;
- if (Platform.isWindows()) {
- command = "cmd.exe /c taskkill /PID " + pid + " /F /T ";
- exec = Runtime.getRuntime().exec(command);
- } else if (Platform.isLinux() || Platform.isAIX()) {
- command = "kill -9 " + pid;
- exec = Runtime.getRuntime().exec(new String[]{"/bin/sh", "-c", command});
- }
- if (exec != null) {
- return exec.waitFor(Constant.DEFAULT_TIMEOUT, TimeUnit.MILLISECONDS);
- }
- } catch (Exception e) {
- LOGGER.error("kill chrome process error ", e);
- return false;
- }
- return false;
- }
-}
-
-```
-
-
diff --git a/README.md b/README.md
index d96271a3..c9905edd 100644
--- a/README.md
+++ b/README.md
@@ -4,21 +4,13 @@
# Jvppeteer
-
+
+# **Java API For Chrome and Firefox**
-## 注意
->通过maven导入的jar包,1.1.5及之前的版本,都存在linux上杀不死chrome的bug,可以通过 1.1.5版本之前的内存问题解决方案 自行解决,仓库的代码已经将解决方案代码加上了,拉取下来打jar也可以用。
-
-**本库的灵感来自 [Puppeteer(Node.js)](https://github.com/puppeteer/puppeteer), API 也与其基本上保持一致,做这个库是为了方便使用 Java 操控 [用于测试的Chrome](https://googlechromelabs.github.io/chrome-for-testing/#stable) (即Chrome for Testing,下面简称 Chrome)或 Chromium**
-
-
-
-
- >Jvppeteer 通过 [DevTools](https://chromedevtools.github.io/devtools-protocol/) 控制 Chromium 或 Chrome。
- >默认情况下,以 headless (无界面)模式运行,也可以通过配置运行'有界面'模式。
+Jvppeteer 通过 [DevTools](https://chromedevtools.github.io/devtools-protocol/) and [WebDriver](https://pptr.nodejs.cn/webdriver-bidi) 控制 Chrome for Testing(下面简称 Chrome)或 Firefox。目前,Jvppeteer 仅支持通过 [DevTools](https://chromedevtools.github.io/devtools-protocol/) 控制 Chrome、默认通过 [WebDriver](https://pptr.nodejs.cn/webdriver-bidi) 控制 Firefox。 默认情况下,以 headless (无 UI)模式运行,也可以通过配置运行'有UI'模式。
你可以在浏览器中手动执行的绝大多数操作都可以使用 Jvppeteer 来完成! 下面是一些示例:
@@ -63,7 +55,7 @@ compile "io.github.fanyong920:jvppeteer:2.2.5"
该库使用 [SLF4J](https://www.slf4j.org/) 进行日志记录,并且不附带任何默认日志记录实现。
-调试程序将日志级别设置为 TRACE。
+调试程序将日志级别设置为 Debug。
#### 独立 jar
@@ -112,7 +104,7 @@ compile "io.github.fanyong920:jvppeteer:2.2.5"
Jvpeteer 提供 Chrome、Chromium、ChromeDriver、Chrome Headless Shell 四种浏览器的下载功能。
-下载 Chromium、ChromeDriver、Chrome Headless Shell 必须明确下载版本,Chrome 有默认版本,存放在Constant#VERSION 中。
+下载 Chromium、ChromeDriver、Chrome Headless Shell 必须明确下载版本,Chrome 有默认版本,存放在BrowserRevision.class 中。
关于下载浏览器的版本选择,可以浏览一下这两个网页:[Chrome for Testing availability](https://googlechromelabs.github.io/chrome-for-testing/#stable) 与 [JSON API endpoints](https://github.com/GoogleChromeLabs/chrome-for-testing)
@@ -124,8 +116,9 @@ Jvpeteer 提供 Chrome、Chromium、ChromeDriver、Chrome Headless Shell 四种
下表提供了 Jvppeteer 版本与绑定的浏览器版本之间的映射。如果没有列出完全匹配的 Jvppeteer 版本,则支持的浏览器版本是紧接在前的版本:
-| 2.2.0--2.2.5 | [Chrome for Testing](https://googlechromelabs.github.io/chrome-for-testing/#stable) 130.0.6723.58 |
+| 3.0.0 | [Chrome for Testing](https://googlechromelabs.github.io/chrome-for-testing/#stable) 131.0.6778.87 & Firefox stable_133.0 |
| :----------: | :----------------------------------------------------------: |
+| 2.2.0--2.2.5 | [Chrome for Testing](https://googlechromelabs.github.io/chrome-for-testing/#stable) 130.0.6723.58 |
| 2.1.2 | [Chrome for Testing](https://googlechromelabs.github.io/chrome-for-testing/#stable) 128.0.6613.137 |
| 2.1.1 | [Chrome for Testing](https://googlechromelabs.github.io/chrome-for-testing/#stable) 128.0.6613.137 |
| 2.1.0 | [Chrome for Testing](https://googlechromelabs.github.io/chrome-for-testing/#stable) 128.0.6613.137 |
@@ -153,9 +146,9 @@ Jvpeteer 提供 Chrome、Chromium、ChromeDriver、Chrome Headless Shell 四种
使用浏览器后,必须关闭它,使用 Browser.close() 关闭。
```java
- Browser browser = Puppeteer.launch();
- Page page = browser.newPage();
- browser.close();
+ Browser cdpBrowser = Puppeteer.launch();
+ Page page = cdpBrowser.newPage();
+ cdpBrowser.close();
```
#### 4、浏览器上下文
@@ -163,9 +156,9 @@ Jvpeteer 提供 Chrome、Chromium、ChromeDriver、Chrome Headless Shell 四种
如果你需要隔离自动化任务,请使用 BrowserContexts。Cookie 和本地存储不在浏览器上下文之间共享。
```java
- Browser browser = Puppeteer.launch(launchOptions);
- BrowserContext defaultBrowserContext = browser.defaultBrowserContext();
- Page page = defaultBrowserContext.newPage();
+ Browser cdpBrowser = Puppeteer.launch(launchOptions);
+ BrowserContext defaultCdpBrowserContext = cdpBrowser.defaultCdpBrowserContext();
+ Page page = defaultCdpBrowserContext.newPage();
new Thread(() -> {
try {
page.evaluate("() => window.open('https://www.example.com/')");
@@ -173,48 +166,48 @@ Jvpeteer 提供 Chrome、Chromium、ChromeDriver、Chrome Headless Shell 四种
throw new RuntimeException(e);
}
}).start();
- Target target1 = defaultBrowserContext.waitForTarget(target -> target.url().equals("https://www.example.com/"));
+ Target target1 = defaultCdpBrowserContext.waitForTarget(target -> target.url().equals("https://www.example.com/"));
System.out.println("target1:" + target1.url());
- List pages = defaultBrowserContext.pages();
+ List pages = defaultCdpBrowserContext.pages();
System.out.println("size1:" + pages.size());
- defaultBrowserContext.newPage();
- System.out.println("size2:" + defaultBrowserContext.pages().size());
- List targets = defaultBrowserContext.targets();
+ defaultCdpBrowserContext.newPage();
+ System.out.println("size2:" + defaultCdpBrowserContext.pages().size());
+ List targets = defaultCdpBrowserContext.targets();
for (Target target : targets) {
System.out.println("all target forEach:(" + target.type() + ":" + target.url() + ")");
}
- BrowserContext browserContext = browser.createBrowserContext();
- Page page1 = browserContext.newPage();
- Browser browser1 = browserContext.browser();
- System.out.println("broswer equals:" + (browser1 == browser));
- browserContext.overridePermissions("https://www.baidu.com", WebPermission.GEOLOCATION);
+ BrowserContext cdpBrowserContext = cdpBrowser.createBrowserContext();
+ Page page1 = cdpBrowserContext.newPage();
+ Browser cdpBrowser1 = cdpBrowserContext.cdpBrowser();
+ System.out.println("broswer equals:" + (cdpBrowser1 == cdpBrowser));
+ cdpBrowserContext.overridePermissions("https://www.baidu.com", WebPermission.GEOLOCATION);
page1.goTo("https://www.baidu.com");
- browserContext.close();
- System.out.println("close: " + browserContext.closed());
+ cdpBrowserContext.close();
+ System.out.println("close: " + cdpBrowserContext.closed());
//默认浏览器不能关闭
- defaultBrowserContext.close();
+ defaultCdpBrowserContext.close();
Thread.sleep(15000);
- browser.close();
+ cdpBrowser.close();
```
在浏览器上下文中,你可以打开一个新的页面,可以获得浏览器上下文的所有页面,可以通过关闭 浏览器上下文 来关闭 对应的所有页面,也可以给浏览器上下文授予独特的权限。**提醒 :创建多个浏览器上下文比创建多个浏览器好 **
#### 5、连接到远程的浏览器
-如果你在 Jvppeteer 之外打开了一个新的浏览器,你可以用 Puppeteer.connect() 方法连接,连接远程的浏览器需要 URL,该 URL 可以是 Websocket URL(格式是 ws://HOST:PORT/devtools/browser/),也可以是 Browser URL (格式是 http://HOST:PORT )。
+如果你在 Jvppeteer 之外打开了一个新的浏览器,你可以用 Puppeteer.connect() 方法连接,连接远程的浏览器需要 URL,该 URL 可以是 Websocket URL(格式是 ws://HOST:PORT/devtools/cdpBrowser/),也可以是 Browser URL (格式是 http://HOST:PORT )。
在 Browser URL 中的 PORT 是 debuggingPort,在浏览器启动时候加上参数:-remote-debugging-port=xxxx,debuggingPort 即 xxxx。
Browser URL 后加上 /json/version,格式是:http://HOST:PORT/json/version 可以获取到 WebSocket URL
```java
- String wsEndpoint = browser.wsEndpoint();
- browser.disconnect();
+ String wsEndpoint = cdpBrowser.wsEndpoint();
+ cdpBrowser.disconnect();
//ws连接
- Browser wsBrowser = Puppeteer.connect(wsEndpoint);
- wsBrowser.disconnect();
+ Browser wsCdpBrowser = Puppeteer.connect(wsEndpoint);
+ wsCdpBrowser.disconnect();
//url连接 http://host:port 因为启动时候配置DebuggingPort=9222 所以url = localhost:9222
- Browser urlBrowser = Puppeteer.connect("http://localhost:9222");
+ Browser urlCdpBrowser = Puppeteer.connect("http://localhost:9222");
```
#### 6、页面打印PDF
@@ -227,8 +220,8 @@ Browser URL 后加上 /json/version,格式是:http://HOST:PORT/json/version
ArrayList args = new ArrayList<>();//添加一些额外的启动参数
args.add("--no-sandbox");//pdf必须添加这个参数,不然无法打印,具体看这里https://github.com/puppeteer/puppeteer/issues/12470
launchOptions.setArgs(args);
- Browser browser = Puppeteer.launch(launchOptions);
- Page page = browser.newPage();
+ Browser cdpBrowser = Puppeteer.launch(launchOptions);
+ Page page = cdpBrowser.newPage();
GoToOptions goToOptions = new GoToOptions();
goToOptions.setWaitUntil(Collections.singletonList(PuppeteerLifeCycle.NETWORKIDLE));
page.goTo("https://www.baidu.com/?tn=68018901_16_pg",goToOptions);
@@ -241,7 +234,7 @@ Browser URL 后加上 /json/version,格式是:http://HOST:PORT/json/version
pdfOptions.setScale(1.1);//缩放比例1.1
page.pdf(pdfOptions);
//关闭浏览器
- browser.close();
+ cdpBrowser.close();
```
默认情况下,Page.pdf() 等待字体加载。
@@ -253,8 +246,8 @@ Browser URL 后加上 /json/version,格式是:http://HOST:PORT/json/version
```java
@Test
public void test3() throws Exception {
- Browser browser = Puppeteer.launch(launchOptions);
- Page page = browser.newPage();
+ Browser cdpBrowser = Puppeteer.launch(launchOptions);
+ Page page = cdpBrowser.newPage();
page.goTo("https://www.baidu.com/?tn=68018901_16_pg");
ScreenshotOptions screenshotOptions = new ScreenshotOptions();
screenshotOptions.setPath("baidu.png");
@@ -264,13 +257,13 @@ Browser URL 后加上 /json/version,格式是:http://HOST:PORT/json/version
//截图的更多
screenshotOptions.setCaptureBeyondViewport(true);
page.screenshot(screenshotOptions);
- browser.close();
+ cdpBrowser.close();
}
@Test
public void test4() throws Exception {
- Browser browser = Puppeteer.launch(launchOptions);
- Page page = browser.newPage();
+ Browser cdpBrowser = Puppeteer.launch(launchOptions);
+ Page page = cdpBrowser.newPage();
page.goTo("https://www.baidu.com/?tn=68018901_16_pg");
ScreenshotOptions screenshotOptions = new ScreenshotOptions();
screenshotOptions.setPath("baidu.png");
@@ -281,13 +274,13 @@ Browser URL 后加上 /json/version,格式是:http://HOST:PORT/json/version
//全屏截图
screenshotOptions.setFullPage(true);
page.screenshot(screenshotOptions);
- browser.close();
+ cdpBrowser.close();
}
@Test
public void test5() throws Exception {
- Browser browser = Puppeteer.launch(launchOptions);
- Page page = browser.newPage();
+ Browser cdpBrowser = Puppeteer.launch(launchOptions);
+ Page page = cdpBrowser.newPage();
page.goTo("https://www.baidu.com/?tn=68018901_16_pg");
ScreenshotOptions screenshotOptions = new ScreenshotOptions();
screenshotOptions.setPath("baidu.jpeg");
@@ -298,7 +291,7 @@ Browser URL 后加上 /json/version,格式是:http://HOST:PORT/json/version
//全屏截图
screenshotOptions.setFullPage(true);
page.screenshot(screenshotOptions);
- browser.close();
+ cdpBrowser.close();
}
```
@@ -312,8 +305,8 @@ Browser URL 后加上 /json/version,格式是:http://HOST:PORT/json/version
*/
@Test
public void test25() throws IOException {
- Browser browser = Puppeteer.launch(launchOptions);
- Page page = browser.newPage();
+ Browser cdpBrowser = Puppeteer.launch(launchOptions);
+ Page page = cdpBrowser.newPage();
page.goTo("https://www.geetest.com/demo/slide-en.html");
ScreencastOptions screencastOptions = new ScreencastOptions();
screencastOptions.setPath("D:\\test\\test2.webm");
@@ -326,7 +319,7 @@ Browser URL 后加上 /json/version,格式是:http://HOST:PORT/json/version
page.type("#username", "123456789", 200);
page.type("#password", "123456789", 200);
screencast.stop();
- browser.close();
+ cdpBrowser.close();
}
/**
@@ -334,8 +327,8 @@ Browser URL 后加上 /json/version,格式是:http://HOST:PORT/json/version
*/
@Test
public void test26() throws IOException {
- Browser browser = Puppeteer.launch(launchOptions);
- Page page = browser.newPage();
+ Browser cdpBrowser = Puppeteer.launch(launchOptions);
+ Page page = cdpBrowser.newPage();
page.goTo("https://www.geetest.com/demo/slide-en.html");
ScreencastOptions screencastOptions = new ScreencastOptions();
screencastOptions.setPath("D:\\test\\test.gif");
@@ -345,7 +338,7 @@ Browser URL 后加上 /json/version,格式是:http://HOST:PORT/json/version
page.type("#username", "123456789", 200);
page.type("#password", "123456789", 200);
screencast.stop();
- browser.close();
+ cdpBrowser.close();
}
```
@@ -355,16 +348,13 @@ Browser URL 后加上 /json/version,格式是:http://HOST:PORT/json/version
如果你在 Linux 上安装 Chrome 并运行 遇到麻烦,或者在某个场景中遇到麻烦,可以 在 [Puppeteer(Node.js)](https://github.com/puppeteer/puppeteer) 库中的 [Troubleshooting](https://pptr.dev/troubleshooting) 寻找答案,也可以在其 issues 中寻找一些解决问题的思路,或者google baidu puppeteer的解决方案,再应用到你的问题上。
-### 四、JDK21 的尝试
-
-在 dev21分支 上使用了 jdk21 进行了部分代码修改,主要在 Connection 类上使用了虚拟线程处理消息,有兴趣可以自己打 JAR 包试试。
-
-### 五、资源
+### 四、资源
1. [Puppeteer中文文档](https://pptr.nodejs.cn/) : 更加详细的 API 文档 ,多看看了解一下
2. [DevTools Protocol](https://chromedevtools.github.io/devtools-protocol/) :CDP 协议
-3. [Chrome命令行启动参数](https://peter.sh/experiments/chromium-command-line-switches/)
+3. [本项目的WIKI]([Home · fanyong920/jvppeteer Wiki](https://github.com/fanyong920/jvppeteer/wiki)) 目前写有一些内容,后续有想到新的,会持续更新
+4. [命令行启动参数大全](https://github.com/GoogleChrome/chrome-launcher/blob/d6be1f3250ef7ff7648ae58c4e92e48509bdbe7c/src/flags.ts#L67)
-### 六、执照
+### 五、执照
此仓库中找到的所有内容均已获得 Apache 许可。有关详细信息,请参见`LICENSE`文件
diff --git a/api.md b/api.md
deleted file mode 100644
index 3fd1036b..00000000
--- a/api.md
+++ /dev/null
@@ -1,3969 +0,0 @@
-
-# Jvppeteer API Tip-Of-Tree
-
-
-
-##### 目录
-
-
-
-- [前言](#前言)
-- [环境变量](#环境变量)
-- [与 Chrome 插件一起工作](#与 Chrome 插件一起工作)
-- [class: Puppeteer](#class-puppeteer)
- * [puppeteer.connect(options)](#puppeteerconnectoptions)
- * [puppeteer.createBrowserFetcher([options])](#puppeteercreatebrowserfetcheroptions)
- * [puppeteer.defaultArgs([options])](#puppeteerdefaultargsoptions)
- * [puppeteer.devices](#puppeteerdevices)
- * [puppeteer.errors](#puppeteererrors)
- * [puppeteer.executablePath()](#puppeteerexecutablepath)
- * [puppeteer.launch([options])](#puppeteerlaunchoptions)
- * [puppeteer.product](#puppeteerproduct)
-- [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()](#browsercreateincognitobrowsercontext)
- * [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.deleteCookie(...cookies)](#pagedeletecookiecookies)
- * [page.emulate(options)](#pageemulateoptions)
- * [page.emulateMediaFeatures(features)](#pageemulatemediafeaturesfeatures)
- * [page.emulateMediaType(type)](#pageemulatemediatypetype)
- * [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.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.setExtraHTTPHeaders(headers)](#pagesetextrahttpheadersheaders)
- * [page.setGeolocation(options)](#pagesetgeolocationoptions)
- * [page.setJavaScriptEnabled(enabled)](#pagesetjavascriptenabledenabled)
- * [page.setOfflineMode(enabled)](#pagesetofflinemodeenabled)
- * [page.setRequestInterception(value)](#pagesetrequestinterceptionvalue)
- * [page.setUserAgent(userAgent)](#pagesetuseragentuseragent)
- * [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.waitForFunction(pageFunction[, options[, ...args]])](#pagewaitforfunctionpagefunction-options-args)
- * [page.waitForNavigation([options])](#pagewaitfornavigationoptions)
- * [page.waitForRequest(urlOrPredicate[, options])](#pagewaitforrequesturlorpredicate-options)
- * [page.waitForResponse(urlOrPredicate[, options])](#pagewaitforresponseurlorpredicate-options)
- * [page.waitForSelector(selector[, options])](#pagewaitforselectorselector-options)
- * [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.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.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.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.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.contentFrame()](#elementhandlecontentframe)
- * [elementHandle.dispose()](#elementhandledispose)
- * [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()](#elementhandleisintersectingviewport)
- * [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)
-- [class: HTTPRequest](#class-httprequest)
- * [httpRequest.abort([errorCode])](#httprequestaborterrorcode)
- * [httpRequest.continue([overrides])](#httprequestcontinueoverrides)
- * [httpRequest.failure()](#httprequestfailure)
- * [httpRequest.frame()](#httprequestframe)
- * [httpRequest.headers()](#httprequestheaders)
- * [httpRequest.isNavigationRequest()](#httprequestisnavigationrequest)
- * [httpRequest.method()](#httprequestmethod)
- * [httpRequest.postData()](#httprequestpostdata)
- * [httpRequest.redirectChain()](#httprequestredirectchain)
- * [httpRequest.resourceType()](#httprequestresourcetype)
- * [httpRequest.respond(response)](#httprequestrespondresponse)
- * [httpRequest.response()](#httprequestresponse)
- * [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.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.webWorker()](#targetworker)
-- [class: CDPSession](#class-cdpsession)
- * [cdpSession.detach()](#cdpsessiondetach)
- * [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)
-
-
-### 前言
-
-Jvppeteer 提供 Java 的 API 通过 DevTools Protocol 去控制 Chromium or Chrome。
-
-- [`Jvppeteer`](#class-jvppeteer) 通过 [DevTools Protocol](https://chromedevtools.github.io/devtools-protocol/) 与浏览器讯。
-- [`Browser`](#class-browser) 拥有多个浏览器上下文的浏览器实例。
-- [`BrowserContext`](#class-browsercontext) 一个浏览器会话对应一个实例,能够拥有多个实例。
-- [`Page`](#class-page) 至少又一个框架:主框架. 其他的框架 可以通过 [iframe](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/iframe) 或者 [frame](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/frame) 标签创建.
-- [`Frame`](#class-frame) 至少拥有一个执行上下文 - 默认执行上下文 - 框架的 JavaScript 被执行的地方. 一个框架或许还有其他的执行上下文,这些其他的上下文是与浏览器插件相关联。
-- [`Worker`](#class-webWorker) 具有单个执行上下文,并便于与[WebWorkers](https://developer.mozilla.org/zh_CN/docs/Web/API/Web_Workers_API)交互.
-
-### 环境变量
-
-Jvppeteer寻找某些环境变量来辅助其操作,通过System.setProperty()设置即可。
-
-- `PUPPETEER_CHROMIUM_REVISION` - 当你下载多个版本时,指定一个版本进行启动
-- `PUPPETEER_EXECUTABLE_PATH` - 直接指定 Chrome 或者 Chromium 的启动路径。与 [puppeteer.launch([options])](#puppeteerlaunchoptions)的executablePath 参数功能一致。
-- jvppeteer_common_thread_number - Jvppeteer内置了一个线程池,主要用于用户监听事件分发,该参数可以自定义内置线程池线程数量,默认是服务器核数。
-
-
-### 与 Chrome 插件一起工作
-
-Jvppeteer 可以用来测试 Chrome 插件。
-
-> **注意** 目前 Chrome / Chromium 的插件只能在有头模式下工作.
-
-下面的代码展示了如何获取插件的背景页([background page](https://developer.chrome.com/extensions/background_pages))
-```java
-BrowserFetcher.downloadIfNotExist(null);
-ArrayList additionalArgs = new ArrayList<>();
-additionalArgs.add("--no-sandbox");
-additionalArgs.add("--disable-setuid-sandbox");
-//指定插件所在的文件夹,如果手上暂时没有插件,可以我个人的插件https://github.com/fanyong920/crawlItem.git 克隆下来即可
-String pathToExtension = "E:\\workspace\\crawlItem";
-additionalArgs.add("--disable-extensions-except="+pathToExtension);
-additionalArgs.add("--load-extension="+pathToExtension);
-
-//插件的加载在有头模式下才能生效
-Browser browser = Puppeteer.launch(false);
-
-List targets = browser.targets();
-for (Target target : targets) {
- if("background_page".equals(target.type())){
- System.out.println("目标名称=" + target.getTargetInfo().getTitle());
- Page backgroundPage = target.page();
- }
-}
-browser.close();
-```
-
-> **注意** 尚无法测试插件的弹出窗口或内容脚本。
-
-### class: Puppeteer
-
-Puppeteer 提供了启动 Chrome 的方法,下面是典型的启动 Chrome 的例子
-
-```java
- //自动下载,第一次下载后不会再下载
- BrowserFetcher.downloadIfNotExist(null);
- Browser browser = Puppeteer.launch(false);
- Page page = browser.newPage();
- page.goTo("https://www.baidu.com/?tn=98012088_10_dg&ch=3");
- // 做一些其他操作
- browser.close();
-```
-
-#### puppeteer.connect(options)
-- `options` <[BrowserOptions]>
- - `ignoreHTTPSErrors` <[boolean]> 是否在导航期间忽略 HTTPS 错误. 默认是 `false`。
- - `defaultViewport` [Object]> 为每个页面设置一个默认视口大小。默认是 800x600。如果为 `null` 的话就禁用视图口。
- - `width` <[number]> 页面宽度像素。
- - `height` <[number]> 页面高度像素。
- - `deviceScaleFactor` <[number]> 设置设备的缩放(可以认为是 dpr)。默认是 `1`。
- - `isMobile` <[boolean]> 是否在页面中设置了 `meta viewport` 标签。默认是 `false`。
- - `hasTouch`<[boolean]> 指定viewport是否支持触摸事件。默认是 `false`。
- - `isLandscape` <[boolean]> 指定视口是否处于横向模式。默认是 `false`。
- - `slowMo` <[number]> 将 Puppeteer 操作减少指定的毫秒数。这样你就可以看清发生了什么,这很有用。
-- `browserWSEndpoint` [string]> 一个 浏览器 websocket 端点链接
-- `browserURL` [string]> 连接浏览器的地址,格式 `http://${host}:${port}`. 通过这个地址从 [元数据端点](https://chromedevtools.github.io/devtools-protocol/#how-do-i-access-the-browser-target)获取到对应的 `browserWSEndpoint`,然后通过这个端点连接浏览器
-- `transport` <[ConnectionTransport]> 指定供Puppeteer使用的自定义传输对象,还处于实验性阶段
-- `product` <[string]> 目前只支持 `chrome`.
-- returns: <[Browser]>
-
-此方法将 Puppeteer 添加到已有的 Chromium 实例
-
-#### puppeteer.createBrowserFetcher([options])
-- `options` <[Object]>
- - `host` <[string]> 要使用的下载主机. 默认是 `https://npm.taobao.org/mirrors`。
- - `path` <[string]> 下载文件夹的路径. 默认是 `/.local-chromium`, `` 是 项目根目录。
- - `platform` <"linux"|"mac"|"win32"|"win64">可能的值有: `mac`, `win32`, `win64`, `linux`。默认是当前平台。
- - `product` <"chrome"|"firefox"> [string] 运行的浏览器类型,目前只支持 chrome
-- returns: <[BrowserFetcher]>
-
-#### puppeteer.defaultArgs([options])
-- `options` <[Object]> 设置浏览器可选项。有一下字段:
- - `headless` <[boolean]> 是否在 [无头模式](https://developers.google.com/web/updates/2017/04/headless-chrome) 下运行浏览器。默认是 `true` 除非 `devtools` 选项是 `true`。
- - `args` <[Array]<[string]>> 传递给浏览器实例的其他参数。可以 [在这](http://peter.sh/experiments/chromium-command-line-switches/) 找到 Chromium 标志列表。
- - `userDataDir` <[string]> [用户数据目录](https://chromium.googlesource.com/chromium/src/+/master/docs/user_data_dir.md) 的路径
- - `devtools` <[boolean]> 是否为每个选项卡自动打开 DevTools 面板。如果这个选项是 `true` 的话, `headless` 选项将被设置为 `false`。
-- returns: <[Array]<[string]>>
-
-Chromium 启动时使用的默认参数。
-
-#### puppeteer.executablePath()
-- returns: <[string]> 运行 Chromium 的所在路径
-
-
-#### puppeteer.launch([options])
-- `options` <[Object]> 在浏览器上设置的一组可配置选项。 有以下字段:
- - `product` <[string]> 可以选择 chrome 或者 firrfox,目前只支持 chrome
- - `ignoreHTTPSErrors` <[boolean]>是否在导航期间忽略 HTTPS 错误. 默认是 `false`。
- - `headless` <[boolean]> 是否以 [无头模式](https://developers.google.com/web/updates/2017/04/headless-chrome) 运行浏览器。默认是 `true`,除非 `devtools` 选项是 `true`。
- - `executablePath` <[string]> 可运行 Chromium 或 Chrome 可执行文件的路径,而不是绑定的 Chromium。如果 `executablePath` 是一个相对路径,那么他相对于 当前项目根目录 解析。
- - `slowMo` <[int]> 将 Puppeteer 操作减少指定的毫秒数。这样你就可以看清发生了什么,这很有用。
- - `defaultViewport` [Viewport]>为每个页面设置一个默认视口大小。默认是 800x600。如果为 `null` 的话就禁用视图口。
- - `width` <[int]> 页面宽度像素。
- - `height` <[int]> 页面高度像素。
- - `deviceScaleFactor` <[Number]> 设置设备的缩放(可以认为是 dpr)。默认是 `1`
- - `isMobile` <[boolean]> 是否在页面中设置了 `meta viewport` 标签。默认是 `false`。
- - `hasTouch`<[boolean]>指定viewport是否支持触摸事件。默认是 `false`。
- - `isLandscape` <[boolean]> 指定视口是否处于横向模式。默认是 `false`。
- - `args` <[Array]<[string]>> 传递给浏览器实例的其他参数。 这些参数可以参考 [这里](http://peter.sh/experiments/chromium-command-line-switches/)。
- - `ignoreAllDefaultArgs` <[boolean]> 如果是 `true`,那将不使用默认参数
- - `ignoreDefaultArgs` <[Array<[string]>]> 忽略指定的默认参数
- - `handleSIGINT` <[boolean]> Ctrl-C 关闭浏览器进程。默认是 `true`。
- - `handleSIGTERM` <[boolean]> 关闭 SIGTERM 上的浏览器进程。默认是 `true`。
- - `handleSIGHUP` <[boolean]> 关闭 SIGHUP 上的浏览器进程。默认是 `true`.
- - `timeout` <[number]> 等待浏览器实例启动的最长时间(以毫秒为单位)。默认是 `30000` (30 秒). 通过 `0` 来禁用超时。
- - `dumpio` <[boolean]> 是否将浏览器进程标准输出和标准错误输入到 `System.out` 和 `System.err` 中。默认是 `false`。
- - `userDataDir` <[string]> [用户数据目录](https://chromium.googlesource.com/chromium/src/+/master/docs/user_data_dir.md) 路径。
- - `devtools` <[boolean]> 是否为每个选项卡自动打开DevTools面板。如果这个选项是 `true`,`headless` 选项将会设置成 `false`。
- - `pipe` <[boolean]> 通过管道而不是WebSocket连接到浏览器。默认是 `false`。目前 Java 暂时不支持管道连接浏览器
-- returns: <[Browser]> 浏览器实例
-
-
-你可以使用 `ignoreDefaultArgs` 过滤默认参数中的 `--enable-automation` :
-```java
-LaunchOptions launchOptions = new LaunchOptionsBuilder().withIgnoreDefaultArgs(Arrays.asList("--enable-automation")).withHeadless(false).build();
- Browser browser = Puppeteer.launch(launchOptions);
-```
-
-> **注意** Puppeteer也可以用于控制Chrome浏览器,但与捆绑的Chromium版本配合使用效果最好。 使用任何其他版本效果无法保证。 使用`executablePath`选项时要格外小心。
->
-> 看 [`文章1`](https://www.howtogeek.com/202825/what%E2%80%99s-the-difference-between-chromium-and-chrome/) 了解 Chromium 与 Chrome 的区别. [`文章2`](https://chromium.googlesource.com/chromium/src/+/lkgr/docs/chromium_browser_vs_google_chrome.md) 了解在Linux使用 Jvppeteer 的一些不同.
-
-#### puppeteer.product
-- returns: <[string]> 返回浏览器的名称(目前只支持“ chrome”)
-
-
-### class: BrowserFetcher
-
-BrowserFetcher 可以用来下载和管理不同版本的 Chromium。
-
-BrowserFetcher 操作一个修订版本字符串,修订版本字符串指定了一个 Chromium 的确定版本,例如 `"533271"`。修订版本字符串可以从 [https://npm.taobao.org/mirrors/chromium-browser-snapshots](https://npm.taobao.org/mirrors/chromium-browser-snapshots) 获取。
-
-看下面这个例子,他将告诉你如何使用 BrowserFetcher 下载一个指定版本的 Chromium
-
-```java
-//自动下载,第一次下载后不会再下载,下载到项目根目录下
- RevisionInfo revisionInfo = BrowserFetcher.downloadIfNotExist("533271");
-
- //当项目根目录下只有一个版本的 Chromium 时,Puppeteer.launch()会自动寻找到该版本,当有多个版本时需要制定路径
- Puppeteer.launch(new LaunchOptionsBuilder().withExecutablePath(revisionInfo.getExecutablePath()).build());
-```
-
-> **注意** BrowserFetcher 不适用于与共享下载目录的其他实例同时运行。
-
-#### browserFetcher.canDownload(revision)
-- `revision` <[string]> 修订版本号, 检查其可用性
-- `proxy` <[Proxy]> 代理
-- returns: <[Promise]<[boolean]>> 返回 `true` 如果该修订版本可以从主机下载
-
-该方法将会发起一个 HEAD 请求来检查该修订版本是否有效。
-
-#### browserFetcher.download(revision[, progressCallback])
-- `revision` <[string]> 下载的浏览器版本.
-- `progressCallback` <[function]([number], [number])> 下载回调,用于显示下载进度
- - `downloadedBytes` <[number]> 已下载的大小,单位是M
- - `totalBytes` <[number]> 下载总大小 ,单位是M
-- returns: <[Promise]<[Object]>> 返回下载的版本信息
- - `revision` <[string]> 下载的
- - `folderPath` <[string]> 下载的 Chromium 被解压的文件夹
- - `executablePath` <[string]> 执行的路径
- - `url` <[string]> 下载的 url
- - `local` <[boolean]> 是否存在本地磁盘
-
-该方法将会发起一个 GET 请求来从主机下载该修订版本。
-
-#### browserFetcher.host()
-- returns: <[string]> 下载的网址
-
-#### browserFetcher.localRevisions()
-- returns: <[Promise]<[Array]<[string]>>> 返回项目根目录下存在的所有版本
-
-#### browserFetcher.platform()
-- returns: <[string]> 返回目前使用的平台 , `mac`, `linux`, `win32` or `win64` 之一.
-
-#### browserFetcher.product()
-- returns: <[string]> 目前只支持 Chrome
-
-#### browserFetcher.remove(revision)
-- `revision` <[string]> 删除项目根目录下指定版本的浏览器文件
-
-#### browserFetcher.revisionInfo(revision)
-- `revision` <[string]> 要获取的版本
-- returns: <[Object]>
- - `revision` <[string]> 指定的版本浏览器
- - `folderPath` <[string]> 该版本浏览器所在的文件夹
- - `executablePath` <[string]> 该版本浏览器可执行的路径
- - `url` <[string]> 该版本浏览器的下载 url
- - `local` <[boolean]> 是否存在本地磁盘
- - `product` <[string]> `chrome` or `firefox` 之一,目前只支持 `chrome`
-
-### class: Browser
-
-* 继承: [EventEmitter](#class-eventemitter)
-
-当用 Jvppeteer打开一个 Chromium 实例是会自动创建一个 Browser 对象, 可以通过 [`puppeteer.launch`](#puppeteerlaunchoptions) 或者 [`puppeteer.connect`](#puppeteerconnectoptions) 获取 Browser 对象
-
-下面是用 [Browser](##class Browser) 创建 [Page](###class Page) 对象的例子:
-```java
- Browser browser = puppeteer.launch();
- Page page = browser.newPage();
- page.goTo('https://example.com');
- browser.close();
-```
-
-下面是断开 [Browser](##class-browser) 和重新连接 [Browser](##class-browser) 的例子 :
-```java
- Browser browser = puppeteer.launch();
- //拿到对应Browser对象的 endpoint 以方便接下来能重连到 Chromium
- String browserWSEndpoint = browser.wsEndpoint();
- // 断开连接
- browser.disconnect();
-
- // 使用 endpoint 重新建立连接
- Browser browser2 = puppeteer.connect(browserWSEndpoint);
- // 关闭 Chromium
- browser2.close();
-
-```
-#### event: 'disconnected'
-断开浏览器连接的事件. 以下两种情况可能引发这个事件:
-- 关闭浏览器或者浏览器崩溃
-- 触发 [`browser.disconnect`](#browserdisconnect)
-
-#### event: 'targetchanged'
-当目标的 url 改变时被触发
-
-> **注意** 这包括默认浏览器上下文中的目标更改。
-
-
-#### event: 'targetcreated'
-当目标被创建时被触发,例如当通过 [`window.open`](https://developer.mozilla.org/en-US/docs/Web/API/Window/open) 或 [`browser.newPage`](https://zhaoqize.github.io/puppeteer-api-zh_CN/#?product=Puppeteer&version=v10.2.0&show=api-browsernewpage) 打开一个新的页面。
-
-> **注意** 这包括默认浏览器上下文中的目标销毁。
-
-#### event: 'targetdestroyed'
-当目标被销毁时被触发,例如当一个页面被关闭时。
-
-> **注意** 这包括默认浏览器上下文中的目标销毁。
-
-#### browser.browserContexts()
-返回一个包含所有打开的浏览器上下文的数组。在新创建的浏览器中,这将返回 [BrowserContext](###class-browsercontext) 的单一实例。
-
-#### browser.close()
-关闭 Chromium 以及所有页面 (如果有). [Browser](##class-browser) 对象本身被认为是处理过的并不能再被使用。
-
-#### browser.createIncognitoBrowserContext()
-创建一个匿名的浏览器上下文。这将不会与其他浏览器上下文分享 cookies/cache
-
-```java
- Browser browser = Puppeteer.launch();
- // 创建一个匿名的浏览器上下文
- BrowserContext context = browser.createIncognitoBrowserContext();
- // 在一个原生的上下文中创建一个新页面
- Page page = await context.newPage();
- // 做一些事情
- page.goTo('https://example.com');
-```
-
-#### browser.defaultBrowserContext()
-返回默认的浏览器上下文,默认的浏览器上下文不能被关闭
-
-#### browser.disconnect()
-
-断开 Jvppeteer 和浏览器的连接,但 Chromium 进程仍然在运行。在调用 `disconnect` 之后,[Browser](##class-browser) 对象本身被认为是处理过的并不能再被使用。
-
-#### browser.isConnected()
-
-- returns: <[boolean]>
-
-是否已经连接浏览器
-
-#### browser.newPage()
-在默认的浏览器上下文中打开一个新的页面
-
-#### browser.pages()
-- returns: 返回一个包含所有打开的页面的数组。页面不可见的,比如 `"background_page"` 将不会列在这。不过你可以通过 [target.page()](####target.page()) 找到它们。
-
-返回一个浏览器中所有页面的数组。 在多个浏览器上下文的情况下, 该方法将返回一个包含所有浏览器上下文中所有页面的数组。
-
-#### browser.process()
- 产生浏览器的进程。如果浏览器实例是由 [`puppeteer.connect`](####puppeteer.connect(options)) 方法创建的则返回null。
-
-#### browser.target()
-返回浏览器相关的目标对象。
-
-#### browser.targets()
-浏览器内所有活动目标组成的数组。在多个浏览器上下文的情况下,该方法将返回一个包含所有浏览器上下文中的所有目标的数组。
-
-#### browser.userAgent()
-返回浏览器的 userAgent
-
-> **注意** 页面可以通过 [page.setUserAgent](#pagesetuseragentuseragent) 重新设置 userAgent
-
-#### browser.version()
- 对于无头的 Chromium,这类似于 `HeadlessChrome/61.0.3153.0`. 对于非无头的Chromium, 这类似于 `Chrome/61.0.3153.0。`
-
-> **注意** browser.version() 的格式可能在未来版本的 Chromium 中发生变化。
-
-#### browser.waitForTarget(predicate,options)
-- `predicate` 每个目标要运行的函数
-- `timeout` <[number]> 最大等待毫秒时间. Pass `0` to disable the timeout 设置 0 可以无限等待. 默认等待30秒.
-
- 在所有的浏览器上下文中寻找目标
-
-下面是一个通过`window.open`找到一个目标,这个目标对应一个打开的页面:
-```java
-page.evaluate(“() => window.open('https://www.example.com/')”);
-Target newWindowTarget = browser.waitForTarget(“target => target.url() === 'https://www.example.com/'”);
-```
-
-#### browser.wsEndpoint()
-返回浏览器 websocket 的地址
-
-[puppeteer.connect](####puppeteer.connect(options)) 可以将浏览器 websocket 端作为一个参数。其格式为 `ws://${host}:${port}/devtools/browser/`。
-
-你可以从 `http://${host}:${port}/json/version` 找到 `webSocketDebuggerUrl` 。了解更多有关 [devtools protocol](https://chromedevtools.github.io/devtools-protocol) 和 [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'`
-- 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]> 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 [request] 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 [response] is received.
-
-#### event: 'workercreated'
-- <[Worker]>
-
-Emitted when a dedicated [WebWorker](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API) is spawned by the page.
-
-#### event: 'workerdestroyed'
-- <[Worker]>
-
-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][ElementHandle]>>
-
-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.
-
-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.
-- 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 `\n" +
+ "\n" +
+ "\n" +
+ " 欢迎来到示例页面
\n" +
+ "\n" +
+ "