vchrome 0.1.9__py3-none-any.whl → 0.1.11__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 +44 -15
- {vchrome-0.1.9.dist-info → vchrome-0.1.11.dist-info}/METADATA +1 -1
- vchrome-0.1.11.dist-info/RECORD +6 -0
- vchrome-0.1.9.dist-info/RECORD +0 -6
- {vchrome-0.1.9.dist-info → vchrome-0.1.11.dist-info}/WHEEL +0 -0
- {vchrome-0.1.9.dist-info → vchrome-0.1.11.dist-info}/top_level.txt +0 -0
vchrome/__init__.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
__version__ = '0.1.
|
|
1
|
+
__version__ = '0.1.11'
|
|
2
2
|
__author__ = 'v'
|
|
3
3
|
# ----------------------------------------------------------------------------------------------------
|
|
4
4
|
_allowed = {'Chrome'}
|
|
@@ -15,6 +15,7 @@ import copy
|
|
|
15
15
|
import types
|
|
16
16
|
import queue
|
|
17
17
|
import time
|
|
18
|
+
import ast
|
|
18
19
|
import inspect
|
|
19
20
|
import textwrap
|
|
20
21
|
import threading
|
|
@@ -252,6 +253,18 @@ def cdp_client(hostname, port, debug=False, runtimeEnable=False, cfg={}):
|
|
|
252
253
|
return data
|
|
253
254
|
if is_err:
|
|
254
255
|
raise Exception(is_err)
|
|
256
|
+
def has_print(func):
|
|
257
|
+
try:
|
|
258
|
+
if not func:
|
|
259
|
+
return False
|
|
260
|
+
code = textwrap.dedent(inspect.getsource(func))
|
|
261
|
+
tree = ast.parse(code)
|
|
262
|
+
for node in ast.walk(tree):
|
|
263
|
+
if isinstance(node, ast.Call):
|
|
264
|
+
if isinstance(node.func, ast.Name) and node.func.id == "print":
|
|
265
|
+
return True
|
|
266
|
+
except:
|
|
267
|
+
return False
|
|
255
268
|
def is_function(obj):
|
|
256
269
|
return type(obj) == types.FunctionType or type(obj) == types.MethodType
|
|
257
270
|
def create_connection_saf(*a, **kw):
|
|
@@ -431,6 +444,8 @@ def cdp_client(hostname, port, debug=False, runtimeEnable=False, cfg={}):
|
|
|
431
444
|
self.call_listen[pk] = [waiter, on_request, on_response]
|
|
432
445
|
self.call_listen_keys = self.call_listen.keys()
|
|
433
446
|
self.call_listen_vals[pk] = [pattern, is_regex]
|
|
447
|
+
# To make it easier to synchronize function printing (if there are print calls within the function).
|
|
448
|
+
if has_print(on_request) or has_print(on_response): monkey_print()
|
|
434
449
|
return waiter
|
|
435
450
|
def _handle_network(self):
|
|
436
451
|
self.f.set_method_callback('Network.requestWillBeSent', self.Network_requestWillBeSent)
|
|
@@ -453,8 +468,7 @@ def cdp_client(hostname, port, debug=False, runtimeEnable=False, cfg={}):
|
|
|
453
468
|
waiter, on_request, on_response = self.call_listen[k]
|
|
454
469
|
if on_request:
|
|
455
470
|
r = SniffNetwork.NetworkRequest(self.info_listen[requestId])
|
|
456
|
-
if on_request(r):
|
|
457
|
-
waiter.add(r)
|
|
471
|
+
if on_request(r): waiter.add(r)
|
|
458
472
|
def Network_requestWillBeSentExtraInfo(self, rdata):
|
|
459
473
|
request_extra = rdata['params']
|
|
460
474
|
requestId = request_extra['requestId']
|
|
@@ -467,8 +481,7 @@ def cdp_client(hostname, port, debug=False, runtimeEnable=False, cfg={}):
|
|
|
467
481
|
waiter, on_request, on_response = self.call_listen[k]
|
|
468
482
|
if on_request:
|
|
469
483
|
r = SniffNetwork.NetworkRequest(self.info_listen[requestId])
|
|
470
|
-
if on_request(r):
|
|
471
|
-
waiter.add(r)
|
|
484
|
+
if on_request(r): waiter.add(r)
|
|
472
485
|
else:
|
|
473
486
|
self.info_listen[requestId] = {}
|
|
474
487
|
self.info_listen[requestId]['request_extra'] = request_extra
|
|
@@ -504,8 +517,7 @@ def cdp_client(hostname, port, debug=False, runtimeEnable=False, cfg={}):
|
|
|
504
517
|
rbody = self.f.cdp('Network.getResponseBody', {"requestId": requestId}, sessionId=rdata.get('sessionId'), limit_time=3)
|
|
505
518
|
self.info_listen[requestId]['response_body'] = rbody
|
|
506
519
|
r = SniffNetwork.NetworkResponse(self.info_listen[requestId])
|
|
507
|
-
if on_response(r):
|
|
508
|
-
waiter.add(r)
|
|
520
|
+
if on_response(r): waiter.add(r)
|
|
509
521
|
self.info_listen.pop(requestId, None)
|
|
510
522
|
self.qlist.get('V')
|
|
511
523
|
def Network_loadingFailed(self, rdata):
|
|
@@ -521,8 +533,7 @@ def cdp_client(hostname, port, debug=False, runtimeEnable=False, cfg={}):
|
|
|
521
533
|
if on_response:
|
|
522
534
|
self.qlist.put('V')
|
|
523
535
|
r = SniffNetwork.NetworkResponse(self.info_listen[requestId])
|
|
524
|
-
if on_response(r):
|
|
525
|
-
waiter.add(r)
|
|
536
|
+
if on_response(r): waiter.add(r)
|
|
526
537
|
self.qlist.get('V')
|
|
527
538
|
class SniffFetch:
|
|
528
539
|
class FetchFakeResponse:
|
|
@@ -712,6 +723,8 @@ def cdp_client(hostname, port, debug=False, runtimeEnable=False, cfg={}):
|
|
|
712
723
|
self.call_change[pk] = [waiter, on_request, on_response]
|
|
713
724
|
self.call_change_keys = self.call_change.keys()
|
|
714
725
|
self.call_change_vals[pk] = [pattern, is_regex]
|
|
726
|
+
# To make it easier to synchronize function printing (if there are print calls within the function).
|
|
727
|
+
if has_print(on_request) or has_print(on_response): monkey_print()
|
|
715
728
|
return waiter
|
|
716
729
|
def _handle_fetch(self):
|
|
717
730
|
self.f.set_method_callback('Fetch.requestPaused', self.Fetch_requestPaused)
|
|
@@ -738,8 +751,7 @@ def cdp_client(hostname, port, debug=False, runtimeEnable=False, cfg={}):
|
|
|
738
751
|
})
|
|
739
752
|
if on_request:
|
|
740
753
|
try:
|
|
741
|
-
if on_request(x):
|
|
742
|
-
waiter.add(x)
|
|
754
|
+
if on_request(x): waiter.add(x)
|
|
743
755
|
except:
|
|
744
756
|
self.f.logger.log('[ERROR] in request on_request', traceback.format_exc())
|
|
745
757
|
continue
|
|
@@ -771,6 +783,15 @@ def cdp_client(hostname, port, debug=False, runtimeEnable=False, cfg={}):
|
|
|
771
783
|
self.f.logger.log('[ERROR] in request on_request continue', traceback.format_exc())
|
|
772
784
|
self.f.cdp('Fetch.continueRequest', {'requestId': requestId}, sessionId=rdata.get('sessionId'))
|
|
773
785
|
else:
|
|
786
|
+
# request: Redirect.
|
|
787
|
+
if 'responseHeaders' in rdata['params'] and type(rdata['params']['responseHeaders']) == list:
|
|
788
|
+
for kv in rdata['params']['responseHeaders']:
|
|
789
|
+
if kv['name'] == 'Location':
|
|
790
|
+
return self.f.cdp('Fetch.continueRequest', {'requestId': requestId, 'url':kv['value']}, sessionId=rdata.get('sessionId'))
|
|
791
|
+
# request: fail Request.
|
|
792
|
+
if 'responseErrorReason' in rdata['params']:
|
|
793
|
+
return self.f.cdp('Fetch.failRequest', {'requestId': requestId, 'errorReason':rdata['params']['responseErrorReason']}, sessionId=rdata.get('sessionId'))
|
|
794
|
+
# response
|
|
774
795
|
for k in self.call_change_keys:
|
|
775
796
|
if self._match_url(self.call_change_vals[k], url):
|
|
776
797
|
waiter, on_request, on_response = self.call_change[k]
|
|
@@ -785,8 +806,7 @@ def cdp_client(hostname, port, debug=False, runtimeEnable=False, cfg={}):
|
|
|
785
806
|
"request": SniffFetch.FetchRequest(rdata['params']['request'])
|
|
786
807
|
})
|
|
787
808
|
try:
|
|
788
|
-
if on_response(x):
|
|
789
|
-
waiter.add(x)
|
|
809
|
+
if on_response(x): waiter.add(x)
|
|
790
810
|
except:
|
|
791
811
|
self.f.logger.log('[ERROR] in response on_response', traceback.format_exc())
|
|
792
812
|
continue
|
|
@@ -1933,16 +1953,22 @@ def cdp_client(hostname, port, debug=False, runtimeEnable=False, cfg={}):
|
|
|
1933
1953
|
pass
|
|
1934
1954
|
def attach(self, f):
|
|
1935
1955
|
f.clear_cache = self.clear_cache
|
|
1956
|
+
f.reset = self.reset
|
|
1936
1957
|
def add_cache_session(self, sessionId):
|
|
1937
1958
|
self.cache_sesslist.append(sessionId)
|
|
1938
1959
|
if self.is_enable:
|
|
1939
1960
|
self._cache_cdp(sessionId)
|
|
1940
|
-
def
|
|
1961
|
+
def reset(self):
|
|
1941
1962
|
self._enable()
|
|
1942
1963
|
for sessionId in self.cache_sesslist:
|
|
1943
1964
|
self.f.cdp('Network.clearBrowserCookies',sessionId=sessionId)
|
|
1944
1965
|
self.f.cdp('Storage.clearDataForOrigin', {'origin':'*','storageTypes':'local_storage,session_storage,indexeddb'},sessionId=sessionId);
|
|
1945
1966
|
return self.f
|
|
1967
|
+
def clear_cache(self):
|
|
1968
|
+
self._enable()
|
|
1969
|
+
for sessionId in self.cache_sesslist:
|
|
1970
|
+
self.f.cdp('Network.clearBrowserCache',sessionId=sessionId)
|
|
1971
|
+
return self.f
|
|
1946
1972
|
class Browser:
|
|
1947
1973
|
def __init__(self, f):
|
|
1948
1974
|
self.f = f
|
|
@@ -1959,6 +1985,7 @@ def cdp_client(hostname, port, debug=False, runtimeEnable=False, cfg={}):
|
|
|
1959
1985
|
c.listen = self.f.listen
|
|
1960
1986
|
c.intercept = self.f.intercept
|
|
1961
1987
|
c.clear_cache = self.f.clear_cache
|
|
1988
|
+
c.reset = self.f.reset
|
|
1962
1989
|
c.js = self.f.run_js
|
|
1963
1990
|
c._js2py = self.f._js2py
|
|
1964
1991
|
c.tabs = self.f.root.tabs
|
|
@@ -2835,6 +2862,7 @@ class Chrome:
|
|
|
2835
2862
|
def _connect(self):
|
|
2836
2863
|
v_cfg = {}
|
|
2837
2864
|
v_cfg['headless'] = self.headless
|
|
2865
|
+
v_cfg['proxy'] = self.proxy
|
|
2838
2866
|
v_cfg_fpath = self.user_path / 'v_config.json'
|
|
2839
2867
|
if not is_port_open(self.port):
|
|
2840
2868
|
self._init()
|
|
@@ -2843,8 +2871,9 @@ class Chrome:
|
|
|
2843
2871
|
v_cfg = self.loadSaveF(v_cfg_fpath, v_cfg)
|
|
2844
2872
|
else:
|
|
2845
2873
|
self.writeSaveF(v_cfg_fpath, v_cfg)
|
|
2846
|
-
if v_cfg
|
|
2874
|
+
if v_cfg.get('headless', 'v') != self.headless or v_cfg.get('proxy', 'v') != self.proxy:
|
|
2847
2875
|
v_cfg['headless'] = self.headless
|
|
2876
|
+
v_cfg['proxy'] = self.proxy
|
|
2848
2877
|
self.root = cdp_client(self.hostname, port=self.port, debug=self.debug, runtimeEnable=self.runtimeEnable, cfg=v_cfg)
|
|
2849
2878
|
self.root.active.quit()
|
|
2850
2879
|
self._init()
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
v/__init__.py,sha256=6ZddLaDcwLudHWmFr2utAcYhperXw9AYoItNPm8EZSM,65
|
|
2
|
+
vchrome/__init__.py,sha256=9LYqVSuZahcPySY1fQZseDU8bR2gYVFlpm7GkZiJjrM,229000
|
|
3
|
+
vchrome-0.1.11.dist-info/METADATA,sha256=xrfKhZxjyhM4rF6QQDkl4t_LTKPwvIMEr7I8MPexovQ,57
|
|
4
|
+
vchrome-0.1.11.dist-info/WHEEL,sha256=hPN0AlP2dZM_3ZJZWP4WooepkmU9wzjGgCLCeFjkHLA,92
|
|
5
|
+
vchrome-0.1.11.dist-info/top_level.txt,sha256=IYbkbnFb2FGoroYj_ZXIitmnJDgYBA29_HmK9BdEUkY,10
|
|
6
|
+
vchrome-0.1.11.dist-info/RECORD,,
|
vchrome-0.1.9.dist-info/RECORD
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
v/__init__.py,sha256=6ZddLaDcwLudHWmFr2utAcYhperXw9AYoItNPm8EZSM,65
|
|
2
|
-
vchrome/__init__.py,sha256=jSrnEZLp3_atYOrh3Sd-QF2n1ynTIwIuCGXnuXIR_DM,227216
|
|
3
|
-
vchrome-0.1.9.dist-info/METADATA,sha256=s8cXPtNAplO0IEcCir-q9X-souSVzmAR4ocahqNlCFw,56
|
|
4
|
-
vchrome-0.1.9.dist-info/WHEEL,sha256=hPN0AlP2dZM_3ZJZWP4WooepkmU9wzjGgCLCeFjkHLA,92
|
|
5
|
-
vchrome-0.1.9.dist-info/top_level.txt,sha256=IYbkbnFb2FGoroYj_ZXIitmnJDgYBA29_HmK9BdEUkY,10
|
|
6
|
-
vchrome-0.1.9.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|