Metadata-Version: 2.1
Name: zdxtools
Version: 0.0.37
Summary: 包含图形处理,OS处理,爬虫处理,selenium自动化,各种加密的日常封装
Home-page: https://github.com/pypa/sampleproject
Author: zhou
Author-email: 1057129097@qq.com
Project-URL: Bug Tracker, https://github.com/pypa/sampleproject/issues
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Python: >=3.6
Description-Content-Type: text/markdown
License-File: LICENSE

# zdxtools

个人常用工具库：文件 / 图片 / 爬虫 / 自动化 / 进程 / 压缩 / PyQt5 WebEngine 打包辅助等。

```bash
# 本地开发安装（在 pypi_update 目录）
pip install -e .
```

入口聚合模块：`zdxtools.dx_tools`（多数类也可从子包单独导入）。

---

## 目录一览

| 子模块 | 说明 |
|--------|------|
| `dx_tools` | 核心聚合：web / API / spider / os / img / math / decorator 等 |
| `dx_os` | 文件与路径工具（独立副本） |
| `dx_img` | 图片转换与改 MD5（独立副本） |
| `decorator` | 异常捕获、重试、性能测试装饰器 |
| `pics` | 图片转换 / 压缩 / 内容图处理 |
| `process` | 进程查找、杀进程、管理员运行 |
| `compressTools` | Bandizip 压缩 / 解压 |
| `winrar` | WinRAR 批量压缩交互工具 |
| `AutoSelenium` | Selenium 封装（点击、输入、Driver） |
| `AutoGui` | PyAutoGUI 中文输入等 |
| `AirTestTools` | Airtest 图色点击 / OCR 旁文字 |
| `spider_tools` | 爬虫工具（含二维码解码） |
| `StringUtils` | 字符串工具 |
| `math` / `math_tools` | 中文数字 ↔ 阿拉伯数字 |
| `ctypes` | 结构体拷贝 |
| `pyqt5` | QtWebEngine 打包旁路资源 |

---

## 1. `zdxtools.dx_tools`（核心）

```python
from zdxtools.dx_tools import web, API, string_tools, spider_tools, sign_tools, dx_os, dx_img, math_tools, decorator
```

### 1.1 `web` — Django / Web 辅助

| 方法 | 说明 |
|------|------|
| `article_qx(string)` | 文章换行/空格转 HTML（`<br>` / `&nbsp;`） |
| `is_count(string)` | 判断是否为数字字符串 |
| `get_message_user(code, message)` | 返回 Ajax JSON `HttpResponse` |
| `get_8_id()` | 生成 8 位随机短 ID |
| `django_form_tools.geterror(string)` | 从 Django form 错误 HTML 提取提示 |
| `paging(request, obj, reser_name='')` | 分页：`meiyedata` 当前页数据，`pages` 页码 HTML，`style` CSS |

### 1.2 `API`

| 方法 | 说明 |
|------|------|
| `format_dict(ret)` | 统一字典值为 int/str/float |

### 1.3 `string_tools`

| 方法 | 说明 |
|------|------|
| `re_chinese(string)` | 提取首段中文 |

### 1.4 `spider_tools` — 爬虫

| 方法 | 说明 |
|------|------|
| `return_header(str1='', choice=None)` | 请求头字符串 → dict；`choice='Chrome'` 用内置头 |
| `return_params(paramstr)` | query 字符串 → dict |
| `turn_fiddler_payload(raw, splitStr='\t')` | Fiddler Payload → dict |
| `turn_fiddler_payload_error(raw)` | 旧版 Payload 解析（不推荐） |
| `title_replace(title)` | 清理文件名非法字符 |
| `GetUrlPicFileName(url)` | 从 URL 取图片扩展名相关信息 |
| `get_downfilename(ret)` | 从响应 `Content-Disposition` 取文件名 |
| `down_pic(path, url, ...)` | 下载图片到本地（支持重试、代理） |
| `smart_url_join(base_url, *paths)` | 智能 URL 拼接 |
| `path_clean(path)` | 去掉路径特殊字符（如 `\u202a`） |
| `GetDriver(...)` | 创建绕过检测的 Selenium Driver（转调 AutoSelenium） |

