vchrome 0.0.6__py3-none-any.whl → 0.0.8__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.0.6'
1
+ __version__ = '0.0.8'
2
2
  __author__ = 'v'
3
3
  # ----------------------------------------------------------------------------------------------------
4
4
  _allowed = {'Chrome'}
@@ -16,6 +16,7 @@ import types
16
16
  import queue
17
17
  import time
18
18
  import inspect
19
+ import textwrap
19
20
  import threading
20
21
  from time import perf_counter
21
22
  from math import factorial, sin, pi
@@ -25,7 +26,6 @@ import socket
25
26
  import base64
26
27
  import traceback
27
28
  from json import JSONDecodeError
28
- from functools import lru_cache
29
29
  from threading import Thread, Event, RLock
30
30
  from urllib import request
31
31
  import builtins
@@ -148,9 +148,6 @@ def cdp_client(hostname, port, debug=False):
148
148
  def close_all(self):
149
149
  for i in range(self.num):
150
150
  self._pool.put(self.KillThreadParams)
151
- @lru_cache(maxsize=1024)
152
- def get_cached_signature(func):
153
- return inspect.signature(func)
154
151
  def to_human_read(size_in_bytes, decimal_places= 2):
155
152
  if size_in_bytes < 0:
156
153
  raise ValueError("byte size cannot be negative!")
@@ -466,30 +463,36 @@ def cdp_client(hostname, port, debug=False):
466
463
  class FetchFakeResponse:
467
464
  def __init__(self, rinfo, encoding='utf8'):
468
465
  self.rinfo = rinfo
469
- self.encoding = encoding
466
+ self.encoding = rinfo.get('encoding') or encoding
470
467
  self._url = rinfo.get('url')
471
- self._responseCode = 200
472
- self._responseHeaders = {"fake-vvv": "fake-vvv"}
473
- self._body = b''
468
+ self._responseCode = rinfo.get('status_code') or 200
469
+ self._responseHeaders = rinfo.get('headers') or {"fake-header": "fake-header"}
470
+ if rinfo.get('text'):
471
+ self._body = rinfo.get('text').encode(self.encoding)
472
+ elif rinfo.get('content'):
473
+ assert isinstance(rinfo.get('content'), bytes), '.content must be type: bytes'
474
+ self._body = rinfo.get('content')
475
+ else:
476
+ self._body = b''
474
477
  self.request = rinfo.get('request')
475
478
  @property
476
479
  def url(self): return self._url
477
480
  @property
478
481
  def status_code(self): return self._responseCode
479
482
  @status_code.setter
480
- def status_code(self, value): assert isinstance(value, int), 'must be type: int'; self._responseCode = value
483
+ def status_code(self, value): assert isinstance(value, int), '.status_code must be type: int'; self._responseCode = value
481
484
  @property
482
485
  def headers(self): return self._responseHeaders
483
486
  @headers.setter
484
- def headers(self, value): assert isinstance(value, dict), 'must be type: dict'; self._responseHeaders = value
487
+ def headers(self, value): assert isinstance(value, dict), '.headers must be type: dict'; self._responseHeaders = value
485
488
  @property
486
489
  def content(self): return self._body
487
490
  @content.setter
488
- def content(self, value): assert isinstance(value, bytes), 'must be type: bytes'; self._body = value
491
+ def content(self, value): assert isinstance(value, bytes), '.content must be type: bytes'; self._body = value
489
492
  @property
490
493
  def text(self): return self._body.decode(self.encoding)
491
494
  @text.setter
492
- def text(self, value): assert isinstance(value, str), 'must be type: str'; self._body = value.encode(self.encoding)
495
+ def text(self, value): assert isinstance(value, str), '.text must be type: str'; self._body = value.encode(self.encoding)
493
496
  def json(self):
494
497
  c = self.text
495
498
  return json.loads(c[c.find('{'):c.rfind('}')+1])
@@ -509,24 +512,36 @@ def cdp_client(hostname, port, debug=False):
509
512
  self._postData = rinfo.get('postData')
510
513
  self._postData_copy = self._postData
511
514
  self._fake = None
515
+ self._alert = textwrap.dedent('''
516
+ The fake_response() function is already running!
517
+ req object cannot be modified. maybe you're using the feature in the wrong way.
518
+ below is an example of a modification:
519
+
520
+ def on_request(req):
521
+ fk_resp = req.fake_response();
522
+ fk_resp.content = b'xxxxxx'
523
+ # If you need to modify the return content,
524
+ # you need to use the return value object of the fake_response() function.
525
+ ''').strip()
526
+ def _A(self): assert self._fake == None, self._alert
512
527
  @property
