From deb51d8579ce0a6662d6eb861a79e1f28c70e510 Mon Sep 17 00:00:00 2001 From: shikong <919411476@qq.com> Date: Thu, 20 Mar 2025 00:52:31 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E9=87=8D=E6=9E=84=E7=9B=91?= =?UTF-8?q?=E5=90=AC=E5=8A=9F=E8=83=BD=E5=B9=B6=E5=88=86=E7=A6=BB=E5=88=B0?= =?UTF-8?q?=E7=8B=AC=E7=AB=8B=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将控制台和网络监听功能从 `main.py` 中分离到 `listener` 模块,以提高代码的可维护性和可读性。同时,新增 `utils` 模块用于格式化 JSON 数据,并更新 `requirements.txt` 以包含必要的依赖。 --- listener/__init__.py | 0 listener/console.py | 15 +++++++++++++ listener/network.py | 36 +++++++++++++++++++++++++++++++ main.py | 50 ++++++++++---------------------------------- requirements.txt | 1 + utils/__init__.py | 4 ++++ 6 files changed, 67 insertions(+), 39 deletions(-) create mode 100644 listener/__init__.py create mode 100644 listener/console.py create mode 100644 listener/network.py create mode 100644 requirements.txt create mode 100644 utils/__init__.py diff --git a/listener/__init__.py b/listener/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/listener/console.py b/listener/console.py new file mode 100644 index 0000000..bcedee6 --- /dev/null +++ b/listener/console.py @@ -0,0 +1,15 @@ +from reloading import reloading + + +def console_listener(tab): + try: + # 监听控制台 + print("[console.log] 开始监听控制台") + tab.console.start() + steps = tab.console.steps() + for log in steps: + # print("[console.log]", log) + print(f"[console.log] {log.text}") + finally: + print("[console.log] 停止监听控制台") + tab.console.stop() \ No newline at end of file diff --git a/listener/network.py b/listener/network.py new file mode 100644 index 0000000..f6e8b91 --- /dev/null +++ b/listener/network.py @@ -0,0 +1,36 @@ +import utils + +def network_listener(tab): + try: + # 监听网络 + print("[network.log] 开始监听网络") + tab.listen.start(targets=["/api/"]) + 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") + for key in log.request.headers.keys(): + print(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)) + + print(vars(log.request)) + + 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)) + + print(vars(log.response)) + except Exception as e: + print("[network.log] 监听网络出错") + print(e) + finally: + print("[network.log] 停止监听网络") + tab.listen.stop() \ No newline at end of file diff --git a/main.py b/main.py index d17469a..ed7575c 100644 --- a/main.py +++ b/main.py @@ -1,54 +1,26 @@ from DrissionPage import Chromium, ChromiumOptions, SessionPage from concurrent.futures import ThreadPoolExecutor import atexit -import json + +import listener.console +import listener.network + options = ChromiumOptions() # 无头模式 # options.headless() +import os +os.environ.setdefault('PYTHONIOENCODING', 'utf-8') +print(os.environ) + browser = Chromium(options) tab = browser.latest_tab - -def console_listener(tab): - # 监听控制台 - tab.console.start() - steps = tab.console.steps() - for log in steps: - # print("[console.log]", log) - print(f"[console.log] {log.text}") - -def network_listener(tab): - # 监听网络 - tab.listen.start(targets=["/api/"]) - for log in tab.listen.steps(): - try: - print("=" * 50) - print(f"[network.log] {log.method} {log.url} {'request'} {''}") - print("=" * 50 + '\t' + "request") - print("=" * 50 + '\t' + "request.headers") - for key in log.request.headers.keys(): - print(key, log.request.headers[key]) - - reqType = log.request.headers['Content-Type'] - if reqType == 'application/json': - print("=" * 50 + '\t' + "request.body") - print(json.dumps(log.request.body, indent=4)) - print(vars(log.request)) - - respType = log.response.headers['Content-Type'] - if respType == 'application/json': - print("=" * 50 + '\t' + "response.body") - print(json.dumps(log.response.body, indent=4)) - - print(vars(log.response)) - except Exception as e: - print(e) - executor = ThreadPoolExecutor(max_workers=2) -executor.submit(console_listener, tab) -executor.submit(network_listener, tab) +executor.submit(listener.console.console_listener, tab) +executor.submit(listener.network.network_listener, tab) + tab.get(url='http://127.0.0.1:24613') tab.change_mode() diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..61f00d5 --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +DrissionPage==4.1.0.17 diff --git a/utils/__init__.py b/utils/__init__.py new file mode 100644 index 0000000..92325eb --- /dev/null +++ b/utils/__init__.py @@ -0,0 +1,4 @@ +import json +def format_json(data): + """格式化JSON数据""" + return json.dumps(data, indent=4, ensure_ascii=False) \ No newline at end of file