diff --git a/examples_async.py b/examples_async.py index 681c18c..43aa74f 100644 --- a/examples_async.py +++ b/examples_async.py @@ -662,7 +662,6 @@ def test_all(): time.sleep(1) finally: loop.close() - AsyncChromeDaemon.clear_dir(AsyncChromeDaemon.DEFAULT_USER_DIR_PATH) if __name__ == "__main__": diff --git a/examples_debug.py b/examples_debug.py index ed72218..aa36bf1 100644 --- a/examples_debug.py +++ b/examples_debug.py @@ -1,26 +1,22 @@ import time from ichrome import AsyncTab -from ichrome.debugger import get_a_tab, network_sniffer, launch +from ichrome.debugger import Chrome, Daemon # There are 3 ways to create a daemon # 1. get_a_tab: auto find the existing Chrome (launched before like python -m ichrome), or create a new daemon # 2. daemon = Daemon() # 3. daemon = launch() -# type hints for autocomplete in the IDE -daemon = launch() -tab: AsyncTab = get_a_tab() - -def test_set_ua(): +def test_set_ua(tab: AsyncTab): # check the UA changed - tab.set_ua("No UA.") + tab.set_ua("Custom UA.") tab.set_url("http://httpbin.org/user-agent") - assert "No UA." in tab.html, tab.html + assert "Custom UA." in tab.html, tab.html -def test_mouse_keyboard(): +def test_mouse_keyboard(tab: AsyncTab): # click the input element and send some string tab.set_url("http://httpbin.org/forms/post", timeout=5) rect: dict = tab.get_bounding_client_rect('[type="email"]') @@ -28,35 +24,39 @@ def test_mouse_keyboard(): tab.keyboard_send(string="123@1.com") # click the submit button tab.click("button") - tab.wait_loading(2) + tab.wait_loading(3) assert '"custemail": "123@1.com"' in tab.html, tab.html -def test_js(): - tab.set_url("https://postman-echo.com/ip") - tag = tab.querySelectorAll("html")[0] - print(tag, tag.text) - img_b64 = tab.screenshot_element("html") +def test_js(tab: AsyncTab): + tab.set_url("https://help.tom.com/") + tag = tab.querySelectorAll(".pr_tit")[0] + assert tag and tag.text + from html import escape + + tab.run_js_snippets("add_tip", f"got the .pr_tit tag[0]: {escape(tag.outerHTML)}") + time.sleep(3) + tab.run_js_snippets("clear_tip") + img_b64 = tab.screenshot_element("#contact", captureBeyondViewport=True) tab.set_html( - f'

Here is the screenshot image by css selector ".shader_left"

Red dot

Test js finished

' + f'

Here is the screenshot image by css selector "#contact"

Red dot

Test js finished after 5 secs

' ) + tab.alert('Here is the screenshot image by css selector "#contact"') + for i in range(5): + tab.run_js_snippets("add_tip", f"{5 - i}s") + time.sleep(1) def main(): - test_set_ua() - test_mouse_keyboard() - test_js() - for _ in range(3): - tab.set_html( - f"

Start network_sniffer in %s seconds. Refresh this page and read network logs in terminal.

" - % (3 - _) - ) - time.sleep(1) - network_sniffer() + with Daemon( + user_data_dir="./debug_cache", clear_after_shutdown=True, headless=0 + ) as daemon: + with Chrome(host=daemon.host, port=daemon.port) as chrome: + tab = chrome.get_tab() + test_set_ua(tab) + test_mouse_keyboard(tab) + test_js(tab) if __name__ == "__main__": - try: - main() - finally: - daemon.stop_running() + main() diff --git a/ichrome/debugger.py b/ichrome/debugger.py index 20ab526..a0695b0 100644 --- a/ichrome/debugger.py +++ b/ichrome/debugger.py @@ -6,8 +6,7 @@ from functools import wraps from inspect import isawaitable from typing import Set - -from torequests.utils import quote_plus +from urllib.parse import quote_plus from .async_utils import AsyncChrome, AsyncTab from .daemon import AsyncChromeDaemon, ChromeDaemon @@ -115,6 +114,7 @@ def __init__( proc_check_interval=5, on_startup=None, on_shutdown=quit_while_daemon_missing, + **_kwargs, ): self._self = AsyncChromeDaemon( chrome_path=chrome_path, @@ -135,6 +135,7 @@ def __init__( proc_check_interval=proc_check_interval, on_startup=on_startup, on_shutdown=on_shutdown, + **_kwargs, ) self.start_running()