### 1.5 `sign_tools` — 加签排序

| 方法 | 说明 |
|------|------|
| `get_sign(paragms, neadlist=[], deletelist=[], sign_and='&', reverse=False)` | 参数排序并拼接签名串 |

### 1.6 `dx_os` — 文件 / 路径

| 方法 | 说明 |
|------|------|
| `get_wuhouzhuifilename(path)` | 无后缀文件名 |
| `get_file_houzhui(path)` | 扩展名 |
| `get_chunjingfilename(file)` | 去掉 `?`、换行等 |
| `get_fold_file_absolute(path, recursion=False)` | 目录下文件绝对路径列表 |
| `get_all_folders(path, recursion=True)` | 子文件夹列表 |
| `get_new_file_name(filename, uuidFlag=False, DirReserve=False)` | 随机新文件名 |
| `move(oldPath, newPath=False, newdir=False, delete=False)` | 复制/移动单文件 |
| `copy_dir(src_path, target_path, delete=False)` | 复制目录 |
| `set_shortcut(filename, lnkname, argumensts, ...)` | 创建 Windows 快捷方式 |
| `GetShortCut_path(path)` | 解析 `.lnk` 目标路径 |
| `convert_size(size)` | 字节 → 可读大小 |
| `path.get_desk_path()` | 桌面路径 |
| `path.is_link(path)` | 是否 `.lnk` |
| `path.get_all_filepath(path)` | 递归所有文件路径 |

### 1.7 `dx_img` — 图像

| 方法 | 说明 |
|------|------|
| `png_jpg(picpath, fold=False)` | PNG → JPG |
| `change_md5(picpath)` | 追加时间戳改文件 MD5 |

### 1.8 `math_tools`

| 方法 | 说明 |
|------|------|
| `chinesenum_alabo_num(chinese)` | 中文数字 → 阿拉伯数字 |
| `alabo_num_chinesenum(number)` | 阿拉伯数字 → 中文 |

### 1.9 `decorator`（`dx_tools` 内旧版，建议用子包）

| 方法 | 说明 |
|------|------|
| `ExceptionD` | 捕获异常并 `print` |
| `ExceptionD_desc` | 捕获异常并打印堆栈 |
| `ExceptionD_desc_sleep(times=1)` | 捕获后 sleep |

---

## 2. `zdxtools.decorator`

```python
from zdxtools.decorator.decorator import decorator
```

| 方法 | 说明 |
|------|------|
| `ExceptionD` | 捕获异常并打印 |
| `ExceptionD_desc` | 打印完整堆栈 |
| `ExceptionD_desc_sleep(times=1)` | 异常后休眠 |
| `Retry(times=3, sleeptime=1, ...)` | 失败自动重试 |
| `Test(TestTimes=1, ReTimes=3, ...)` | 性能测试（耗时 / tqdm） |

---

## 3. `zdxtools.pics` — 图片处理

| 模块 / 函数 | 说明 |
|-------------|------|
| `convert_pic_to_webp.convert_pic_to_webp(picpath, DELETE=False, quality=65)` | 转 WebP |
| `convert_pic_to_avif.convert_pic_to_webp(...)` | AVIF 相关转换（函数名同 webp） |
| `convert_pic_to_png.convert_pic_to_png(picpath, DELETE=False)` | 转 PNG |
| `convert_webp_to_jpg.convert_webp_to_jpg(...)` | WebP → JPG |
| `gif_to_jpg_first_frame.gif_to_jpg_first_frame(gif_path, ...)` | GIF 取首帧 JPG |
| `resize_image.resize_image(...)` | 缩放图片 |
| `compress_image_auto.compress_image_auto(input_path, output_path, max_width=1920, quality=80)` | 自动压缩（PNG 先转 JPG） |
| `compress_png.compress_png_overwrite(file_path, quality='50-90')` | PNG 原地压缩 |
| `compress_png.batch_compress_overwrite(directory, ...)` | 批量 PNG 压缩 |
| `get_pics_from_content.get_pics_from_content(content)` | 从 HTML/文本提取图片 |
| `handle_pic_url.handle_pic_url(picUrl, ...)` | 处理单个图片 URL |
| `handle_pics_of_content.handle_pics_of_content(content, ...)` | 处理内容中的全部图片 |

