mdbq 4.0.75__py3-none-any.whl → 4.0.77__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- mdbq/__version__.py +1 -1
- mdbq/log/mylogger.py +29 -1
- mdbq/selenium/get_driver.py +15 -4
- {mdbq-4.0.75.dist-info → mdbq-4.0.77.dist-info}/METADATA +1 -1
- {mdbq-4.0.75.dist-info → mdbq-4.0.77.dist-info}/RECORD +7 -7
- {mdbq-4.0.75.dist-info → mdbq-4.0.77.dist-info}/WHEEL +0 -0
- {mdbq-4.0.75.dist-info → mdbq-4.0.77.dist-info}/top_level.txt +0 -0
mdbq/__version__.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
VERSION = '4.0.
|
1
|
+
VERSION = '4.0.77'
|
mdbq/log/mylogger.py
CHANGED
@@ -200,6 +200,17 @@ class MyLogger:
|
|
200
200
|
if not extra_data and hasattr(record, 'extra'):
|
201
201
|
extra_data = getattr(record, 'extra', None)
|
202
202
|
if extra_data:
|
203
|
+
# 优先显示func信息
|
204
|
+
func_name = extra_data.get('func', '')
|
205
|
+
module_name = extra_data.get('model', '')
|
206
|
+
line_number = extra_data.get('lines', '')
|
207
|
+
if func_name:
|
208
|
+
msg += f" | Function: {func_name}"
|
209
|
+
if module_name:
|
210
|
+
msg += f" | Module: {module_name}"
|
211
|
+
if line_number:
|
212
|
+
msg += f" | Line: {line_number}"
|
213
|
+
|
203
214
|
context_data = extra_data.get('context_data', {})
|
204
215
|
if context_data:
|
205
216
|
msg += f" | Context: {context_data}"
|
@@ -207,7 +218,7 @@ class MyLogger:
|
|
207
218
|
if metrics:
|
208
219
|
msg += f" | Metrics: {metrics}"
|
209
220
|
extra = {k: v for k, v in extra_data.items()
|
210
|
-
if k not in ('context_data', '性能指标')}
|
221
|
+
if k not in ('context_data', '性能指标', 'func', 'model', 'lines')}
|
211
222
|
if extra:
|
212
223
|
msg += f" | Extra: {extra}"
|
213
224
|
return msg
|
@@ -413,6 +424,23 @@ class MyLogger:
|
|
413
424
|
if extra:
|
414
425
|
log_extra.update(extra)
|
415
426
|
|
427
|
+
# 获取当前调用func
|
428
|
+
try:
|
429
|
+
frame = inspect.currentframe()
|
430
|
+
# 跳过logger内部函数,找到真正的调用者
|
431
|
+
caller_frame = frame.f_back
|
432
|
+
skip_functions = ['_sync_log', 'log', 'debug', 'info', 'warning', 'error', 'critical', 'wrapper']
|
433
|
+
while caller_frame and caller_frame.f_code.co_name in skip_functions:
|
434
|
+
caller_frame = caller_frame.f_back
|
435
|
+
if caller_frame:
|
436
|
+
log_extra['func'] = caller_frame.f_code.co_name
|
437
|
+
log_extra['model'] = caller_frame.f_globals.get('__name__', '')
|
438
|
+
log_extra['lines'] = caller_frame.f_lineno
|
439
|
+
del frame
|
440
|
+
except Exception:
|
441
|
+
# 如果获取函数信息失败,不影响正常日志记录
|
442
|
+
pass
|
443
|
+
|
416
444
|
# 添加上下文信息
|
417
445
|
if hasattr(self._context, 'data') and self._context.data:
|
418
446
|
log_extra['context_data'] = self._context.data.copy()
|
mdbq/selenium/get_driver.py
CHANGED
@@ -2,7 +2,11 @@
|
|
2
2
|
import os
|
3
3
|
import platform
|
4
4
|
import getpass
|
5
|
-
from selenium import webdriver
|
5
|
+
from selenium import webdriver as selenium_webdriver
|
6
|
+
try:
|
7
|
+
from seleniumwire import webdriver as wire_webdriver
|
8
|
+
except ImportError:
|
9
|
+
wire_webdriver = None
|
6
10
|
from selenium.webdriver.chrome.service import Service
|
7
11
|
import re
|
8
12
|
import socket
|
@@ -24,7 +28,7 @@ class GetDriver:
|
|
24
28
|
Selenium ChromeDriver 管理器,支持多平台、代理、无头模式、下载目录、User-Agent等高级配置。
|
25
29
|
支持上下文管理器(with语法),自动资源清理。
|
26
30
|
"""
|
27
|
-
def __init__(self, url=None, headless=False, proxy=None, user_agent=None, download_dir=None, chrome_path=None, chromedriver_path=None, maximize_window=True):
|
31
|
+
def __init__(self, url=None, headless=False, proxy=None, user_agent=None, download_dir=None, chrome_path=None, chromedriver_path=None, maximize_window=True, is_selenium_wire=False):
|
28
32
|
"""
|
29
33
|
初始化GetDriver
|
30
34
|
:param url: 允许的安全站点(用于insecure origin as secure)
|
@@ -52,6 +56,7 @@ class GetDriver:
|
|
52
56
|
import random
|
53
57
|
self.user_agent = user_agents[random.randint(0, len(user_agents) - 1)]
|
54
58
|
self.maximize_window = maximize_window
|
59
|
+
self.is_selenium_wire = is_selenium_wire
|
55
60
|
|
56
61
|
def check_proxy(self):
|
57
62
|
"""
|
@@ -173,7 +178,10 @@ class GetDriver:
|
|
173
178
|
try:
|
174
179
|
option.binary_location = chrome_path
|
175
180
|
service = Service(chromedriver_path)
|
176
|
-
|
181
|
+
if self.is_selenium_wire and wire_webdriver:
|
182
|
+
driver = wire_webdriver.Chrome(service=service, options=option)
|
183
|
+
else:
|
184
|
+
driver = selenium_webdriver.Chrome(service=service, options=option)
|
177
185
|
if self.maximize_window:
|
178
186
|
driver.maximize_window()
|
179
187
|
|
@@ -222,7 +230,10 @@ class GetDriver:
|
|
222
230
|
if not self.check_proxy():
|
223
231
|
raise GetDriverException(f"代理不可用或格式错误: {self.proxy}")
|
224
232
|
|
225
|
-
|
233
|
+
if self.is_selenium_wire and wire_webdriver:
|
234
|
+
option = wire_webdriver.ChromeOptions() # 浏览器启动选项
|
235
|
+
else:
|
236
|
+
option = selenium_webdriver.ChromeOptions() # 浏览器启动选项
|
226
237
|
if self.headless:
|
227
238
|
option.add_argument("--headless") # 设置无界面模式
|
228
239
|
option.add_argument("--window-size=1920,1080")
|
@@ -1,7 +1,7 @@
|
|
1
1
|
mdbq/__init__.py,sha256=Il5Q9ATdX8yXqVxtP_nYqUhExzxPC_qk_WXQ_4h0exg,16
|
2
|
-
mdbq/__version__.py,sha256=
|
2
|
+
mdbq/__version__.py,sha256=MKsKQWqJcKq5Yl-a7LzywayYm1KeeUGRyTEqu3Itasg,18
|
3
3
|
mdbq/log/__init__.py,sha256=Mpbrav0s0ifLL7lVDAuePEi1hJKiSHhxcv1byBKDl5E,15
|
4
|
-
mdbq/log/mylogger.py,sha256=
|
4
|
+
mdbq/log/mylogger.py,sha256=rJozMRqbO277M8DVwQZVDLUj3eBRCn0MBg29QVlrcog,26384
|
5
5
|
mdbq/myconf/__init__.py,sha256=jso1oHcy6cJEfa7udS_9uO5X6kZLoPBF8l3wCYmr5dM,18
|
6
6
|
mdbq/myconf/myconf.py,sha256=rHvQCnQRKhQ49AZBke-Z4v28hyOLmHt4MylIuB0H6yA,33516
|
7
7
|
mdbq/mysql/__init__.py,sha256=A_DPJyAoEvTSFojiI2e94zP0FKtCkkwKP1kYUCSyQzo,11
|
@@ -22,9 +22,9 @@ mdbq/pbix/refresh_all.py,sha256=OBT9EewSZ0aRS9vL_FflVn74d4l2G00wzHiikCC4TC0,5926
|
|
22
22
|
mdbq/redis/__init__.py,sha256=YtgBlVSMDphtpwYX248wGge1x-Ex_mMufz4-8W0XRmA,12
|
23
23
|
mdbq/redis/getredis.py,sha256=vpBuNc22uj9Vr-_Dh25_wpwWM1e-072EAAIBdB_IpL0,23494
|
24
24
|
mdbq/selenium/__init__.py,sha256=AKzeEceqZyvqn2dEDoJSzDQnbuENkJSHAlbHAD0u0ZI,10
|
25
|
-
mdbq/selenium/get_driver.py,sha256=
|
25
|
+
mdbq/selenium/get_driver.py,sha256=sJYMfkzNprGoHYkppVqxglRSIQm6mO7wvgYvSzTWHdc,20903
|
26
26
|
mdbq/spider/__init__.py,sha256=RBMFXGy_jd1HXZhngB2T2XTvJqki8P_Fr-pBcwijnew,18
|
27
|
-
mdbq-4.0.
|
28
|
-
mdbq-4.0.
|
29
|
-
mdbq-4.0.
|
30
|
-
mdbq-4.0.
|
27
|
+
mdbq-4.0.77.dist-info/METADATA,sha256=NJeHEofQkdsgkO9rQhyEm4uj_w1MEsnJJJh8U2oTwco,364
|
28
|
+
mdbq-4.0.77.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
29
|
+
mdbq-4.0.77.dist-info/top_level.txt,sha256=2FQ-uLnCSB-OwFiWntzmwosW3X2Xqsg0ewh1axsaylA,5
|
30
|
+
mdbq-4.0.77.dist-info/RECORD,,
|
File without changes
|
File without changes
|