vchrome 0.0.4__py3-none-any.whl → 0.0.6__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- vchrome/__init__.py +64 -25
- {vchrome-0.0.4.dist-info → vchrome-0.0.6.dist-info}/METADATA +1 -1
- vchrome-0.0.6.dist-info/RECORD +5 -0
- vchrome-0.0.4.dist-info/RECORD +0 -5
- {vchrome-0.0.4.dist-info → vchrome-0.0.6.dist-info}/WHEEL +0 -0
- {vchrome-0.0.4.dist-info → vchrome-0.0.6.dist-info}/top_level.txt +0 -0
vchrome/__init__.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
__version__ = '0.0.
|
|
1
|
+
__version__ = '0.0.6'
|
|
2
2
|
__author__ = 'v'
|
|
3
3
|
# ----------------------------------------------------------------------------------------------------
|
|
4
4
|
_allowed = {'Chrome'}
|
|
@@ -72,7 +72,7 @@ def cdp_client(hostname, port, debug=False):
|
|
|
72
72
|
self.indent = 44
|
|
73
73
|
if self.debug:
|
|
74
74
|
monkey_print()
|
|
75
|
-
def log(*a):
|
|
75
|
+
def log(self, *a):
|
|
76
76
|
print(*a)
|
|
77
77
|
def __call__(self, tp, a):
|
|
78
78
|
if self.debug:
|
|
@@ -85,20 +85,20 @@ def cdp_client(hostname, port, debug=False):
|
|
|
85
85
|
cse = c.get('sessionId')
|
|
86
86
|
cmd = c.get('method')
|
|
87
87
|
if self.debug(cmd):
|
|
88
|
-
|
|
88
|
+
self.log(self._T('c', cse), '[<={:3}] {}'.format(id, cmd).ljust(self.indent, ' '), self._L(a, 'result'))
|
|
89
89
|
if md:
|
|
90
90
|
if self.debug(md):
|
|
91
|
-
|
|
91
|
+
self.log(self._T('i', se), (' '*8 + md).ljust(self.indent, ' '), self._L(a, 'params'))
|
|
92
92
|
elif tp == 'req':
|
|
93
93
|
id = a.get('id')
|
|
94
94
|
md = a.get('method')
|
|
95
95
|
se = a.get('sessionId')
|
|
96
96
|
if self.debug(md):
|
|
97
97
|
self._C(id, a)
|
|
98
|
-
|
|
98
|
+
self.log(self._T('c', se), '[->{:3}] {}'.format(id, md).ljust(self.indent, ' '), self._L(a, 'params'))
|
|
99
99
|
else:
|
|
100
100
|
if self.debug.rest:
|
|
101
|
-
|
|
101
|
+
self.log(self._T('i'), (' '*8 + tp).ljust(self.indent, ' '), a)
|
|
102
102
|
class Pool:
|
|
103
103
|
import queue, time, traceback
|
|
104
104
|
from threading import Thread, main_thread
|
|
@@ -807,22 +807,25 @@ def cdp_client(hostname, port, debug=False):
|
|
|
807
807
|
if self.f.root.filter_extension(tinfo):
|
|
808
808
|
self.f.root._del_init_check()
|
|
809
809
|
return
|
|
810
|
+
# TODO
|
|
811
|
+
# need to be compatible with service_worker in the future
|
|
810
812
|
if rdata['params'].get('targetInfo', {}).get('type') == 'service_worker':
|
|
811
813
|
self.f.root._del_init_check()
|
|
812
814
|
return
|
|
813
|
-
# TODO
|
|
814
|
-
# need to be compatible with workers in the future
|
|
815
815
|
if rdata['params'].get('targetInfo', {}).get('type') == 'worker':
|
|
816
|
-
|
|
816
|
+
sessionId = rdata['params']['sessionId']
|
|
817
|
+
self.f.cdp('Runtime.enable', sessionId=sessionId)
|
|
818
|
+
self.f._work_init_js(sessionId=sessionId)
|
|
819
|
+
self.f.cdp('Runtime.runIfWaitingForDebugger', sessionId=sessionId)
|
|
817
820
|
self.f.root._del_init_check()
|
|
818
821
|
return
|
|
819
822
|
frameId = tinfo['targetId']
|
|
820
823
|
sessionId = rdata['params']['sessionId']
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
824
|
+
self.f.cdp("Target.setAutoAttach", {
|
|
825
|
+
"autoAttach": True,
|
|
826
|
+
"waitForDebuggerOnStart": True,
|
|
827
|
+
"flatten": True,
|
|
828
|
+
}, sessionId=sessionId)
|
|
826
829
|
self.f.cdp('DOM.enable', sessionId=sessionId)
|
|
827
830
|
self.f.cdp('Page.enable', sessionId=sessionId)
|
|
828
831
|
self.f.cdp('Runtime.enable', sessionId=sessionId)
|
|
@@ -846,7 +849,7 @@ def cdp_client(hostname, port, debug=False):
|
|
|
846
849
|
self.f.root._del_init_check()
|
|
847
850
|
def Target_detachedFromTarget(self, rdata):
|
|
848
851
|
sessionId = rdata['params']['sessionId']
|
|
849
|
-
|
|
852
|
+
self.f.root.detached_cache_sessionId[sessionId] = perf_counter()
|
|
850
853
|
def Target_targetCreated(self, rdata):
|
|
851
854
|
pass
|
|
852
855
|
def Target_targetInfoChanged(self, rdata):
|
|
@@ -1689,7 +1692,8 @@ def cdp_client(hostname, port, debug=False):
|
|
|
1689
1692
|
# "positionY": 200,
|
|
1690
1693
|
# }, sessionId=sessionId)
|
|
1691
1694
|
class CoreCDP:
|
|
1692
|
-
def __init__(self, ws, root, logger=None):
|
|
1695
|
+
def __init__(self, f, ws, root, logger=None):
|
|
1696
|
+
self.f = f
|
|
1693
1697
|
self.ws = ws
|
|
1694
1698
|
self.root = root
|
|
1695
1699
|
self.logger = logger or (lambda *a,**kw:None)
|
|
@@ -1698,6 +1702,7 @@ def cdp_client(hostname, port, debug=False):
|
|
|
1698
1702
|
self.qret = {}
|
|
1699
1703
|
self.irun = {}
|
|
1700
1704
|
self._start()
|
|
1705
|
+
self._cache_del = []
|
|
1701
1706
|
def _start(self):
|
|
1702
1707
|
self.is_running = True
|
|
1703
1708
|
self.loop_recv = Thread(target=self.start_loop)
|
|
@@ -1764,6 +1769,13 @@ def cdp_client(hostname, port, debug=False):
|
|
|
1764
1769
|
def get_xid(self):
|
|
1765
1770
|
self.xid += 1
|
|
1766
1771
|
return self.xid
|
|
1772
|
+
def check_del_cache(self):
|
|
1773
|
+
if self._cache_del:
|
|
1774
|
+
_rid, _tid, cache_obj = self._cache_del[-1]
|
|
1775
|
+
if perf_counter() - _rid > 30:
|
|
1776
|
+
self._cache_del.pop()
|
|
1777
|
+
if _tid in cache_obj:
|
|
1778
|
+
del cache_obj[_tid]
|
|
1767
1779
|
def cdp(self, protocal, data={}, sessionId=None, no_wait=False, limit_time=None):
|
|
1768
1780
|
rid = self.get_id()
|
|
1769
1781
|
cmd = { "id": rid, "method": protocal, "params": data }
|
|
@@ -1792,6 +1804,21 @@ def cdp_client(hostname, port, debug=False):
|
|
|
1792
1804
|
if perf_counter() - start > limit_time:
|
|
1793
1805
|
self.qret.pop(rid, None)
|
|
1794
1806
|
return {'vvv': 'over time'}
|
|
1807
|
+
if sessionId:
|
|
1808
|
+
_tid = sessionId
|
|
1809
|
+
_rid = self.root.detached_cache_sessionId.get(_tid, None)
|
|
1810
|
+
if _rid:
|
|
1811
|
+
self._cache_del.append([_rid, _tid, self.root.detached_cache_sessionId])
|
|
1812
|
+
self.qret.pop(rid, None)
|
|
1813
|
+
return {'vvv': 'detached sessionId'}
|
|
1814
|
+
else:
|
|
1815
|
+
_tid = getattr(self.f, 'frameId', None)
|
|
1816
|
+
_rid = self.root.detached_cache_targetId.get(_tid, None)
|
|
1817
|
+
if _rid:
|
|
1818
|
+
self._cache_del.append([_rid, _tid, self.root.detached_cache_targetId])
|
|
1819
|
+
self.qret.pop(rid, None)
|
|
1820
|
+
return {'vvv': 'detached targetId'}
|
|
1821
|
+
self.check_del_cache()
|
|
1795
1822
|
ret = self.qret[rid].get(timeout=.15)
|
|
1796
1823
|
self.qret.pop(rid, None)
|
|
1797
1824
|
return try_run_result(ret)
|
|
@@ -1934,6 +1961,7 @@ def cdp_client(hostname, port, debug=False):
|
|
|
1934
1961
|
self.type = wsinfo['type']
|
|
1935
1962
|
self.frames = []
|
|
1936
1963
|
self._doc_script = []
|
|
1964
|
+
self._wok_script = []
|
|
1937
1965
|
self.url = wsinfo.get('url')
|
|
1938
1966
|
self.parent = None
|
|
1939
1967
|
self.init_once = False
|
|
@@ -1942,7 +1970,7 @@ def cdp_client(hostname, port, debug=False):
|
|
|
1942
1970
|
self.sessionId = None # Used to maintain consistency with CDPTools objects
|
|
1943
1971
|
self.contextId = None # Used to maintain consistency with CDPTools objects
|
|
1944
1972
|
self.iso_contextId = None # Used to maintain consistency with CDPTools objects
|
|
1945
|
-
self.cdper = CoreCDP(self.ws, self.root, self.logger)
|
|
1973
|
+
self.cdper = CoreCDP(self, self.ws, self.root, self.logger)
|
|
1946
1974
|
self.cdper.attach(self)
|
|
1947
1975
|
if is_auto_create: self._run_init_once()
|
|
1948
1976
|
self.root.add_root_frame(self)
|
|
@@ -2043,12 +2071,21 @@ def cdp_client(hostname, port, debug=False):
|
|
|
2043
2071
|
break
|
|
2044
2072
|
f = self.cdp("Page.getFrameTree")
|
|
2045
2073
|
self.url = f['frameTree']['frame']['url']
|
|
2046
|
-
def init_js(self, script):
|
|
2047
|
-
|
|
2074
|
+
def init_js(self, script, type='page'):
|
|
2075
|
+
if type == 'page':
|
|
2076
|
+
self._doc_script.append(script)
|
|
2077
|
+
elif type == 'worker':
|
|
2078
|
+
self._wok_script.append(script)
|
|
2079
|
+
else:
|
|
2080
|
+
raise Exception('type must in (page/worker) default is page.')
|
|
2048
2081
|
def _page_init_js(self, sessionId=None):
|
|
2049
2082
|
if self._doc_script:
|
|
2050
2083
|
for s in self._doc_script:
|
|
2051
2084
|
self.cdp('Page.addScriptToEvaluateOnNewDocument', {"source": s}, sessionId=sessionId)
|
|
2085
|
+
def _work_init_js(self, sessionId=None):
|
|
2086
|
+
if self._wok_script:
|
|
2087
|
+
for s in self._wok_script:
|
|
2088
|
+
self.cdp('Runtime.evaluate', {"expression": s}, sessionId=sessionId)
|
|
2052
2089
|
def tree_view(self):
|
|
2053
2090
|
r = ''
|
|
2054
2091
|
def print_tree(f, level=0, prefix=''):
|
|
@@ -2072,7 +2109,7 @@ def cdp_client(hostname, port, debug=False):
|
|
|
2072
2109
|
self.iso_contextId = None # Used to maintain consistency with CDPTools objects
|
|
2073
2110
|
self.ws = create_connection_saf(wsinfo['webSocketDebuggerUrl'], enable_multithread=True, suppress_origin=True)
|
|
2074
2111
|
self.logger = Logger(wsinfo['id'], debug)
|
|
2075
|
-
self.cdper = CoreCDP(self.ws, self.root, self.logger)
|
|
2112
|
+
self.cdper = CoreCDP(self, self.ws, self.root, self.logger)
|
|
2076
2113
|
self.cdper.attach(self)
|
|
2077
2114
|
self.cdp('Runtime.enable')
|
|
2078
2115
|
self.tools = CDPTools(self, self)
|
|
@@ -2124,10 +2161,11 @@ def cdp_client(hostname, port, debug=False):
|
|
|
2124
2161
|
class Root:
|
|
2125
2162
|
def __init__(self, verison, iframes):
|
|
2126
2163
|
self.pool = Pool(10)
|
|
2127
|
-
self.id = 0
|
|
2128
2164
|
self.verison = verison
|
|
2129
2165
|
self.iframes = iframes
|
|
2130
2166
|
self.active = None
|
|
2167
|
+
self.detached_cache_sessionId = {}
|
|
2168
|
+
self.detached_cache_targetId = {}
|
|
2131
2169
|
self.new_tab_frame = {}
|
|
2132
2170
|
self.create_tab_must_be_single = queue.Queue(1)
|
|
2133
2171
|
self.tabs = []
|
|
@@ -2135,7 +2173,7 @@ def cdp_client(hostname, port, debug=False):
|
|
|
2135
2173
|
self.init_sign = 0
|
|
2136
2174
|
self.ws = create_connection_saf(verison['webSocketDebuggerUrl'], enable_multithread=True, suppress_origin=True)
|
|
2137
2175
|
self.logger = Logger('[[ ---------- ROOT ---------- ]]', debug)
|
|
2138
|
-
self.cdper = CoreCDP(self.ws, self, self.logger)
|
|
2176
|
+
self.cdper = CoreCDP(self, self.ws, self, self.logger)
|
|
2139
2177
|
self.cdper.attach(self)
|
|
2140
2178
|
self.extension = ExtensionManager(self)
|
|
2141
2179
|
self.extension.set_extension(self._get_extension())
|
|
@@ -2145,6 +2183,7 @@ def cdp_client(hostname, port, debug=False):
|
|
|
2145
2183
|
"flatten": True,
|
|
2146
2184
|
})
|
|
2147
2185
|
self.set_method_callback('Target.attachedToTarget', self.Target_attachedToTarget)
|
|
2186
|
+
self.set_method_callback('Target.detachedFromTarget', self.Target_detachedFromTarget)
|
|
2148
2187
|
# self.cdp("Target.setDiscoverTargets", { "discover": True })
|
|
2149
2188
|
def filter_extension(self, tinfo):
|
|
2150
2189
|
return tinfo['url'].startswith('chrome-extension://') and tinfo['url'].endswith('/vvv.js')
|
|
@@ -2176,6 +2215,9 @@ def cdp_client(hostname, port, debug=False):
|
|
|
2176
2215
|
'type': tinfo['type'],
|
|
2177
2216
|
'url': tinfo['url'],
|
|
2178
2217
|
}, self)
|
|
2218
|
+
def Target_detachedFromTarget(self, rdata):
|
|
2219
|
+
targetId = rdata['params']['targetId']
|
|
2220
|
+
self.detached_cache_targetId[targetId] = perf_counter()
|
|
2179
2221
|
def Target_attachedToTarget(self, rdata):
|
|
2180
2222
|
params = rdata['params']
|
|
2181
2223
|
sessionId = params.get('sessionId')
|
|
@@ -2207,9 +2249,6 @@ def cdp_client(hostname, port, debug=False):
|
|
|
2207
2249
|
def _del_init_check(self):
|
|
2208
2250
|
if self.is_init:
|
|
2209
2251
|
self.init_sign -= 1
|
|
2210
|
-
def get_new_id(self):
|
|
2211
|
-
self.id += 1
|
|
2212
|
-
return self.id
|
|
2213
2252
|
def add_root_frame(self, f):
|
|
2214
2253
|
if not self.active and f.type == 'page':
|
|
2215
2254
|
self.active = f
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
vchrome/__init__.py,sha256=LehDiIhsxdw_sRHslCqcrW21btiPNSXsN65u4uJdwjQ,208869
|
|
2
|
+
vchrome-0.0.6.dist-info/METADATA,sha256=ubvdFQ7Lj9XQPSrQkvQz7PR18_vXebRpkS9IHl__0iU,54
|
|
3
|
+
vchrome-0.0.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
4
|
+
vchrome-0.0.6.dist-info/top_level.txt,sha256=oB919Fa09PCy48Ptj8iy-1QUcvhEeY97MOR42281Fk0,8
|
|
5
|
+
vchrome-0.0.6.dist-info/RECORD,,
|
vchrome-0.0.4.dist-info/RECORD
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
vchrome/__init__.py,sha256=jr8vqeslue8Qsks_Q8u8Hil5EGfJv9ZwTozKgWbF1A8,206643
|
|
2
|
-
vchrome-0.0.4.dist-info/METADATA,sha256=naCPRYBSrjbxNhwRaaccILJPsCYF5Re_Yh6mGtJnAfI,54
|
|
3
|
-
vchrome-0.0.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
4
|
-
vchrome-0.0.4.dist-info/top_level.txt,sha256=oB919Fa09PCy48Ptj8iy-1QUcvhEeY97MOR42281Fk0,8
|
|
5
|
-
vchrome-0.0.4.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|