Мониторинг протоколов протоколов JSON

Согласно документации на селен, взаимодействие между клиентом webdriver и браузером осуществляется через JSON Wire Protocol . В основном клиент, написанный на python, ruby, java, отправляет сообщения JSON в веб-браузер, а веб-браузер также отвечает на JSON.

Есть ли способ просмотреть / уловить / зарегистрировать эти сообщения JSON во время тестирования селена?

Например (в Python):

from selenium import webdriver driver = webdriver.Chrome() driver.get('http://google.com') driver.close() 

Я хочу посмотреть, какие сообщения JSON идут между клиентом pelon selenium webdriver и браузером при создании экземпляра драйвера (в данном случае Chrome): webdriver.Chrome() , когда я получаю страницу: driver.get('http://google.com') и когда я его закрываю: driver.close() .

FYI, в учебнике #SFSE: Stripping Down Remote WebDriver это делается путем захвата сетевого трафика между локальным компьютером, на котором выполняется сценарий, и удаленным сервером селена.

Я помещаю вопрос как специфичный для Python , но действительно был бы доволен любыми указателями.

  • Scrapy with selenium, webdriver, не создающий экземпляр
  • Как получить цвет веб-элемента с помощью Selenium WebDriver с помощью python?
  • Как установить размер окна с помощью phantomjs и selenium webdriver в python
  • Мне нужно, чтобы Selenium открывал веб-браузер в большем разрешении (желательно максимально)
  • Запуск Selenium Webdriver с прокси-сервером в Python
  • Прокрутка страницы с помощью Selenium Webdriver
  • Как загрузить сеанс и файлы cookie из браузера Selenium в библиотеку запросов в Python?
  • Поддержка Chrome 59 для базовых учетных данных в URL-адресах, альтернативных для использования с Chromedriver?
  • 2 Solutions collect form web for “Мониторинг протоколов протоколов JSON”

    Когда вы используете Chrome, вы можете направить экземпляр chromedriver который будет управлять Chrome, чтобы регистрировать больше информации, чем то, что доступно через пакет logging . Эта информация включает команды, отправленные в браузер, и ответы, которые он получает. Вот пример:

     from selenium import webdriver driver = webdriver.Chrome(service_log_path="/tmp/log") driver.get("http://www.google.com") driver.find_element_by_css_selector("input") driver.quit() 

    Приведенный выше код выведет журнал в /tmp/log . Часть журнала, соответствующая find_element_... выглядит следующим образом:

     [2.389][INFO]: COMMAND FindElement { "sessionId": "b6707ee92a3261e1dc33a53514490663", "using": "css selector", "value": "input" } [2.389][INFO]: Waiting for pending navigations... [2.389][INFO]: Done waiting for pending navigations [2.398][INFO]: Waiting for pending navigations... [2.398][INFO]: Done waiting for pending navigations [2.398][INFO]: RESPONSE FindElement { "ELEMENT": "0.3367185448296368-1" } 

    Насколько я знаю, команды и ответы точно представляют, что происходит между клиентом и сервером. Я отправил отчеты об ошибках и исправления в проект Selenium на основе того, что я видел в этих журналах.

    Нашел один вариант, который почти соответствует моим потребностям.

    Простое подключение регистратора к stdout позволяет увидеть сделанные базовые запросы:

     import logging import sys from selenium import webdriver # pipe logs to stdout logger = logging.getLogger() logger.addHandler(logging.StreamHandler(sys.stdout)) logger.setLevel(logging.NOTSET) # selenium specific code driver = webdriver.Chrome() driver.get('http://google.com') driver.close() 

    Он печатает:

     POST http://127.0.0.1:56668/session {"desiredCapabilities": {"platform": "ANY", "browserName": "chrome", "version": "", "javascriptEnabled": true, "chromeOptions": {"args": [], "extensions": []}}} Finished Request POST http://127.0.0.1:56668/session/5b6875595143b0b9993ed4f66f1f19fc/url {"url": "http://google.com", "sessionId": "5b6875595143b0b9993ed4f66f1f19fc"} Finished Request DELETE http://127.0.0.1:56668/session/5b6875595143b0b9993ed4f66f1f19fc/window {"sessionId": "5b6875595143b0b9993ed4f66f1f19fc"} Finished Request 

    Я не вижу ответов, но это уже прогресс.

    Interesting Posts

    Каков наилучший способ открыть файл для эксклюзивного доступа в Python?

    Как установить модуль Python через setup.py в Windows?

    Метод Python-полосы

    Как библиотеки на разных языках программирования обрабатывают Date & Time, Timestamps & Durations, Leapseconds & -ears, DSTs & Timezones, …?

    Условные аргументы Python Argparse

    Почему + = списка внутри кортежа Python вызывает TypeError, но в любом случае изменить список?

    Как написать строковые литералы в python, не избегая их?

    Можно ли использовать Mysql с SqlAlchemy и Flask, если мой сокет mysql не находится в / tmp?

    Ресурс «corpora / wordnet» не найден на Heroku

    TensorFlow: запомните состояние LSTM для следующей партии (с учетом состояния LSTM)

    Какова цель коллекций. ChainMap?

    Вычисление разницы между временными интервалами между двумя столбцами в часах и минутах

    Как изменить текст метки на языке киви с помощью python

    vim как идеал питона

    Оверлей изображения в 3d-графике с использованием python

    Python - лучший язык программирования в мире.