513
528
  def url(self): return self._url
514
529
  @property
515
530
  def method(self): return self._method
516
531
  @method.setter
517
- def method(self, value): assert isinstance(value, str), 'must be type: str'; self._method = value
532
+ def method(self, value): self._A(); assert isinstance(value, str), 'must be type: str'; self._method = value
518
533
  @property
519
534
  def headers(self): return self._headers
520
535
  @headers.setter
521
- def headers(self, value): assert isinstance(value, dict), 'must be type: dict'; self._headers = value
536
+ def headers(self, value): self._A(); assert isinstance(value, dict), 'must be type: dict'; self._headers = value
522
537
  @property
523
538
  def content(self): return self._postData
524
539
  @content.setter
525
- def content(self, value): assert isinstance(value, bytes), 'must be type: bytes'; self._postData = value
540
+ def content(self, value): self._A(); assert isinstance(value, bytes), 'must be type: bytes'; self._postData = value
526
541
  @property
527
542
  def text(self): return self._postData.decode(self.encoding)
528
543
  @text.setter
529
- def text(self, value): assert isinstance(value, str), 'must be type: str'; self._postData = value.encode(self.encoding)
544
+ def text(self, value): self._A(); assert isinstance(value, str), 'must be type: str'; self._postData = value.encode(self.encoding)
530
545
  def json(self):
531
546
  c = self.text
532
547
  return json.loads(c[c.find('{'):c.rfind('}')+1])
@@ -541,8 +556,11 @@ def cdp_client(hostname, port, debug=False):
541
556
  )
542
557
  def get(self, k):
543
558
  return getattr(self, '_'+k, None)
544
- def fake_response(self):
545
- self._fake = SniffFetch.FetchFakeResponse({"url": self._url, "request": self})
559
+ def fake_response(self, data=None):
560
+ data = data or dict()
561
+ data['request'] = self
562
+ data['url'] = self._url
563
+ self._fake = SniffFetch.FetchFakeResponse(data)
546
564
  return self._fake
547
565
  class FetchResponse:
548
566
  def __init__(self, rinfo, encoding='utf8'):
@@ -1237,8 +1255,8 @@ def cdp_client(hostname, port, debug=False):
1237
1255
  if tp == 'xpath': r.extend(self.xpath(xf))
1238
1256
  if tp == 'css': r.extend(self.css(xf))
1239
1257
  if one and r: return r
1240
- nodeId = self.f.cdp('DOM.describeNode', {'objectId': self.objectId})['node']['nodeId']
1241
- for sr in self.f.element._sr_root(nodeId):
1258
+ backendNodeId = self.f.cdp('DOM.describeNode', {'objectId': self.objectId})['node']['backendNodeId']
1259
+ for sr in self.f.element._sr_root(backendNodeId):
1242
1260
  if tp == 'xpath': r.extend(sr.xpath(xf))
1243
1261
  if tp == 'css': r.extend(sr.css(xf))
1244
1262
  if one and r: return r
@@ -1397,11 +1415,11 @@ def cdp_client(hostname, port, debug=False):
1397
1415
  time.sleep(0.1)
1398
1416
  if perf_counter() - start > 2:
1399
1417
  break
1400
- def _get_flattened_node(self, nodeId=None):
1401
- if nodeId == None:
1418
+ def _get_flattened_node(self, backendNodeId=None):
1419
+ if backendNodeId == None:
1402
1420
  rnode = self._get_doc_tree()['root']
1403
1421
  else:
1404
- rnode = self.f.cdp('DOM.describeNode', {'nodeId':nodeId, 'depth':-1, 'pierce':True})['node']
1422
+ rnode = self.f.cdp('DOM.describeNode', {'backendNodeId':backendNodeId, 'depth':-1, 'pierce':True})['node']
1405
1423
  mnodes = {"nodes": self._trav_node_tree(rnode)}
1406
1424
  return mnodes
1407
1425
  def _filter_shadow_root(self, mnodes):
@@ -1422,8 +1440,8 @@ def cdp_client(hostname, port, debug=False):
1422
1440
  e = Element(self.f, m['object'])
1423
1441
  r.append(e)
1424
1442
  return r
