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
- Chrome DevTools – общая ифнормация;
- Chrome DevTools Protocol – список методов, доступных для вызова через jsonrpc