ChromeDevTools

Async Chrome DevTools


Keywords
async chrome devtools
License
Noweb
Install
pip install ChromeDevTools==0.3.9

Documentation

Description

Asynchronous Python library for Chrome DevTools.

Install

# via github
pip install git+git://github.com/codedumps/async-chrome-dev-tools.git
# via pip
pip install -U ChromeDevTools

Chrome Debugging Mode

Launch Chrome instance with argument --remote-debugging-port:

$ google-chrome-stable --remote-debugging-port=9222

Instead of Chrome you can use Chronium.

Usage

import asyncio
from ChromeDevTools import ChromeDevTools


async def run():
  devtools = ChromeDevTools()
  tab = await devtools.new_tab('http://linux.org.ru')
  ...


asyncio.get_event_loop().run_until_complete(run())

API

Инстанс Chrome принимает команды по http и через вебсокеты. По http мы можем управлять табами. Чтобы получить исходный код страницы, выполнить JavaScript на ней, перехватить запросы и т.д., нужно подключиться к табу через вебсокеты, а затем отправить команду через jsonrpc. Вызов jsonrpc-методов реализован с помощью обращения к несуществующим атрибутам объектов. Например, вызов метода Page.captureScreenshot будет выглядеть так:

response = await tab.page.capture_screenshot(format='png', quality=100)
print(response.result.data)

Общий вид вызова метода:

tab.domain.method(params_dict, param1=value1, param2=value2, ...)

Первая буква имени домена переводится в верхний регистр, имя метода из under_score транслируется в camelCase.

Не все методы API предполагают возвращение ответа. К имени таких методов нужно добавлять окончание _nowait. Пример для Network.enable:

await tab.network.enable_nowait()
async for event in tab:
  # Обрабатываем события

Tests

pytest tests -s

Links