import json def getShortUrl(url): return url.replace('http://localhost:7456/', '') class ScriptMgr: def __init__(self, tab): self.curr_frame = 0 self.frames = [] self.scripts = [] self.tab = tab self.tab.set_listener('Debugger.scriptParsed', self.onScriptParsed) self.tab.set_listener('Debugger.breakpointResolved', self.onBreakpointResolved) self.tab.set_listener('Debugger.paused', self.onPaused) self.tab.set_listener('Debugger.resumed', self.onResumed) self.tab.set_listener('Debugger.scriptFailedToParse', self.onScriptFailedToParse) def onScriptParsed(self, **kwargs): self.scripts.append(kwargs) def onBreakpointResolved(self, **kwargs): print('onBreakpointResolved') def onPaused(self, **kwargs): print('onPaused') self.frames = [] for frame in kwargs['callFrames']: self.frames.append(frame) def onResumed(self, **kwargs): print('onResumed') def onScriptFailedToParse(self, **kwargs): print('onScriptFailedToParse', kwargs['url']) def getUrl(self, filename): for script in self.scripts: if filename in script['url']: return script['url'] return None def dumpStack(self): for frame in self.frames: print('%30s %s:%d' % ( frame['functionName'] + ':' + str(json.loads(frame['callFrameId'])['ordinal']) + ':' + str(json.loads(frame['callFrameId'])['injectedScriptId']), getShortUrl(frame['url']), frame['functionLocation']['lineNumber'], ) ) def getFrameId(self): return self.frames[self.curr_frame]['callFrameId']