---

## 4. `zdxtools.process` — 进程

```python
from zdxtools.process import find_pid_by_name, find_and_kill_process_by_port, kill_process_by_pid, run_as_admin
```

| 模块 / 函数 | 说明 |
|-------------|------|
| `find_pid_by_name.find_pid_by_name(name)` | 按进程名查 PID |
| `find_pid_by_name.get_process_list()` | 进程列表 |
| `kill_process_by_pid.kill_process_by_pid(pid)` | 按 PID 结束进程 |
| `GetProcessNameByCtype.get_process_name_by_pid_windows(pid)` | PID → 进程名 |
| `find_and_kill_process_by_port.find_and_kill_process_by_port(port)` | 按端口查杀 |
| `find_and_kill_process_by_port.find_and_kill_process_by_portlist(portlist)` | 多端口查杀 |
| `run_as_admin.is_admin()` | 是否管理员 |
| `run_as_admin.run_as_admin(func=False)` | 以管理员重跑 |
| `run_as_admin.run_as_vbs(file, encoding='ANSI')` | 通过 VBS 提权运行 |

```python
from zdxtools.process.run_as_admin import run_as_vbs, is_admin
```

---

## 5. `zdxtools.compressTools` — Bandizip

| 函数 | 说明 |
|------|------|
| `bandizip_zip.get_bz_path()` | 查找 `bz.exe` |
| `bandizip_zip.bandizip_zip(source_path, archive_path=None, password=None, delete_after_zip=False)` | 压缩 |
| `bandizip_unzip.get_bz_path()` | 同上 |
| `bandizip_unzip.bandizip_unzip(zip_path, out_dir=None, password=None, delete_after_unzip=True)` | 解压 |

---

## 6. `zdxtools.winrar` — WinRAR 批量压缩

```python
from zdxtools.winrar.winrar_yasuo import manager
manager()  # 交互式：选文件夹/文件批量压缩
```

| 函数 | 说明 |
|------|------|
| `manager()` | 交互入口 |
| `winrar_plyasuo1(path)` | 压缩当前文件夹 |
| `winrar_plyasuo2(path)` | 压缩单个文件 |

---

## 7. `zdxtools.AutoSelenium` — Selenium

```python
from zdxtools.AutoSelenium.tools import AutoSelenium
```

| 方法 | 说明 |
|------|------|
| `GetDriver(chrome_options=False, logging=False, userpath='', debugging_port=False, headless=False, **kwargs)` | 创建 Chrome Driver |
| `js_click(...)` | JS 点击 |
| `js_send_keys(...)` | JS 输入 |
| `js_scroll_click(...)` | 滚动后 JS 点击 |
| `click(...)` / `send_keys(...)` / `send_keys_clear(...)` | 常规点击/输入 |
| `select_scroll_option(...)` | 下拉面板滚动选选项 |
| `Enter(browser=False)` | 回车 |
| `wait(...)` | 等待元素 |
| `switch_to_frame(...)` / `default_content(...)` | iframe 切换 |
| `D_implicitly_wait(...)` | 隐式等待装饰器 |
| `get_response_Selenium(driver, url, jsons=True)` | 用浏览器抓响应 |

---

## 8. `zdxtools.AutoGui` — 桌面自动化

```python
from zdxtools.AutoGui.AutoGui import AutoGui
```

| 方法 | 说明 |
|------|------|
| `write_ch(word, SleepTime=1)` | 剪贴板粘贴中文 |
| `enter()` | 按 Enter |

---

## 9. `zdxtools.AirTestTools` — Airtest

```python
from zdxtools.AirTestTools.tools import tools
```

