From 7a19ca02bf7f48ee43c23019d3aea48e94b91d0c Mon Sep 17 00:00:00 2001 From: shikong <919411476@qq.com> Date: Fri, 21 Mar 2025 00:55:10 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E9=87=8D=E6=9E=84=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E7=B3=BB=E7=BB=9F=E5=B9=B6=E4=BC=98=E5=8C=96=E7=BA=BF?= =?UTF-8?q?=E7=A8=8B=E6=B1=A0=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 重构日志系统,使用loguru替代print语句,提升日志管理能力。优化线程池配置,根据CPU核心数动态设置线程池大小。将任务执行逻辑移至worker.py,提高代码可维护性。 --- listener/console.py | 14 +++++++++---- listener/network.py | 45 +++++++++++++++++++++++++---------------- main.py | 49 ++++++++++++++++++++++++++------------------- worker.py | 27 +++++++++++++++++++++++++ 4 files changed, 93 insertions(+), 42 deletions(-) create mode 100644 worker.py 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