diff --git a/listener/console.py b/listener/console.py index bcedee6..8f0f6ee 100644 --- a/listener/console.py +++ b/listener/console.py @@ -1,15 +1,21 @@ -from reloading import reloading +from loguru import logger +logger.add("log/console.log", + rotation="100 MB", + encoding="utf-8", + filter=lambda record: record["extra"].get("name") == "console") + +console_log = logger.bind(name="console") def console_listener(tab): try: # 监听控制台 - print("[console.log] 开始监听控制台") + console_log.info("[console.log] 开始监听控制台") tab.console.start() steps = tab.console.steps() for log in steps: # print("[console.log]", log) - print(f"[console.log] {log.text}") + console_log.info(f"[console.log] {log.text}") finally: - print("[console.log] 停止监听控制台") + console_log.info("[console.log] 停止监听控制台") tab.console.stop() \ No newline at end of file diff --git a/listener/network.py b/listener/network.py index f6e8b91..19e0dc2 100644 --- a/listener/network.py +++ b/listener/network.py @@ -1,36 +1,47 @@ import utils +from loguru import logger -def network_listener(tab): +logger.add("log/network.log", + rotation="100 MB", + encoding="utf-8", + filter=lambda record: record["extra"].get("name") == "network") + +network_log = logger.bind(name="network") + +def network_listener(tab, targets=[]): try: # 监听网络 - print("[network.log] 开始监听网络") - tab.listen.start(targets=["/api/"]) + network_log.info("[network.log] 开始监听网络") + tab.listen.start(targets=targets) for log in tab.listen.steps(): - print("=" * 50) - print(f"[network.log] {log.method} {log.url} {'request'} {''}") - print("=" * 50 + '\t' + "request") - print("=" * 50 + '\t' + "request.headers") + network_log.info("=" * 50) + network_log.info(f"[network.log] {log.method} {log.url}") + network_log.info("=" * 50 + '\t' + "request") + network_log.info("=" * 50 + '\t' + "request.headers") for key in log.request.headers.keys(): - print(key, log.request.headers[key]) + network_log.info("{}, {}", key, log.request.headers[key]) if 'Content-Type' in log.request.headers: reqType = log.request.headers['Content-Type'] if reqType == 'application/json': - print("=" * 50 + '\t' + "request.body") - print(utils.format_json(log.request.body)) + network_log.info("=" * 50 + '\t' + "request.body") + network_log.info(utils.format_json(log.request.body)) - print(vars(log.request)) + # print(vars(log.request)) + + for key in log.response.headers.keys(): + network_log.info("{}, {}", key, log.response.headers[key]) if 'Content-Type' in log.response.headers: respType = log.response.headers['Content-Type'] if respType == 'application/json': - print("=" * 50 + '\t' + "response.body") - print(utils.format_json(log.response.body)) + network_log.info("=" * 50 + '\t' + "response.body") + network_log.info(utils.format_json(log.response.body)) - print(vars(log.response)) + # print(vars(log.response)) except Exception as e: - print("[network.log] 监听网络出错") - print(e) + network_log.error("[network.log] 监听网络出错") + network_log.error(e) finally: - print("[network.log] 停止监听网络") + network_log.info("[network.log] 停止监听网络") tab.listen.stop() \ No newline at end of file diff --git a/main.py b/main.py index f962ed9..ddfa219 100644 --- a/main.py +++ b/main.py @@ -1,3 +1,17 @@ +from loguru import logger +logger.remove() + +import sys + +logger.add(sys.stdout, + filter=lambda record: record["extra"].get("name") == "runtime") +logger.add("log/runtime.log", + rotation="100 MB", + encoding="utf-8", + filter=lambda record: record["extra"].get("name") == "runtime") + +log = logger.bind(name="runtime") + from DrissionPage import Chromium, ChromiumOptions, SessionPage from concurrent.futures import ThreadPoolExecutor import atexit @@ -5,7 +19,7 @@ import atexit import listener.console import listener.network - +# 初始化浏览器 options = ChromiumOptions() # 无头模式 # options.headless() @@ -17,30 +31,23 @@ print(os.environ) browser = Chromium(options) tab = browser.latest_tab -executor = ThreadPoolExecutor(max_workers=2) +import os +# 初始化线程池 +cpu_count = os.cpu_count() +cpu_count = cpu_count if cpu_count is not None else 1 +executor = ThreadPoolExecutor(max_workers=cpu_count * 2) executor.submit(listener.console.console_listener, tab) executor.submit(listener.network.network_listener, tab) - -tab.get(url='http://127.0.0.1:24613') - -tab.wait.url_change(text="/auth/login", timeout=3, raise_err=False) - -if tab.url.endswith("/auth/login"): - tab.wait.doc_loaded() - tab.actions.move_to("@@t()=input@@type=text").click().type("shikong") - tab.actions.move_to("@@t()=input@@type=password").click().type("123+AbC") - tab.actions.move_to("@@t()=button@@text():登录").click() - -tab.change_mode() - -items = tab.eles("t:body") -for item in items: - print(item) - def exit(): - print('exit') + log.info('退出') browser.quit() - executor.shutdown() + executor.shutdown(False) atexit.register(exit) + +from worker import run_task; +try: + run_task(browser, executor, log) +except Exception as e: + log.error(e) \ No newline at end of file diff --git a/worker.py b/worker.py new file mode 100644 index 0000000..ec2c673 --- /dev/null +++ b/worker.py @@ -0,0 +1,27 @@ +from listener.console import * +from listener.network import * + +def run_task(browser, executor, log): + tab = browser.latest_tab + + executor.submit(console_listener, tab) + executor.submit(network_listener, tab, targets=[ + "/api" + ]) + + + tab.get(url='http://127.0.0.1:24613') + + tab.wait.url_change(text="/auth/login", timeout=3, raise_err=False) + + if tab.url.endswith("/auth/login"): + tab.wait.doc_loaded() + tab.actions.move_to("@@t()=input@@type=text").click().type("shikong") + tab.actions.move_to("@@t()=input@@type=password").click().type("123+AbC") + tab.actions.move_to("@@t()=button@@text():登录").click() + + # tab.change_mode() + + items = tab.eles("t:body") + for item in items: + print(item) \ No newline at end of file