1425
- def _sr_root(self, nodeId=None):
1426
- mnodes = self._get_flattened_node(nodeId)
1443
+ def _sr_root(self, backendNodeId=None):
1444
+ mnodes = self._get_flattened_node(backendNodeId)
1427
1445
  return self._filter_shadow_root(mnodes)
1428
1446
  def _make_shadow_root_xpath(self, s):
1429
1447
  v = re.findall('^([^/]*)(/+)([^/]*)$', s)
@@ -1803,21 +1821,21 @@ def cdp_client(hostname, port, debug=False):
1803
1821
  if limit_time != None:
1804
1822
  if perf_counter() - start > limit_time:
1805
1823
  self.qret.pop(rid, None)
1806
- return {'vvv': 'over time'}
1824
+ return {'verror': 'over time'}
1807
1825
  if sessionId:
1808
1826
  _tid = sessionId
1809
1827
  _rid = self.root.detached_cache_sessionId.get(_tid, None)
1810
1828
  if _rid:
1811
1829
  self._cache_del.append([_rid, _tid, self.root.detached_cache_sessionId])
1812
1830
  self.qret.pop(rid, None)
1813
- return {'vvv': 'detached sessionId'}
1831
+ return {'verror': 'detached sessionId'}
1814
1832
  else:
1815
1833
  _tid = getattr(self.f, 'frameId', None)
1816
1834
  _rid = self.root.detached_cache_targetId.get(_tid, None)
1817
1835
  if _rid:
1818
1836
  self._cache_del.append([_rid, _tid, self.root.detached_cache_targetId])
1819
1837
  self.qret.pop(rid, None)
1820
- return {'vvv': 'detached targetId'}
1838
+ return {'verror': 'detached targetId'}
1821
1839
  self.check_del_cache()
1822
1840
  ret = self.qret[rid].get(timeout=.15)
1823
1841
  self.qret.pop(rid, None)
@@ -2004,7 +2022,7 @@ def cdp_client(hostname, port, debug=False):
2004
2022
  self.cdp('Network.setCookies', {"cookies": v.data})
2005
2023
  else:
2006
2024
  # cookies must be (str/list)
2007
- # str: document.cookie = 'vvv=123'
2025
+ # str: document.cookie = 'test=123'
2008
2026
  # list:
2009
2027
  # [{'domain': '.baidu.com',
2010
2028
  # 'expires': 1790665876.734538,
@@ -2429,7 +2447,7 @@ def find_free_port(start_port=9233, end_port=60000):
2429
2447
  cpu_n = cpu_count()
2430
2448
  raw = f"{system}-{release}-{version}-{arch}-{python_version}-{cpu_n}-{getenv('USERNAME','')}-{getenv('USER','')}"
2431
2449
  except:
2432
- raw = "vvv"
2450
+ raw = "default sign."
2433
2451
  return hashlib.sha256(raw.encode('utf-8')).hexdigest()
2434
2452
  def rand(self):
2435
2453
  self.state = (1664525 * self.state + 1013904223) % (2**32)
@@ -2647,7 +2665,7 @@ class Chrome:
2647
2665
  e = path / 'v_extension'
2648
2666
  e.mkdir(parents=True, exist_ok=True)
2649
2667
  d = {
2650
- "name": "vvv", "version": "0.0.0", "description": "vvv",
2668
+ "name": "opencdp", "version": "0.0.0", "description": "opencdp",
2651
2669
  "permissions": [ "proxy" ],
2652
2670
  "background": { "service_worker": "vvv.js" },
2653
2671
  "content_scripts": [{
@@ -1,3 +1,3 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: vchrome
3
- Version: 0.0.6
3
+ Version: 0.0.8
@@ -0,0 +1,5 @@
1
+ vchrome/__init__.py,sha256=54rvOagRIZrrCOF7LrudzF85S8pzgAEZIsVq-bbpQMM,210094
2
+ vchrome-0.0.8.dist-info/METADATA,sha256=tKmwbpzUM3M5bQZJ0biHSgcoChSI49lVRZ2Z9z0PLjk,54
3
+ vchrome-0.0.8.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
4
+ vchrome-0.0.8.dist-info/top_level.txt,sha256=oB919Fa09PCy48Ptj8iy-1QUcvhEeY97MOR42281Fk0,8
5
+ vchrome-0.0.8.dist-info/RECORD,,
@@ -1,5 +0,0 @@
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,,