Skip to content

Commit abc172a

Browse files
authored
Merge pull request #33 from ClericPy/dev
2.3.4
2 parents 316fda6 + e817126 commit abc172a

5 files changed

Lines changed: 38 additions & 8 deletions

File tree

README.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,11 @@ Crawl the given URL, output the HTML DOM
280280
λ python3 -m ichrome --crawl --headless --timeout=2 http://api.ipify.org/
281281
<html><head></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">38.143.68.66</pre></body></html>
282282
```
283-
283+
To use default user dir (ignore ichrome user-dir settings)
284+
> ensure the existing Chromes get closed
285+
```bash
286+
λ python3 -m ichrome
287+
```
284288

285289
Details:
286290

ichrome/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from .logs import logger
77
from .sync_utils import Chrome, Tab
88

9-
__version__ = "2.3.3"
9+
__version__ = "2.3.4"
1010
__tips__ = "[github]: https://github.com/ClericPy/ichrome\n[cdp]: https://chromedevtools.github.io/devtools-protocol/\n[cmd args]: https://peter.sh/experiments/chromium-command-line-switches/"
1111
__all__ = [
1212
'Chrome', 'ChromeDaemon', 'Tab', 'Tag', 'AsyncChrome', 'AsyncTab', 'logger',

ichrome/async_utils.py

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737

3838

3939
async def _ensure_awaitable_callback_result(callback_function, result):
40-
if callable(callback_function):
40+
if callback_function and callable(callback_function):
4141
callback_result = callback_function(result)
4242
else:
4343
return result
@@ -272,14 +272,15 @@ def __init__(self,
272272
self._closed = False
273273
self._message_id = 0
274274
self.ws = None
275-
self.default_recv_callback = default_recv_callback
276275
self._recv_daemon_break_callback = _recv_daemon_break_callback or self._RECV_DAEMON_BREAK_CALLBACK
277276
if self.chrome:
278277
self.req = self.chrome.req
279278
else:
280279
self.req = Requests()
281280
self._listener = Listener()
282281
self._enabled_domains: Set[str] = set()
282+
self._default_recv_callback: List[Callable] = []
283+
self.default_recv_callback = default_recv_callback
283284

284285
def __hash__(self):
285286
return self.tab_id
@@ -306,6 +307,27 @@ def ensure_timeout(self, timeout):
306307
else:
307308
return timeout
308309

310+
@property
311+
def default_recv_callback(self):
312+
return self._default_recv_callback or []
313+
314+
@default_recv_callback.setter
315+
def default_recv_callback(self, value):
316+
if not value:
317+
self._default_recv_callback = []
318+
elif isinstance(value, list):
319+
self._default_recv_callback = value
320+
elif callable(value):
321+
self._default_recv_callback = [value]
322+
else:
323+
raise ValueError(
324+
'default_recv_callback should be list or callable, and you can use tab.default_recv_callback.append(cb) to add new callback'
325+
)
326+
327+
@default_recv_callback.deleter
328+
def default_recv_callback(self):
329+
self._default_recv_callback = []
330+
309331
async def close_browser(self, timeout=0):
310332
return await self.send('Browser.close', timeout=timeout)
311333

@@ -405,8 +427,9 @@ async def _recv_daemon(self):
405427
logger.debug(
406428
f'[json] data_str can not be json.loads: {data_str}')
407429
continue
408-
await _ensure_awaitable_callback_result(self.default_recv_callback,
409-
data_dict)
430+
for cb in self.default_recv_callback:
431+
asyncio.ensure_future(
432+
_ensure_awaitable_callback_result(cb, data_dict))
410433
f = self._listener.find_future(data_dict)
411434
if f:
412435
if f._state == _PENDING:
@@ -1008,7 +1031,9 @@ async def setBlockedURLs(self, urls: List[str], timeout=NotSet):
10081031
10091032
"""
10101033
await self.enable('Network')
1011-
return await self.send('Network.setBlockedURLs', urls=urls, timeout=timeout)
1034+
return await self.send('Network.setBlockedURLs',
1035+
urls=urls,
1036+
timeout=timeout)
10121037

10131038
async def set_url(self,
10141039
url: Optional[str] = None,

ichrome/base.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ def clear_chrome_process(port=None, timeout=None, max_deaths=1, interval=0.5):
118118
f"[Killing] {proc}, port: {port}. {' '.join(proc.cmdline())}")
119119
try:
120120
proc.kill()
121-
except psutil._exceptions.NoSuchProcess:
121+
except (psutil._exceptions.NoSuchProcess, ProcessLookupError):
122122
continue
123123
if port:
124124
if procs:

ichrome/daemon.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,7 @@ def _ensure_user_dir(cls, user_data_dir):
193193
def _wrap_user_data_dir(self, user_data_dir):
194194
main_user_dir = self._ensure_user_dir(user_data_dir)
195195
if main_user_dir is None:
196+
self.user_data_dir = None
196197
return
197198
port_user_dir = main_user_dir / f"chrome_{self.port}"
198199
self.user_data_dir = port_user_dir

0 commit comments

Comments
 (0)