73 lines
2.4 KiB
Python
73 lines
2.4 KiB
Python
|
|
import json
|
|
import pprint
|
|
|
|
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)
|
|
self.tab.set_listener('Runtime.consoleAPICalled', self.consoleAPICalled)
|
|
|
|
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)
|
|
pprint.pprint('%s:%d' %
|
|
(
|
|
getShortUrl(self.frames[0]['url']),
|
|
self.frames[0]['location']['lineNumber']
|
|
)
|
|
)
|
|
|
|
def onResumed(self, **kwargs):
|
|
print('onResumed')
|
|
|
|
def onScriptFailedToParse(self, **kwargs):
|
|
print('onScriptFailedToParse', kwargs['url'])
|
|
|
|
def consoleAPICalled(self, **kwargs):
|
|
for prop in kwargs['args']:
|
|
if prop['type'] == 'object':
|
|
pprint.pprint(prop['preview']['properties'])
|
|
else:
|
|
print('%s' % (str(prop['value'])))
|
|
|
|
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']
|