Proxy for Chrome DevTools. Fully compatible with Selenium and ChromeDriver
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
devtools
examples
tests
.gitignore
.gitmodules
.travis.yml
LICENSE.txt
README.md
build-standalone.sh
requirements-build.txt
requirements-dev.txt
requirements.txt
run-tests.sh
setup.py

README.md

DevTools Proxy

Build Status PyPI GitHub release

DevTools Proxy is a tool for creating simultaneous connections via DevTools Protocol (which is not possible by default and it is possible since Chrome 63 even without DevTools Proxy).

How it works

+---+      +---+
| C |      |   |
| L |      | D |    +-----------+
| I |      | E |    |           |
| E |<---->| V |    |  BROWSER  |
| N |      | T |    |           |
| T |      | O |    |           |
+---+      | O |    |   +---+   |
           | L |    |   | T |   |
           | S |<-----> | A |   |
+---+      |   |    |   | B |   |
| C |      | P |    |   +---+   |
| L |      | R |    |           |
| I |<---->| O |    |           |
| E |      | X |    |           |
| N |      | Y |    +-----------+
| T |      |   |
+---+      +---+

Installation

  • Download & unzip standalone binary for your system.
  • If you use Python (at least 3.6) you can install it via pip: pip install devtools-proxy

Usage

With Selenium and ChromeDriver

There are examples for Python and Ruby. Demos for CPU Throttling, Network requests and Remote debugging.

Standalone (for any language)

  • Configure ChromeOptions:
    • Set path to chrome-wrapper.sh as a binary. Optional arguments are mentioned in example for Python below
    • Add --devtools-proxy-binary=/path/to/devtools-proxy to args

Python

devtools-proxy pypi package supports at least Python 3.6. If you use lower Python version use Standalone package.

pip install -U devtools-proxy
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

from devtools.proxy import CHROME_WRAPPER_PATH

devtools_proxy_binary = 'devtools-proxy' # Or path to `devtools-proxy` from downloaded binaries

capabilities = DesiredCapabilities.CHROME.copy()
capabilities['chromeOptions'] = {
    'binary': CHROME_WRAPPER_PATH, # Or path to `chrome-wrapper.sh` from downloaded binaries
    'args': [
        f'--devtools-proxy-binary={devtools_proxy_binary}',
        # Optional arguments:
        # '--chrome-binary=/path/to/chrome/binary', # Path to real Chrome/Chromium binary
        # '--devtools-proxy-chrome-debugging-port=some-free-port', # Port which proxy will listen. Default is 12222
        # '--devtools-proxy-args=--additional --devtools-proxy --arguments, # Additional arguments for devtools-proxy from `devtools-proxy --help`
    ],
}

With multiple Devtools instances

  • Run devtools-proxy (by default it started on 9222 port)
  • Run Chrome with parameters --remote-debugging-port=12222 --remote-debugging-address=127.0.0.1
  • Open a website which you want to inspect
  • Open debugger in a new Chrome tab: http://localhost:9222 and choose your website to inspect
  • Repeat the previous step as many times as you need it