brosdk 1.0.0__tar.gz

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.
brosdk-1.0.0/PKG-INFO ADDED
@@ -0,0 +1,269 @@
1
+ Metadata-Version: 2.1
2
+ Name: brosdk
3
+ Version: 1.0.0
4
+ Summary: Python bindings for the Brosdk Browser SDK
5
+ Author: browsersdk
6
+ License: MIT
7
+ Project-URL: Homepage, https://www.brosdk.com/
8
+ Project-URL: Repository, https://github.com/browsersdk/brosdk-python
9
+ Project-URL: Changelog, https://github.com/browsersdk/brosdk/releases
10
+ Keywords: browser,sdk,automation,fingerprint
11
+ Classifier: Development Status :: 4 - Beta
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: License :: OSI Approved :: MIT License
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3.8
16
+ Classifier: Programming Language :: Python :: 3.9
17
+ Classifier: Programming Language :: Python :: 3.10
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Operating System :: Microsoft :: Windows
21
+ Classifier: Operating System :: MacOS
22
+ Classifier: Topic :: Software Development :: Libraries
23
+ Requires-Python: >=3.8
24
+ Description-Content-Type: text/markdown
25
+ Provides-Extra: requests
26
+ Requires-Dist: requests>=2.28.0; extra == "requests"
27
+ Provides-Extra: dev
28
+ Requires-Dist: requests>=2.28.0; extra == "dev"
29
+ Requires-Dist: colorama>=0.4.6; extra == "dev"
30
+ Requires-Dist: pytest>=7.0; extra == "dev"
31
+ Requires-Dist: pytest-cov; extra == "dev"
32
+
33
+ # brosdk-python
34
+
35
+ [![PyPI version](https://img.shields.io/pypi/v/brosdk)](https://pypi.org/project/brosdk/)
36
+ [![Python 3.8+](https://img.shields.io/badge/python-3.8%2B-blue.svg)](https://www.python.org/downloads/)
37
+
38
+ Python 语言绑定库 + 交互式命令行 Demo。
39
+
40
+ 通过 `ctypes` 动态加载平台 DLL/dylib,暴露安全、符合 Python 惯用法的 API。
41
+
42
+ ## 安装
43
+
44
+ ```bash
45
+ # 从 PyPI 安装(推荐)
46
+ pip install brosdk
47
+
48
+ # 从源码安装
49
+ git clone https://github.com/browsersdk/brosdk-python.git
50
+ cd brosdk-python
51
+ pip install .
52
+ ```
53
+
54
+ ## 项目结构
55
+
56
+ ```
57
+ brosdk-python/
58
+ ├── brosdk/
59
+ │ ├── __init__.py # 公共 API 导出
60
+ │ ├── ffi.py # 原始 C ctypes 绑定
61
+ │ ├── manager.py # 高级安全封装 + 事件回调
62
+ │ ├── api.py # REST API 客户端
63
+ │ └── console.py # Windows DLL 控制台输出修复
64
+ ├── libs/
65
+ │ ├── brosdk.dll # Windows x64 原生库
66
+ │ └── brosdk.dylib # macOS arm64 原生库
67
+ ├── demo.py # 交互式命令行 Demo
68
+ ├── pyproject.toml # 项目配置
69
+ ├── requirements.txt # 可选依赖
70
+ └── README.md
71
+ ```
72
+
73
+ ## 环境要求
74
+
75
+ - Python 3.8+
76
+ - 从 [github.com/browsersdk/brosdk/releases](https://github.com/browsersdk/brosdk/releases) 下载原生库并放置到 `libs/` 目录
77
+
78
+ ## 快速开始
79
+
80
+ ### 安装依赖(可选)
81
+
82
+ ```bash
83
+ pip install -r requirements.txt
84
+ ```
85
+
86
+ > 不安装也能运行,`requests` 会降级到内置 `urllib`,`colorama` 会降级为无色输出。
87
+
88
+ ### 运行 Demo
89
+
90
+ ```bash
91
+ # 交互式菜单
92
+ python demo.py
93
+
94
+ # 预填 API Key 直接进入
95
+ python demo.py --api-key YOUR_API_KEY
96
+
97
+ # 快速演示(自动执行所有步骤)
98
+ python demo.py --quick --api-key YOUR_API_KEY
99
+
100
+ # 使用已有环境跳过创建步骤
101
+ python demo.py --quick --api-key YOUR_API_KEY --env-id ENV_ID
102
+
103
+ # 开启详细日志
104
+ python demo.py --verbose
105
+ ```
106
+
107
+ ### Demo 使用流程
108
+
109
+ 1. **选择 `1`** → 输入 API Key → 自动获取 userSig → 初始化 SDK(API Key 会自动记住)
110
+ 2. **选择 `2`** → 查看环境列表(SDK 接口或 REST API)
111
+ 3. **选择 `3`** → 选择内核版本(可选代理)→ 创建新环境
112
+ 4. **选择 `4`** → 启动浏览器环境(有记住的环境 ID 时会询问是否复用)
113
+ 5. **选择 `5`** → 关闭浏览器环境
114
+ 6. **选择 `6`** → 查看 SDK 信息
115
+ 7. **选择 `7`** → 更新动态库(从 GitHub Releases 自动下载)
116
+
117
+ > Demo 会自动记住最后一次使用的环境 ID 和 API Key,下次启动无需重复输入。
118
+
119
+ ## 库使用方式
120
+
121
+ ### 基础用法
122
+
123
+ ```python
124
+ from brosdk import BrosdkManager
125
+
126
+ def on_event(event):
127
+ print(f"SDK 事件: code={event.code}, data={event.data}")
128
+
129
+ sdk = BrosdkManager()
130
+ sdk.on_event(on_event)
131
+
132
+ # 加载原生库
133
+ sdk.load("libs/brosdk.dll") # Windows
134
+ # sdk.load("libs/brosdk.dylib") # macOS
135
+
136
+ # 初始化(user_sig 通过 REST API 获取)
137
+ sdk.init("your_user_sig", "/tmp/.brosdk", port=8080)
138
+
139
+ # 启动环境
140
+ import json
141
+ sdk.browser_open(json.dumps({
142
+ "envs": [{"envId": "env-001", "args": ["--no-first-run"]}]
143
+ }))
144
+
145
+ # 关闭环境
146
+ sdk.browser_close("env-001")
147
+
148
+ sdk.shutdown()
149
+ ```
150
+
151
+ ### 使用上下文管理器
152
+
153
+ ```python
154
+ from brosdk import BrosdkManager
155
+
156
+ with BrosdkManager("libs/brosdk.dll") as sdk:
157
+ sdk.init("user_sig", "/tmp/.brosdk")
158
+ sdk.browser_open('{"envs": [{"envId": "env-001"}]}')
159
+ # SDK 会在 with 块结束时自动 shutdown
160
+ ```
161
+
162
+ ### REST API 客户端
163
+
164
+ ```python
165
+ from brosdk.api import BrosdkApiClient
166
+
167
+ client = BrosdkApiClient(api_key="your-api-key")
168
+
169
+ # 获取 userSig
170
+ user_sig = client.get_user_sig()
171
+
172
+ # 创建环境
173
+ env = client.create_env(kernel_version="127", proxy="http://127.0.0.1:8080")
174
+ print(f"创建成功: {env.env_id}")
175
+
176
+ # 查询环境列表
177
+ result = client.page_env(page=1, page_size=20)
178
+ for e in result.list:
179
+ print(f"{e.env_id}: {e.env_name} ({e.kernel_version})")
180
+
181
+ # 获取所有环境(自动翻页)
182
+ all_envs = client.list_all_envs()
183
+ ```
184
+
185
+ ### 监听 SDK 事件
186
+
187
+ ```python
188
+ from brosdk import BrosdkManager, SdkEvent
189
+
190
+ sdk = BrosdkManager()
191
+
192
+ @sdk.on_event
193
+ def handle_event(event: SdkEvent):
194
+ if event.is_ok():
195
+ print(f"成功: {event.data}")
196
+ else:
197
+ data = event.data_json() # 自动解析 JSON
198
+ print(f"事件 code={event.code}: {data}")
199
+ ```
200
+
201
+ > **注意**:`browser_open` 是异步操作,结果通过事件回调返回,不阻塞主线程。
202
+
203
+ ## API 参考
204
+
205
+ ### `BrosdkManager`
206
+
207
+ | 方法 | 说明 |
208
+ |------|------|
209
+ | `load(lib_path)` | 加载原生库,注册回调 |
210
+ | `init(user_sig, work_dir, port)` | 用凭据初始化 SDK |
211
+ | `sdk_info()` | 查询 SDK 运行时信息 |
212
+ | `browser_open(json_str)` | 启动浏览器环境(异步) |
213
+ | `browser_close(env_id)` | 关闭浏览器环境 |
214
+ | `token_update(token_json)` | 刷新访问令牌 |
215
+ | `env_create(config)` | 创建新环境 |
216
+ | `env_page(page, page_size)` | 分页查询环境列表 |
217
+ | `env_update(config)` | 更新环境配置 |
218
+ | `env_destroy(env_id)` | 销毁环境 |
219
+ | `shutdown()` | 优雅关闭 |
220
+ | `on_event(callback)` | 注册事件监听器 |
221
+ | `off_event(callback)` | 移除事件监听器 |
222
+
223
+ ### `BrosdkApiClient`
224
+
225
+ | 方法 | 说明 |
226
+ |------|------|
227
+ | `get_user_sig(duration)` | API Key → userSig |
228
+ | `create_env(kernel_version, ...)` | 创建环境 |
229
+ | `page_env(page, page_size)` | 分页查询环境 |
230
+ | `list_all_envs(page_size)` | 获取所有环境(自动翻页) |
231
+
232
+ ### `SdkEvent`
233
+
234
+ ```python
235
+ @dataclass
236
+ class SdkEvent:
237
+ code: int # SDK 状态码
238
+ data: str # JSON 数据字符串
239
+
240
+ def is_ok(self) -> bool: ... # 是否成功
241
+ def data_json(self) -> Any: ... # 解析 data 为 Python 对象
242
+ ```
243
+
244
+ ## 构建
245
+
246
+ ```bash
247
+ # 安装开发依赖
248
+ pip install -e ".[dev]"
249
+
250
+ # 运行测试
251
+ pytest
252
+
253
+ # 构建发布包
254
+ python -m build
255
+
256
+ # 上传到 PyPI
257
+ twine upload dist/*
258
+ ```
259
+
260
+ ## 特性
261
+
262
+ - **记住环境**:自动保存最后一次使用的环境 ID 和 API Key(`~/.brosdk-demo.json`)
263
+ - **动态库更新**:一键从 GitHub Releases 下载并安装最新版本动态库
264
+ - **跨平台**:支持 Windows(x64)、macOS(arm64)、Linux(x64)
265
+ - **零强制依赖**:核心库无第三方依赖,requests/colorama 为可选增强
266
+
267
+ ## 协议
268
+
269
+ MIT
brosdk-1.0.0/README.md ADDED
@@ -0,0 +1,237 @@
1
+ # brosdk-python
2
+
3
+ [![PyPI version](https://img.shields.io/pypi/v/brosdk)](https://pypi.org/project/brosdk/)
4
+ [![Python 3.8+](https://img.shields.io/badge/python-3.8%2B-blue.svg)](https://www.python.org/downloads/)
5
+
6
+ Python 语言绑定库 + 交互式命令行 Demo。
7
+
8
+ 通过 `ctypes` 动态加载平台 DLL/dylib,暴露安全、符合 Python 惯用法的 API。
9
+
10
+ ## 安装
11
+
12
+ ```bash
13
+ # 从 PyPI 安装(推荐)
14
+ pip install brosdk
15
+
16
+ # 从源码安装
17
+ git clone https://github.com/browsersdk/brosdk-python.git
18
+ cd brosdk-python
19
+ pip install .
20
+ ```
21
+
22
+ ## 项目结构
23
+
24
+ ```
25
+ brosdk-python/
26
+ ├── brosdk/
27
+ │ ├── __init__.py # 公共 API 导出
28
+ │ ├── ffi.py # 原始 C ctypes 绑定
29
+ │ ├── manager.py # 高级安全封装 + 事件回调
30
+ │ ├── api.py # REST API 客户端
31
+ │ └── console.py # Windows DLL 控制台输出修复
32
+ ├── libs/
33
+ │ ├── brosdk.dll # Windows x64 原生库
34
+ │ └── brosdk.dylib # macOS arm64 原生库
35
+ ├── demo.py # 交互式命令行 Demo
36
+ ├── pyproject.toml # 项目配置
37
+ ├── requirements.txt # 可选依赖
38
+ └── README.md
39
+ ```
40
+
41
+ ## 环境要求
42
+
43
+ - Python 3.8+
44
+ - 从 [github.com/browsersdk/brosdk/releases](https://github.com/browsersdk/brosdk/releases) 下载原生库并放置到 `libs/` 目录
45
+
46
+ ## 快速开始
47
+
48
+ ### 安装依赖(可选)
49
+
50
+ ```bash
51
+ pip install -r requirements.txt
52
+ ```
53
+
54
+ > 不安装也能运行,`requests` 会降级到内置 `urllib`,`colorama` 会降级为无色输出。
55
+
56
+ ### 运行 Demo
57
+
58
+ ```bash
59
+ # 交互式菜单
60
+ python demo.py
61
+
62
+ # 预填 API Key 直接进入
63
+ python demo.py --api-key YOUR_API_KEY
64
+
65
+ # 快速演示(自动执行所有步骤)
66
+ python demo.py --quick --api-key YOUR_API_KEY
67
+
68
+ # 使用已有环境跳过创建步骤
69
+ python demo.py --quick --api-key YOUR_API_KEY --env-id ENV_ID
70
+
71
+ # 开启详细日志
72
+ python demo.py --verbose
73
+ ```
74
+
75
+ ### Demo 使用流程
76
+
77
+ 1. **选择 `1`** → 输入 API Key → 自动获取 userSig → 初始化 SDK(API Key 会自动记住)
78
+ 2. **选择 `2`** → 查看环境列表(SDK 接口或 REST API)
79
+ 3. **选择 `3`** → 选择内核版本(可选代理)→ 创建新环境
80
+ 4. **选择 `4`** → 启动浏览器环境(有记住的环境 ID 时会询问是否复用)
81
+ 5. **选择 `5`** → 关闭浏览器环境
82
+ 6. **选择 `6`** → 查看 SDK 信息
83
+ 7. **选择 `7`** → 更新动态库(从 GitHub Releases 自动下载)
84
+
85
+ > Demo 会自动记住最后一次使用的环境 ID 和 API Key,下次启动无需重复输入。
86
+
87
+ ## 库使用方式
88
+
89
+ ### 基础用法
90
+
91
+ ```python
92
+ from brosdk import BrosdkManager
93
+
94
+ def on_event(event):
95
+ print(f"SDK 事件: code={event.code}, data={event.data}")
96
+
97
+ sdk = BrosdkManager()
98
+ sdk.on_event(on_event)
99
+
100
+ # 加载原生库
101
+ sdk.load("libs/brosdk.dll") # Windows
102
+ # sdk.load("libs/brosdk.dylib") # macOS
103
+
104
+ # 初始化(user_sig 通过 REST API 获取)
105
+ sdk.init("your_user_sig", "/tmp/.brosdk", port=8080)
106
+
107
+ # 启动环境
108
+ import json
109
+ sdk.browser_open(json.dumps({
110
+ "envs": [{"envId": "env-001", "args": ["--no-first-run"]}]
111
+ }))
112
+
113
+ # 关闭环境
114
+ sdk.browser_close("env-001")
115
+
116
+ sdk.shutdown()
117
+ ```
118
+
119
+ ### 使用上下文管理器
120
+
121
+ ```python
122
+ from brosdk import BrosdkManager
123
+
124
+ with BrosdkManager("libs/brosdk.dll") as sdk:
125
+ sdk.init("user_sig", "/tmp/.brosdk")
126
+ sdk.browser_open('{"envs": [{"envId": "env-001"}]}')
127
+ # SDK 会在 with 块结束时自动 shutdown
128
+ ```
129
+
130
+ ### REST API 客户端
131
+
132
+ ```python
133
+ from brosdk.api import BrosdkApiClient
134
+
135
+ client = BrosdkApiClient(api_key="your-api-key")
136
+
137
+ # 获取 userSig
138
+ user_sig = client.get_user_sig()
139
+
140
+ # 创建环境
141
+ env = client.create_env(kernel_version="127", proxy="http://127.0.0.1:8080")
142
+ print(f"创建成功: {env.env_id}")
143
+
144
+ # 查询环境列表
145
+ result = client.page_env(page=1, page_size=20)
146
+ for e in result.list:
147
+ print(f"{e.env_id}: {e.env_name} ({e.kernel_version})")
148
+
149
+ # 获取所有环境(自动翻页)
150
+ all_envs = client.list_all_envs()
151
+ ```
152
+
153
+ ### 监听 SDK 事件
154
+
155
+ ```python
156
+ from brosdk import BrosdkManager, SdkEvent
157
+
158
+ sdk = BrosdkManager()
159
+
160
+ @sdk.on_event
161
+ def handle_event(event: SdkEvent):
162
+ if event.is_ok():
163
+ print(f"成功: {event.data}")
164
+ else:
165
+ data = event.data_json() # 自动解析 JSON
166
+ print(f"事件 code={event.code}: {data}")
167
+ ```
168
+
169
+ > **注意**:`browser_open` 是异步操作,结果通过事件回调返回,不阻塞主线程。
170
+
171
+ ## API 参考
172
+
173
+ ### `BrosdkManager`
174
+
175
+ | 方法 | 说明 |
176
+ |------|------|
177
+ | `load(lib_path)` | 加载原生库,注册回调 |
178
+ | `init(user_sig, work_dir, port)` | 用凭据初始化 SDK |
179
+ | `sdk_info()` | 查询 SDK 运行时信息 |
180
+ | `browser_open(json_str)` | 启动浏览器环境(异步) |
181
+ | `browser_close(env_id)` | 关闭浏览器环境 |
182
+ | `token_update(token_json)` | 刷新访问令牌 |
183
+ | `env_create(config)` | 创建新环境 |
184
+ | `env_page(page, page_size)` | 分页查询环境列表 |
185
+ | `env_update(config)` | 更新环境配置 |
186
+ | `env_destroy(env_id)` | 销毁环境 |
187
+ | `shutdown()` | 优雅关闭 |
188
+ | `on_event(callback)` | 注册事件监听器 |
189
+ | `off_event(callback)` | 移除事件监听器 |
190
+
191
+ ### `BrosdkApiClient`
192
+
193
+ | 方法 | 说明 |
194
+ |------|------|
195
+ | `get_user_sig(duration)` | API Key → userSig |
196
+ | `create_env(kernel_version, ...)` | 创建环境 |
197
+ | `page_env(page, page_size)` | 分页查询环境 |
198
+ | `list_all_envs(page_size)` | 获取所有环境(自动翻页) |
199
+
200
+ ### `SdkEvent`
201
+
202
+ ```python
203
+ @dataclass
204
+ class SdkEvent:
205
+ code: int # SDK 状态码
206
+ data: str # JSON 数据字符串
207
+
208
+ def is_ok(self) -> bool: ... # 是否成功
209
+ def data_json(self) -> Any: ... # 解析 data 为 Python 对象
210
+ ```
211
+
212
+ ## 构建
213
+
214
+ ```bash
215
+ # 安装开发依赖
216
+ pip install -e ".[dev]"
217
+
218
+ # 运行测试
219
+ pytest
220
+
221
+ # 构建发布包
222
+ python -m build
223
+
224
+ # 上传到 PyPI
225
+ twine upload dist/*
226
+ ```
227
+
228
+ ## 特性
229
+
230
+ - **记住环境**:自动保存最后一次使用的环境 ID 和 API Key(`~/.brosdk-demo.json`)
231
+ - **动态库更新**:一键从 GitHub Releases 下载并安装最新版本动态库
232
+ - **跨平台**:支持 Windows(x64)、macOS(arm64)、Linux(x64)
233
+ - **零强制依赖**:核心库无第三方依赖,requests/colorama 为可选增强
234
+
235
+ ## 协议
236
+
237
+ MIT
@@ -0,0 +1,29 @@
1
+ """
2
+ brosdk-python
3
+ =================
4
+
5
+ Python 语言绑定库,动态加载平台 DLL/dylib 并暴露安全、符合 Python 惯用法的 API。
6
+
7
+ 快速开始
8
+ --------
9
+
10
+ .. code-block:: python
11
+
12
+ from brosdk import BrosdkManager
13
+
14
+ sdk = BrosdkManager()
15
+ sdk.load("libs/windows-x64/brosdk.dll")
16
+ sdk.init("your_user_sig", "/path/to/work_dir", 8080)
17
+
18
+ sdk.browser_open('{"envs": [{"envId": "env-001"}]}')
19
+ sdk.browser_close("env-001")
20
+ sdk.shutdown()
21
+ """
22
+
23
+ from .manager import BrosdkManager, SdkEvent
24
+ from .ffi import BrosdkLib
25
+
26
+ __version__ = "1.0.0"
27
+ __all__ = [
28
+ "BrosdkManager", "SdkEvent", "BrosdkLib",
29
+ ]