Selenium WebSocket Message Capturing-Python

I was working on ESP8266 Websocket Project , There was a need to capture the websocket messages. Here is my test server where you can see the sample websocket message transactions.

https://github.com/dvxlab/ESP8266_WebSocket_DH11

Here is the source code for capturing the messages.

#DVXLab @2019 All rights reserved
# MIT License 

#sudo apt-get install python3-pip
#pip install selenium 
#download chrome webdriver & keep in the same directory
from selenium import webdriver
import sys
import  time
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.chrome.options import Options
import os
import json

chrm_options=Options()
chrm_caps = webdriver.DesiredCapabilities.CHROME.copy()
chrm_caps['goog:loggingPrefs'] = { 'performance':'ALL' }
#driver = webdriver.Chrome(executable_path = 'chromedriver.exe', chrome_options=chrm_options,desired_capabilities=chrm_caps) Windows
driver = webdriver.Chrome(executable_path = '/opt/blog/chromedriver', chrome_options=chrm_options,desired_capabilities=chrm_caps) #Linux


def LoadWebDriver() :
    print("Web driver Init ")
    base_url = "http://192.168.1.5:80"  #Change the site
    print('Loading URL ....')
    driver.get(base_url )
    

def WebSocketLog():
    for wsData in driver.get_log('performance'):
        #print(wsData) 
        wsJson = json.loads((wsData['message']))
        if wsJson["message"]["method"]== "Network.webSocketFrameReceived":
            print ("Rx :"+ str(wsJson["message"]["params"]["timestamp"]) + wsJson["message"]["params"]["response"]["payloadData"])
        if wsJson["message"]["method"] =="Network.webSocketFrameSent":
            print ("Tx :"+ wsJson["message"]["params"]["response"]["payloadData"])

LoadWebDriver()
print("Waiting")
time.sleep(30) #Capture messages for 30sec, integrate your code here 
WebSocketLog() # Finally print log
print("done")

captured message

{
   "level": "INFO",
   "message": {
      "message": {
         "method": "Network.webSocketFrameReceived",
         "params": {
            "requestId": "15800.14",
            "response": {
               "mask": false,
               "opcode": 1,
               "payloadData": {
                  "temperature": 27.1,
                  "humidity": 62
               }
            },
            "timestamp": 19230.781
         }
      },
      "webview": "E12239730657D412C85C4D48F8F4931B"
   },
   "timestamp": 1605025862583
}



{
   "level": "INFO",
   "message": {
      "message": {
         "method": "Network.webSocketFrameSent",
         "params": {
            "requestId": "16240.14",
            "response": {
               "mask": true,
               "opcode": 1,
               "payloadData": {
                  "message": "led",
                  "led1": "0",
                  "led2": 0,
                  "led3": 1,
                  "led4": 1
               }
            },
            "timestamp": 19632.316
         }
      },
      "webview": "D015CF073AC78B7E71581871C7ADC6B3"
   },
   "timestamp": 1605026261184
}

Leave a Reply