100 lines
2.7 KiB
Python
100 lines
2.7 KiB
Python
import json
|
|
from utils import WIPObject, Command
|
|
|
|
|
|
def evaluate(expression, objectGroup=None, returnByValue=None):
|
|
params = {}
|
|
|
|
params['expression'] = expression
|
|
|
|
if(objectGroup):
|
|
params['objectGroup'] = objectGroup
|
|
|
|
if(returnByValue):
|
|
params['returnByValue'] = returnByValue
|
|
|
|
command = Command('Runtime.evaluate', params)
|
|
return command
|
|
|
|
|
|
def getProperties(objectId, ownProperties=False):
|
|
params = {}
|
|
|
|
params['objectId'] = str(objectId)
|
|
params['ownProperties'] = ownProperties
|
|
|
|
command = Command('Runtime.getProperties', params)
|
|
return command
|
|
|
|
|
|
def getProperties_parser(result):
|
|
data = []
|
|
for propertyDescriptor in result['result']:
|
|
data.append(PropertyDescriptor(propertyDescriptor))
|
|
return data
|
|
|
|
|
|
class RemoteObject(WIPObject):
|
|
def __init__(self, value):
|
|
self.set(value, 'className')
|
|
self.set(value, 'description')
|
|
self.set_class(value, 'objectId', RemoteObjectId)
|
|
self.set(value, 'subtype')
|
|
self.set(value, 'type')
|
|
self.set(value, 'value')
|
|
|
|
def __str__(self):
|
|
if self.type == 'boolean':
|
|
return str(self.value)
|
|
if self.type == 'string':
|
|
return str(self.value)
|
|
if self.type == 'undefined':
|
|
return 'undefined'
|
|
if self.type == 'number':
|
|
return str(self.value)
|
|
if self.type == 'object':
|
|
if not self.objectId():
|
|
return 'null'
|
|
else:
|
|
if self.className:
|
|
return self.className
|
|
if self.description:
|
|
return self.description
|
|
return '{ ... }'
|
|
if self.type == 'function':
|
|
return self.description.split('\n')[0]
|
|
|
|
|
|
class PropertyDescriptor(WIPObject):
|
|
def __init__(self, _value):
|
|
self.set(_value, 'configurable')
|
|
self.set(_value, 'enumerable')
|
|
#self.set_class(_value, 'get', RemoteObject)
|
|
#self.set_class(_value, 'set', RemoteObject)
|
|
self.set(_value, 'name')
|
|
self.set_class(_value, 'value', RemoteObject)
|
|
self.set(_value, 'wasThrown')
|
|
self.set(_value, 'writable')
|
|
|
|
def __str__(self):
|
|
return self.name
|
|
|
|
|
|
class RemoteObjectId(WIPObject):
|
|
def __init__(self, value):
|
|
self.value = value
|
|
|
|
def __str__(self):
|
|
return self.value
|
|
|
|
def __call__(self):
|
|
return self.value
|
|
|
|
def dumps(self):
|
|
objid = json.loads(self.value)
|
|
return "Object_%d_%d" % (objid['injectedScriptId'], objid['id'])
|
|
|
|
def loads(self, text):
|
|
parts = text.split('_')
|
|
self.value = '{"injectedScriptId":%s,"id":%s}' % (parts[1], parts[2])
|
|
return self.value
|