# 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/