README.md

# Tungsten

[Documentation][docs] | [Hex.pm][hex]

Tungsten is a library for browser automation using the [Chrome DevTools Protocol][cdp-docs] for use in Elixir projects. It offers a low-level API to communicate with the Chrome DevTools Protocol. It can be used for end-to-end testing, for testing external dependencies, to automate tasks on websites without API, for scraping and for PDF generation.

## In Active Development
This package is currently under heavy development and shouldn't be considered stable.

## Installation

To install Tungsten, add `tungsten` to your list of dependencies in `mix.exs`:

```elixir
def deps do
  [
    {:tungsten, "~> 0.1.0"}
  ]
end
```

## Basic Usage
Assuming you have a browser running with `--remote-debugging-port=9222`, you can
fetch the `webSocketDebuggerUrl` from `http://localhost:9222/json/version`.

```elixir
alias Tungsten.{CDP.Target, CDP.Runtime, Connection, Transport.Websocket}

# Start Connection
transport = {Websocket, url: websocket_debugger_url}
{:ok, conn} = Connection.start_link(transport: transport)

# Create CDP session and attach
{:ok, %{target_id: target_id}} = Target.create_target(conn, %{url: "https://google.com"})
{:ok, %{session_id: session_id}} = Target.attach_to_target(conn, %{target_id: target_id, flatten: true})

# Execute commands on a CDP session
{:ok, %{result: %{type: :string, value: "Mozilla/5.0 ..."}}} =
  Runtime.evaluate(conn, %{expression: "navigator.userAgent"}, session_id: session_id)
```

[hex]: https://hex.pm/packages/tungsten
[docs]: https://hexdocs.pm/tungsten
[cdp-docs]: https://chromedevtools.github.io/devtools-protocol/