| 方法 / 函数 | 说明 |
|-------------|------|
| `tools.auto_setup(devices=[...])` | 初始化设备 |
| `tools.touch(filename, ...)` | 图色点击（支持文件夹多图冗余） |
| `tools.exists(filename, ...)` | 图色是否存在 |
| `tools.xiala_Flush(...)` | 下拉刷新 |
| `tools.back()` | 返回键 |
| `xiala_Flush.xiala_Flush(...)` | 独立下拉刷新 |
| `get_text_near_img.get_text_near_img(img_path, ...)` | 找图旁区域 OCR 识字 |

---

## 10. `zdxtools.spider_tools`（子包）

| 模块 | 说明 |
|------|------|
| `spider_tools.spider_tools` | 与 `dx_tools.spider_tools` 同类能力 |
| `decode_qr_code.decode_qr_code(image_path)` | 二维码解码 |

---

## 11. `zdxtools.StringUtils`

| 函数 | 说明 |
|------|------|
| `re_chinese.re_chinese(string)` | 提取中文 |
| `contains_ignore_case.contains_ignore_case(text, substring, use_casefold=True)` | 忽略大小写包含判断 |

---

## 12. `zdxtools.math` / `math_tools`

与 `dx_tools.math_tools` 相同：`chinesenum_alabo_num` / `alabo_num_chinesenum`。

---

## 13. `zdxtools.ctypes`

| 函数 | 说明 |
|------|------|
| `copy_struct_generic.copy_struct_generic(src, struct_type)` | 通用 ctypes 结构体拷贝 |

---

## 14. `zdxtools.pyqt5` — WebEngine 打包辅助

用于 PyInstaller / auto-py-to-exe onedir 下 QtWebEngine 资源找不到导致闪退的问题。  
**须在 `import PyQt5.QtWebEngine*` 之前调用。**

```python
from zdxtools.pyqt5 import ensure_webengine_ready
ensure_webengine_ready()
# 或
ensure_webengine_ready(base_dir=r'D:\app', copy_sidecar=True)
```

| 符号 / 函数 | 说明 |
|-------------|------|
| `WEBENGINE_RESOURCE_FILES` | 需旁路的资源文件名元组 |
| `resolve_app_dirs(base_dir=None, meipass=None)` | 解析 exe / `_MEIPASS` 目录 |
| `apply_chromium_flags(extra_flags='')` | 设置 Chromium 启动参数 |
| `ensure_webengine_sidecar(...)` | 把资源拷到 exe 旁 |
| `setup_webengine_env(...)` | 设置环境变量 / 路径 |
| `ensure_webengine_ready(...)` | 一键：旁路 + 环境就绪 |

---

## 常用导入示例

```python
# 文件工具
from zdxtools.dx_tools import dx_os
files = dx_os.get_fold_file_absolute(r'D:\videos', recursion=True)

# 装饰器
from zdxtools.decorator.decorator import decorator

@decorator.ExceptionD_desc
def foo():
    ...

@decorator.Retry(times=3, sleeptime=1)
def bar():
    ...

# 图片
from zdxtools.pics.convert_pic_to_webp import convert_pic_to_webp
convert_pic_to_webp(r'D:\a.png', quality=70)

# WinRAR 批量压缩
from zdxtools.winrar.winrar_yasuo import manager
manager()

# 管理员运行
from zdxtools.process.run_as_admin import run_as_vbs, is_admin

# PyQt5 WebEngine 打包
from zdxtools.pyqt5 import ensure_webengine_ready
ensure_webengine_ready()
```

---

## 说明

- 部分能力依赖 Windows（快捷方式、WinRAR、Bandizip、管理员提权、部分进程 API）。
- `dx_tools` 中的 `web` / `paging` 依赖 Django。
- `AutoSelenium` / `AirTestTools` / `AutoGui` 需自行安装对应依赖（selenium、airtest、pyautogui 等）。
- 子包 `dx_os`、`dx_img`、`math_tools` 与 `dx_tools` 内同名类能力重叠，可按导入习惯选用。
