Headless Chrome DevTools Protocol Client (RxJava3 + Kotlin)

Overview

chrome-reactive-kotlin v0.7.1

Maven Central Javadocs Tests Update Status Dependabot Status

chrome-reactive-kotlin is a low level Chrome DevTools Protocol client written in Kotlin and leveraging RxJava3 for easy composability.

Library exposes all protocol domains in a single, cohesive and highly composable API. It supports both headless and standalone Chrome versions and supports creating isolated environments via BrowserContext from Target domain and flatted sessions mode (see: http://crbug.com/991325).

For debugging purposes you can use my other project: chrome-protocol-proxy.

Please note that most up-to-date protocol is used at the moment.

Documentation can be found on https://wendigo.github.io/chrome-reactive-kotlin/.

Usage

Gradle

build.gradle:

implementation 'pl.wendigo:chrome-reactive-kotlin:0.7.1'

build.gradle.kts:

implementation("pl.wendigo:chrome-reactive-kotlin:0.7.1")

Maven

pom.xml:

<dependency>
  <groupId>pl.wendigo</groupId>
  <artifactId>chrome-reactive-kotlin</artifactId>
  <version>0.7.1</version>
</dependency>

Example

Run headless chrome:

docker container run -d -p 9222:9222 eu.gcr.io/zenika-hub/alpine-chrome:89 --no-sandbox --remote-debugging-address=0.0.0.0 --remote-debugging-port=9222 about:blank

And now execute:

import pl.wendigo.chrome.api.page.NavigateRequest

fun main() {
    val chrome = Browser.builder()
        .withAddress("127.0.0.1:9222")
        .build()

    chrome.use { browser ->
        browser.target("about:blank").use { target ->
            await {
                target.Page.enable()
            }

            await {
                target.Page.navigate(NavigateRequest(url = "https://github.com/wendigo/chrome-reactive-kotlin")).flatMap { (frameId) ->
                    target.Page.frameStoppedLoading().filter {
                        it.frameId == frameId
                    }.take(1).singleOrError()
                }
            }
        }
    }
}
Comments
  • Bump spock from 1.12.4 to 1.12.5

    Bump spock from 1.12.4 to 1.12.5

    Bumps spock from 1.12.4 to 1.12.5.

    Release notes

    Sourced from spock's releases.

    1.12.5

    What's Changed

    🚀 Features

    🐛 Bug Fixes

    • Prevent duplicate attempts to start Ryuk container (#2245) @rnorth
    • Remove stray 'KB' suffix from docker build context size log mes… (#2214) @rnorth
    • JDBC: Fix parsing empty connection parameters (#2207) @findepi
    • Fix framing in OkHttp transport (#2155) @bsideup
    • do not implicitly connect to Kafka network (#2139) @bsideup
    • Truncate mode bits for z/OS file permissions (#2023) @aguibert
    • Fix DockerClientFactory#dockerHostIpAddress (#2119) @bsideup
    • Fix use of bash-specific /proc/net/tcp* check in InternalCommandPortListeningCheck t… (#2195) @perlun
    • Include only published projects into BOM (#2118) @bsideup

    📖 Documentation

    🧹 Housekeeping

    📦 Dependency updates

    Click to expand... ... (truncated)
    Commits
    • 2a56996 Remove CI status check
    • 97d2bf1 Simplify conditional travis execution
    • 92a0d8c Restore Travis Release automation (#2279)
    • ad703f0 Allow bintray upload to overwrite existing publications
    • a1dac13 Replace unicode characters in strings with unicode escape seque… (#2261)
    • fb869c0 Prevent duplicate attempts to start Ryuk container (#2245)
    • 7143939 Accept List<GenericContainer> in deepStart (#2221)
    • 23e9718 Fix /proc/net/tcp* check in InternalCommandPortListeningCheck t… (#2195)
    • 4671f3a fix anchor link for link to feature description (#2257)
    • 9f748ab Bump mysql-connector-java from 8.0.18 to 8.0.19 in /modules/jun… (#2244)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Note: This repo was added to Dependabot recently, so you'll receive a maximum of 5 PRs for your first few update runs. Once an update run creates fewer than 5 PRs we'll remove that limit.

    You can always request more updates by clicking Bump now in your Dependabot dashboard.

    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in your Dependabot dashboard:

    • Update frequency (including time of day and day of week)
    • Pull request limits (per update run and/or open at any time)
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)
    dependencies 
    opened by dependabot-preview[bot] 3
  • Bump nexus-publish-plugin from 0.3.1 to 0.4.0

    Bump nexus-publish-plugin from 0.3.1 to 0.4.0

    Bumps nexus-publish-plugin from 0.3.1 to 0.4.0.

    Release notes

    Sourced from nexus-publish-plugin's releases.

    v0.4.0

    Make connect timeout configurable (#43)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Note: This repo was added to Dependabot recently, so you'll receive a maximum of 5 PRs for your first few update runs. Once an update run creates fewer than 5 PRs we'll remove that limit.

    You can always request more updates by clicking Bump now in your Dependabot dashboard.

    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in your Dependabot dashboard:

    • Update frequency (including time of day and day of week)
    • Pull request limits (per update run and/or open at any time)
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)
    dependencies 
    opened by dependabot-preview[bot] 3
  • Expose DevToolsProtocol and Browser.fetchInfo API

    Expose DevToolsProtocol and Browser.fetchInfo API

    Browser class does not have any events like targetCreated/targetDestroyed I need to use CDP directly for these events and the only way to do this is

    1. copy "fun fetchInfo" from Browser and create connection with acquired websocket url
    2. create DevToolsProtocol via Reflection API

    Making this API public is easy and require almost no changes (I can even make PR by myself) Can you do that?

    opened by zawodskoj 2
  • Bump spock from 1.14.1 to 1.14.3

    Bump spock from 1.14.1 to 1.14.3

    Bumps spock from 1.14.1 to 1.14.3.

    Release notes

    Sourced from spock's releases.

    1.14.3

    What's Changed

    🚀 Features & Enhancements

    • Move away from using quay.io for default images (#2805) @rnorth
    • Couchbase: wait until query engine knows about bucket before creating… (#2662) @daschl
    • Couchbase: Bump Server Image Version (#2804) @daschl
    • Added additional url params in JdbcDatabaseContainer (#1802) (#1874) @eaxdev
    • Record and dump Ryuk's logs on timeout (#2810) @bsideup
    • Add default labels to images created with ImageFromDockerfile (#2809) @bsideup
    • Ensure that ParsedDockerfile supports platform args (#2780) @rnorth

    📖 Documentation

    🧹 Housekeeping

    📦 Dependency updates

    Click to expand...

    1.14.2

    What's Changed

    🚀 Features & Enhancements

    ... (truncated)
    Commits
    • 4853406 Bump Couchbase Server Image Version (#2804)
    • 835ac71 couchbase: wait until query engine knows about bucket before creating… (#2662)
    • 6e1f8a0 Record and dump Ryuk's logs on timeout (#2810)
    • 6ac18b2 Add default labels to images created with ImageFromDockerfile (#2809)
    • 892d84d Re-enable build cache
    • 785bdf5 Temporarily disable use of build cache
    • 71b9bce Always clean Azure pipelines builds
    • f2109fc Bump s3 from 2.13.18 to 2.13.23 in /modules/localstack (#2786)
    • 77a662c Bump aws-java-sdk-logs from 1.11.782 to 1.11.789 in /modules/localstack (#2788)
    • 3a2462c Ensure that ParsedDockerfile supports platform args (#2780)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in your Dependabot dashboard:

    • Update frequency (including time of day and day of week)
    • Pull request limits (per update run and/or open at any time)
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)
    dependencies 
    opened by dependabot-preview[bot] 2
  • Bump spock from 1.13.0 to 1.14.1

    Bump spock from 1.13.0 to 1.14.1

    Bumps spock from 1.13.0 to 1.14.1.

    Release notes

    Sourced from spock's releases.

    1.14.1

    What's Changed

    🚀 Features & Enhancements

    🐛 Bug Fixes

    • Fix regression introduced in #2473 (missing this constructor call) (#2596) @bsideup
    • Public ImageData class for custom image pull policies (#2585) @cha55son
    • Delegate getMetadata() to R2DBCDatabaseContainerProvider (#2577) @bsideup
    • Respect specified VNC recording directory for BrowserWebDriverContainer again (#2574) @srempfer

    📖 Documentation

    🧹 Housekeeping

    📦 Dependency updates

    Click to expand... ... (truncated)
    Commits
    • 1e803b8 Use relative path for temp dirs in test (#2604)
    • 12de2b4 Allow using LocalStackContainer with AWS SDK v2 #1442 (#2579)
    • 2c20417 Bump mongo-java-driver from 3.12.1 to 3.12.3 in /core (#2594)
    • 4d17308 CircleCI docs: fix invalid executor key (#2607)
    • 3f3f4b2 Set custom ciMate key (#2601)
    • 9c4756f Push Gradle Cache from GHA (#2597)
    • d604f3e Fix regression introduced in #2473 (missing this constructor call) (#2596)
    • f631023 Support ImageFromDockerfile authenticated image pulls (#2573)
    • c969200 Reduce AZP build to a minimal subset of core, except when running on Windows ...
    • b6cd9c8 Make ImageData class public for custom image pull policies (#2585)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in your Dependabot dashboard:

    • Update frequency (including time of day and day of week)
    • Pull request limits (per update run and/or open at any time)
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)
    dependencies 
    opened by dependabot-preview[bot] 2
  • Bump testcontainers from 1.12.5 to 1.13.0

    Bump testcontainers from 1.12.5 to 1.13.0

    Bumps testcontainers from 1.12.5 to 1.13.0.

    Release notes

    Sourced from testcontainers's releases.

    1.13.0

    What's Changed

    🚀 Features

    🐛 Bug Fixes

    • Fix localstack cloudwatchlogs service (#2316) @MariuszCwikla
    • Set sourceJar.from=allSource for modules/spock (#2281) @pertu
    • Improve checkMountableFile on Windows with unusual paths (#2296) @bedla
    • Pin mkdocs dependencies to avoid version incompatibility (#2335) @rnorth
    • Add small delay in while loop to avoid spamming logs (ResourceReaper) (#2287) @worldtiki

    📖 Documentation

    • idiomatize test container configuration in kotlin example (#1964) @alex0ptr
    • Adding Windows Subsystem for Linux section to the windows documentation (#2282) @rnorth
    • Add junit-jupiter dependency in junit 5 quickstart docs (#2301) @Dark0096
    • Mention JDBC URL change in Spring Boot 2.3.0 (#2286) @bsideup

    🧹 Housekeeping

    📦 Dependency updates

    Click to expand... ... (truncated)
    Changelog

    Sourced from testcontainers's changelog.

    Change Log

    All notable changes to this project will be documented in this file.

    MOVED

    After version 1.8.3 all future releases will only be documented in the Releases section of the GitHub repository. This changelog file will eventually be removed.

    [1.8.3] - 2018-08-05

    Fixed

    • Fixed with* methods of CouchbaseContainer (#810)
    • Fix problem with gzip encoded streams (e.g. copy file from container), by adding decompression support to netty exec factory (#817, fixes #681, relates to docker-java/docker-java#1079)

    [1.8.2] - 2018-07-31

    Fixed

    • Add support for transparently using local images with docker-compose (#798, fixes #674)
    • Fix bug with Dockerfile image creation with Docker for Mac 18.06-ce (#808, fixes #680)

    Changed

    • Update Visible Assertions to 2.1.1 (#779).
    • KafkaContainer optimization (group.initial.rebalance.delay.ms=0) (#782).

    [1.8.1] - 2018-07-10

    Fixed

    • Linux/Mac: Added support for docker credential helpers so that images may be pulled from private registries. See #729, #647 and #567.
    • Ensure that the COMPOSE_FILE environment variable is populated with all relevant compose file names when running docker-compose in local mode #755.
    • Fixed issue whereby specified command in MariaDB image was not being applied. (#534)
    • Changed Oracle thin URL to support both Oracle 11 and 12 XE (#769)
    • Ensure that full JDBC URL query string is passed to JdbcDatabaseDelegate during initscript invocation (#741; fixes #727)
    • Ensure that necessary transitive dependency inclusions are applied to generated project POMs (#772; fixes #753 and #652)

    Changed

    • Update Apache Pulsar module to 2.0.1 #760.
    • Make JdbcDatabaseContainer#getDriverClassName public #743.
    • enable copyFileToContainer feature during container startup #742.
    • avoid using file mounting in KafkaContainer #775.
    • Added Apache Cassandra module #776.

    [1.8.0] - 2018-06-14

    Fixed

    • Fixed JDBC URL Regex Pattern to ensure all supported Database URL's are accepted (#596)
    • Filtered out TestContainer parameters (TC_*) from query string before passing to database (#345)
    • Use latest tag as default image tag (#676)
    ... (truncated)
    Commits
    • f43e799 Bump mockito-core from 3.2.4 to 3.3.0 in /core (#2370)
    • 832c6e0 Bump elasticsearch-rest-client from 7.6.0 to 7.6.1 in /modules/… (#2401)
    • e6ee290 Bump aws-java-sdk-logs from 1.11.722 to 1.11.737 in /modules/lo… (#2399)
    • f8a6fa0 Bump java-client from 2.7.12 to 2.7.13 in /modules/couchbase (#2397)
    • 7b4f381 Bump org.springframework.boot from 2.2.4.RELEASE to 2.2.5.RELEA… (#2387)
    • 0981d27 Bump mockito-core from 3.2.4 to 3.3.0 in /modules/junit-jupiter (#2372)
    • df48901 Idiomatize testcontainer object creation in kotlin example (#1964)
    • b262a20 Adding Windows Subsystem for Linux section to the windows docum… (#2282)
    • 6ec63f8 Prune images between module checks (#2376)
    • 6f7b17a Set sourceJar.from=allSource for modules/spock (#2281)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.

    Dependabot will merge this PR once CI passes on it, as requested by @wendigo.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in your Dependabot dashboard:

    • Update frequency (including time of day and day of week)
    • Pull request limits (per update run and/or open at any time)
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)
    dependencies 
    opened by dependabot-preview[bot] 2
  • ChromeDebuggerConnection is internal class

    ChromeDebuggerConnection is internal class

    Hi Mateusz, in attempt to get a better control over targets, especially in spawning multiple tabs in multiple browser contexts, I'm hitting a blocker in ChromeDebuggerConnection, which is an internal class. That prevents me from rewriting HeadlessChromeProtocol.create on my own :disappointed:

    Is there a reason for that? It would be great if the library allowed both high-level and low(er)-level approaches

    question 
    opened by david-sabata 2
  • Outdated usage examples

    Outdated usage examples

    I like to kindly inform that your usage examples are outdated ;) I couldn't find protocol.headless("about:blank", 1280, 1024).blockingGet() And I used protocol.session instead :)

    But still thanks for awesome library :+1:

    opened by roophieini 2
  • Enable enableBeginFrameControl parameter usage

    Enable enableBeginFrameControl parameter usage

    Hi Mateusz, I'm playing with headless Chrome and its mode where I can manually control rendering. To do that, I need to enable it first by enableBeginFrameControl. I could rewrite the HeadlessChromeProtocol.create on my own with that param set, but internal class ChromeDebuggerConnection prevents me to do so.

    As I don't know your strategy on internal classes design, I went with the easiest way of simply adding the param :)

    opened by david-sabata 2
  • RequestError deserialization issue

    RequestError deserialization issue

    Chromium can send frame with following structure {"id":7,"error":{"code":-32000,"message":"Inspected target navigated or closed"},"sessionId":"XXXXXX"}. In such a case client tries to deserialize this message to object RequestError. This deserialization ends up with following exception Caught WebSocket exception: kotlinx.serialization.MissingFieldException: Field 'data' is required for type with serial name 'pl.wendigo.chrome.protocol.websocket.RequestError', but it was missing. To fix this issue it should be enough to add default value null to this field. When value is marked as nullable it doesn't mean that it is not required during deserialization. It must have default value to be optional.

    Could you fix it and release new version? Thanks

    opened by t-omas 1
  • Unable to create new Browser object after closing previous one

    Unable to create new Browser object after closing previous one

    After the closing browser object and creating new one I hit following exception

    exception in thread "main" java.lang.RuntimeException: pl.wendigo.chrome.protocol.RequestFailed: request = RequestFrame(id=1, sessionId=null, method=Target.setDiscoverTargets, params={"discover":true}), error = Could not enqueue message {"discover":true}
    

    How to reproduce

        val browser1 = Browser.builder().withAddress("localhost:9222").build()
        browser1.close()
    
    
        val browser2 = Browser.builder().withAddress("localhost:9222").build()
        browser2.close()
    

    I see this issue as a bug but maybe I am missing something.

    opened by t-omas 1
  • Deserialization issue compatibilityMode

    Deserialization issue compatibilityMode

    Partial stacktrace when deserializing Node.

    kotlinx.serialization.json.internal.JsonDecodingException: Encountered unknown key 'compatibilityMode'. Use 'ignoreUnknownKeys = true' in 'Json {}' builder to ignore unknown keys. Current input: .....le.com/","xmlVersion":"","compatibilityMode":"NoQuirksMode"} at kotlinx.serialization.json.internal.JsonExceptionsKt.JsonDecodingException(JsonExceptions.kt:24) at pl.wendigo.chrome.api.dom.Node$$serializer.deserialize(Types.kt) at pl.wendigo.chrome.api.dom.Node$$serializer.deserialize(Types.kt:134) at pl.wendigo.chrome.api.dom.GetDocumentResponse$$serializer.deserialize(Domain.kt) at pl.wendigo.chrome.api.dom.GetDocumentResponse$$serializer.deserialize(Domain.kt:862) at pl.wendigo.chrome.protocol.websocket.FrameMapper.deserializeResponseFrame$chrome_reactive_kotlin(FrameMapper.kt:39) at pl.wendigo.chrome.protocol.websocket.WebSocketFramesStream$getResponse$2.apply(WebSocketFramesStream.kt:66) at pl.wendigo.chrome.protocol.websocket.WebSocketFramesStream$getResponse$2.apply(WebSocketFramesStream.kt:28)

    Maybe https://github.com/wendigo/chrome-reactive-kotlin/blob/master/src/main/kotlin/pl/wendigo/chrome/protocol/websocket/FrameMapper.kt#L39 needs to be relaxed as well?

    opened by fredlange 0
Owner
Mateusz "Serafin" Gajewski
Time isn’t slowing, just speed, it’s all we’re knowing.
Mateusz
DevTools for Android Chrome — works on any website, on any Chromium browser.

DevTools for Android Chrome — works on any website, on any Chromium browser.

Leo Ho 135 Dec 7, 2022
Android network client based on Cronet. This library let you easily use QUIC protocol in your Android projects

Android network client based on Cronet. This library let you easily use QUIC protocol in your Android projects

VK.com 104 Dec 12, 2022
Esp touch flutter plugin - Client-side (mobile) Android Flutter implementation for ESP-Touch protocol

esp_touch_flutter_plugin Client-side (mobile) Android Flutter implementation for

huangyanxiong 0 Jan 21, 2022
Playground server-client Android app using gRPC and protocol buffers

gRPC Playground The goal of this app is to connect to a server, exchange information using the gRPC protocol and lastly retrieve some mocked credentia

Thanos Psaridis 8 Sep 14, 2022
Show worldwide headline. API/Glide library/recycler view/volley library/kotlin/xml/ chrome custom tabs

Show worldwide headline. API/Glide library/recycler view/volley library/kotlin/xml/ chrome custom tabs. -> you can click on headline and it will open an article of that news in the app(no need to go to chrome or any browser)

SUMIT KUMAR 5 Nov 28, 2022
Stetho is a debug bridge for Android applications, enabling the powerful Chrome Developer Tools and much more.

Stetho Stetho is a sophisticated debug bridge for Android applications. When enabled, developers have access to the Chrome Developer Tools feature nat

Facebook 12.6k Jan 7, 2023
🧩 A basic compose chrome extension template

?? compose-chrome-extension-template A basic compose chrome extension template on top of compose web ?? Run ./gradlew jsBrowserRun ?? Install Create

theapache64 84 Jan 4, 2023
Chrome's Dino T-Rex game developed in Jetpack Compose

Chrome's Dino T-Rex game developed in Jetpack Compose

Wajahat Karim 230 Dec 29, 2022
Candroid Browser is a replacement web browser for Candroid. It is designed to replace the AOSP browser, but not Google Chrome. It will be based on a privacy friendly WebKit engine fork.

Candroid Browser Candroid Browser is a replacement web browser for Candroid. It is designed to replace the AOSP browser, but not Google Chrome. It wil

Sean P. Myrick V19.1.7.2 3 Dec 22, 2022
gRPC and protocol buffers for Android, Kotlin, and Java.

Wire “A man got to have a code!” - Omar Little See the project website for documentation and APIs. As our teams and programs grow, the variety and vol

Square 3.9k Dec 31, 2022
This is a open source library on kotlin for Solana protocol.

Solana + RxSolana This is a open source library on kotlin for Solana protocol. The objective is to create a cross platform, fully functional, highly t

Arturo Jamaica 48 Jan 9, 2023
Kotlin implementation of WalletConnect v2 protocol for Android applications

WalletConnect V2 - Kotlin Kotlin implementation of WalletConnect v2 protocol for

WalletConnect 92 Jan 6, 2023
Kotlin library for creating long running connections using MQTT protocol

About Courier Courier is a kotlin library for creating long running connections using MQTT protocol. Long running connection is a persistent connectio

Gojek 92 Dec 23, 2022
Signal Protocol library for Java/Android

Overview A ratcheting forward secrecy protocol that works in synchronous and asynchronous messaging environments. PreKeys This protocol uses a concept

Signal 1.8k Dec 24, 2022
Gradle plugin for Google Protocol Buffers

Gradle Protobuf Plugin Author: Andrew Kroh Download: See maven central License: Apache License, Version 2.0 Requirements: Java 1.5+ Google Protocol Bu

Andrew Kroh 36 May 29, 2022
Create Android Demo with TCP/IP Protocol.

DEMO说明文档 本demo为Java 编写的给Android手机或平板使用TCP方式控制Dobot协作机器人CR(以下简称CR)的DEMO DEMO系统要求 Android 4.3版本以上即可 工程文件说明 工程文件需要使用Android Studio打开,请使用4.0版本的Android Stu

Dobot 1 Aug 16, 2022
Kotlin-echo-client - Echo client using Kotlin with Ktor networking library

Overview This repository contains an echo server implemented with Kotlin and kto

Elliot Barlas 2 Sep 1, 2022
Kotlin-client-dsl - A kotlin-based dsl project for a (Client) -> (Plugin) styled program

kotlin-client-dsl a kotlin-based dsl project for a (Client) -> (Plugin) styled p

jackson 3 Dec 10, 2022
An unofficial Zerotier Android client patched from official client

An unofficial Zerotier Android client patched from official client

KAAAsS 819 Dec 29, 2022
Ktor-Client this is the client part that uses the Ktor server

Ktor-Client this is the client part that uses the Ktor server Previews Tech stack & Open source libraries Minimum SDK level 21. Kotlin+ Coroutines + F

Mohamed Emad 4 Dec 23, 2022