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 CHANGED
@@ -1,4 +1,4 @@
1
- __version__ = '0.1.9'
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 clear_cache(self):
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['headless'] != self.headless:
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()
@@ -1,4 +1,4 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: vchrome
3
- Version: 0.1.9
3
+ Version: 0.1.11
4
4
 
@@ -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,,
@@ -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,,