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

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

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

  • Импортировать модуль python через Интернет / несколько протоколов или динамически создавать модуль
  • Периодическое выполнение функции в скрученном протоколе
  • Как раскрыть объект ssl.SSLContext
  • Отправка сообщений с других языков на ядро ​​IPython
  • Гарантируется ли TCP в порядке?
  • Например (в 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 , но действительно был бы доволен любыми указателями.

  • YAML загружает 5e-6 как строку, а не число
  • Добавить элемент в json в python
  • Как я могу использовать python для определения конкретного значения json по ключу?
  • Могу ли я реализовать пользовательский отступ для довольно-типовой печати в модуле JSON Python?
  • Render JSON без замены символов в Jinja
  • Дессериализация строки json для объекта в python
  • 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 

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

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