fingerprint-chromium-engine 0.1.0 → 0.1.1
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.
- package/README.md +227 -227
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,227 +1,227 @@
|
|
|
1
|
-
# Chromium Anti-Detect Engine
|
|
2
|
-
|
|
3
|
-
Thư viện điều khiển trình duyệt Chromium chống bot detection, tích hợp fingerprint, proxy và quản lý profile đa phiên.
|
|
4
|
-
|
|
5
|
-
Được xây dựng trên nền `playwright-core` — tương thích hoàn toàn với Playwright API hiện có, không cần viết lại code nghiệp vụ.
|
|
6
|
-
|
|
7
|
-
[](https://www.typescriptlang.org/)
|
|
8
|
-
[](https://playwright.dev/)
|
|
9
|
-
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
## Tính năng
|
|
13
|
-
|
|
14
|
-
### Fingerprint từ thiết bị thật, inject ở tầng C native
|
|
15
|
-
|
|
16
|
-
Không sinh fingerprint ngẫu nhiên — engine sử dụng fingerprint thu thập từ các thiết bị thực tế, sau đó inject trực tiếp vào Chromium ở cấp độ C/C++. Kết quả là mọi thuộc tính đều trả về giá trị native, không có dấu hiệu bị override dưới bất kỳ hình thức kiểm tra nào.
|
|
17
|
-
|
|
18
|
-
**Navigator & Platform**
|
|
19
|
-
- Navigator properties (thiết bị, trình duyệt, locale, OS...)
|
|
20
|
-
- Network headers `Accept-Language` và `User-Agent` tự động khớp với navigator
|
|
21
|
-
- Kích thước & độ phân giải màn hình, inner/outer viewport
|
|
22
|
-
- `devicePixelRatio` & HiDPI/Retina screen emulation
|
|
23
|
-
|
|
24
|
-
**Đồ họa**
|
|
25
|
-
- WebGL parameters, supported extensions, context attributes & shader precision formats
|
|
26
|
-
- Canvas 2D — thêm nhiễu chống canvas fingerprinting
|
|
27
|
-
- Font fingerprinting (hỗ trợ FontPack đồng bộ font hệ thống)
|
|
28
|
-
|
|
29
|
-
**Media & Hardware**
|
|
30
|
-
- AudioContext sample rate, output latency & max channel count
|
|
31
|
-
- Device voices & speech playback rates
|
|
32
|
-
- Số lượng microphone, webcam, speaker available
|
|
33
|
-
- Battery API, Sensor API (gia tốc kế, con quay hồi chuyển)
|
|
34
|
-
- ClientRects & DOM element coordinates
|
|
35
|
-
|
|
36
|
-
**Mạng & Vị trí**
|
|
37
|
-
- WebRTC IP spoofing ở tầng protocol — không thể bị detect qua JS
|
|
38
|
-
- Geolocation, timezone & locale
|
|
39
|
-
|
|
40
|
-
### Proxy & Môi trường thông minh
|
|
41
|
-
|
|
42
|
-
Không chỉ định tuyến traffic — engine tự động đồng bộ toàn bộ môi trường trình duyệt theo IP proxy:
|
|
43
|
-
|
|
44
|
-
- **Timezone** — múi giờ tự động khớp với vị trí địa lý của proxy
|
|
45
|
-
- **Ngôn ngữ** — `Accept-Language`, `navigator.language` theo quốc gia proxy
|
|
46
|
-
- **Geolocation** — vị trí địa lý theo IP (tuỳ chọn)
|
|
47
|
-
- **WebRTC** — che giấu hoặc thay thế IP rò rỉ qua WebRTC
|
|
48
|
-
- **DNS tùy chỉnh** — hỗ trợ `custom-proxy` và `custom-direct` để tránh DNS leak
|
|
49
|
-
- **QUIC** — tùy chọn bật giao thức QUIC nếu proxy hỗ trợ UDP
|
|
50
|
-
|
|
51
|
-
### Profile đa phiên
|
|
52
|
-
|
|
53
|
-
Duy trì trạng thái đăng nhập, cookies, localStorage và lịch sử giữa các lần chạy:
|
|
54
|
-
|
|
55
|
-
- Mỗi profile độc lập, được lưu theo đường dẫn tùy chọn
|
|
56
|
-
- Tự động khôi phục fingerprint và proxy đã dùng ở phiên trước
|
|
57
|
-
- Lưu profile khi đóng — có thể chỉ định đường dẫn lưu khác nhau mỗi lần
|
|
58
|
-
|
|
59
|
-
### Tương thích Playwright 100%
|
|
60
|
-
|
|
61
|
-
Trả về `BrowserContext` chuẩn của `playwright-core`. Toàn bộ API Playwright (`page`, `locator`, `expect`, `route`...) hoạt động bình thường — không cần thay đổi code nghiệp vụ.
|
|
62
|
-
|
|
63
|
-
---
|
|
64
|
-
|
|
65
|
-
## Cài đặt
|
|
66
|
-
|
|
67
|
-
Cài đặt trực tiếp từ GitHub:
|
|
68
|
-
|
|
69
|
-
```bash
|
|
70
|
-
# npm
|
|
71
|
-
npm install github:maxlogvn/PrivateBrowser playwright-core
|
|
72
|
-
|
|
73
|
-
# yarn
|
|
74
|
-
yarn add github:maxlogvn/PrivateBrowser playwright-core
|
|
75
|
-
|
|
76
|
-
# bun
|
|
77
|
-
bun add github:maxlogvn/PrivateBrowser playwright-core
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
> `playwright-core` là peer dependency — cần cài kèm để thư viện hoạt động.
|
|
81
|
-
|
|
82
|
-
---
|
|
83
|
-
|
|
84
|
-
## Bắt đầu nhanh
|
|
85
|
-
|
|
86
|
-
```ts
|
|
87
|
-
import { Chromium } from 'playwright-browser-manager';
|
|
88
|
-
|
|
89
|
-
const context = await Chromium
|
|
90
|
-
.useFingerprint(fingerprintData)
|
|
91
|
-
.useProxy('http://user:pass@127.0.0.1:8080')
|
|
92
|
-
.useProfile('./profiles/user_01')
|
|
93
|
-
.launch({ headless: false })
|
|
94
|
-
.newContext();
|
|
95
|
-
|
|
96
|
-
const page = await context.newPage();
|
|
97
|
-
await page.goto('https://example.com');
|
|
98
|
-
|
|
99
|
-
await Chromium.quit();
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
> Tất cả method cấu hình (`use*`) trả về `this` — hỗ trợ method chaining.
|
|
103
|
-
> Bắt buộc gọi trước `launch()`. Sau khi `launch()`, cấu hình bị khóa.
|
|
104
|
-
|
|
105
|
-
---
|
|
106
|
-
|
|
107
|
-
## Hướng dẫn sử dụng
|
|
108
|
-
|
|
109
|
-
### Fingerprint
|
|
110
|
-
|
|
111
|
-
```ts
|
|
112
|
-
Chromium.useFingerprint(fingerprintData, {
|
|
113
|
-
usePerfectCanvas: true, // Canvas chính xác theo fingerprint
|
|
114
|
-
safeWebGL: true, // Che giấu GPU renderer & vendor
|
|
115
|
-
safeAudio: true, // Che giấu thông tin audio hardware
|
|
116
|
-
useFontPack: true, // Đồng bộ font với fingerprint mục tiêu
|
|
117
|
-
})
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
> `useFontPack` yêu cầu cài đặt [FontPack từ Bablosoft](https://wiki.bablosoft.com/doku.php?id=fontpack). Nếu chưa cài, engine tự fallback.
|
|
121
|
-
|
|
122
|
-
| Tùy chọn | Mô tả | Mặc định |
|
|
123
|
-
|---|---|---|
|
|
124
|
-
| `emulateDeviceScaleFactor` | Giả lập màn hình HiDPI/Retina | `true` |
|
|
125
|
-
| `emulateSensorAPI` | Giả lập cảm biến di động | `true` |
|
|
126
|
-
| `usePerfectCanvas` | Canvas chính xác từ fingerprint | `true` |
|
|
127
|
-
| `useFontPack` | Đồng bộ font hệ thống | `true` |
|
|
128
|
-
| `safeElementSize` | Che giấu tọa độ DOM element | `false` |
|
|
129
|
-
| `safeBattery` | Giả lập Battery API | `true` |
|
|
130
|
-
| `safeCanvas` | Thêm nhiễu Canvas 2D | `true` |
|
|
131
|
-
| `safeAudio` | Thêm nhiễu Web Audio | `true` |
|
|
132
|
-
| `safeWebGL` | Thêm nhiễu WebGL | `true` |
|
|
133
|
-
|
|
134
|
-
---
|
|
135
|
-
|
|
136
|
-
### Proxy
|
|
137
|
-
|
|
138
|
-
```ts
|
|
139
|
-
Chromium.useProxy('http://user:pass@127.0.0.1:8080', {
|
|
140
|
-
changeTimezone: true, // Đồng bộ múi giờ theo IP proxy
|
|
141
|
-
changeGeolocation: true, // Đồng bộ vị trí địa lý
|
|
142
|
-
changeBrowserLanguage: true, // Đồng bộ ngôn ngữ trình duyệt
|
|
143
|
-
changeWebRTC: 'replace', // Thay IP WebRTC bằng IP proxy
|
|
144
|
-
})
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
**Tùy chọn DNS:**
|
|
148
|
-
|
|
149
|
-
```ts
|
|
150
|
-
Chromium.useProxy('http://...', {
|
|
151
|
-
dnsMode: 'custom-direct', // phân giải DNS cục bộ, traffic còn lại qua proxy
|
|
152
|
-
dnsIP: '1.1.1.1',
|
|
153
|
-
})
|
|
154
|
-
```
|
|
155
|
-
|
|
156
|
-
> `custom-proxy` yêu cầu proxy hỗ trợ UDP. Nếu proxy chỉ hỗ trợ TCP, dùng `custom-direct` hoặc `system-proxy`.
|
|
157
|
-
|
|
158
|
-
**Tùy chọn WebRTC:**
|
|
159
|
-
|
|
160
|
-
| Giá trị | Hành vi |
|
|
161
|
-
|---|---|
|
|
162
|
-
| `enable` | Bật WebRTC — lộ IP thật |
|
|
163
|
-
| `disable` | Tắt hoàn toàn WebRTC |
|
|
164
|
-
| `replace` | Thay IP WebRTC bằng IP proxy *(khuyến nghị)* |
|
|
165
|
-
|
|
166
|
-
---
|
|
167
|
-
|
|
168
|
-
### Profile
|
|
169
|
-
|
|
170
|
-
```ts
|
|
171
|
-
// Lần đầu — tạo mới profile
|
|
172
|
-
Chromium.useProfile('./profiles/user_01')
|
|
173
|
-
|
|
174
|
-
// Các lần sau — tự động khôi phục session, proxy, fingerprint
|
|
175
|
-
Chromium.useProfile('./profiles/user_01', {
|
|
176
|
-
loadProxy: true, // khôi phục proxy từ phiên trước
|
|
177
|
-
loadFingerprint: true, // khôi phục fingerprint từ phiên trước
|
|
178
|
-
})
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
Profile tự động lưu khi gọi `quit()`. Có thể ghi đè đường dẫn lưu:
|
|
182
|
-
|
|
183
|
-
```ts
|
|
184
|
-
await Chromium.quit('./profiles/user_01_backup');
|
|
185
|
-
```
|
|
186
|
-
|
|
187
|
-
---
|
|
188
|
-
|
|
189
|
-
### Vòng đời trình duyệt
|
|
190
|
-
|
|
191
|
-
```ts
|
|
192
|
-
// 1. Cấu hình (có thể chaining)
|
|
193
|
-
Chromium
|
|
194
|
-
.useFingerprint(data)
|
|
195
|
-
.useProxy('http://...')
|
|
196
|
-
.useProfile('./profiles/user_01')
|
|
197
|
-
|
|
198
|
-
// 2. Khởi tạo engine — chỉ gọi một lần
|
|
199
|
-
.launch({ headless: false })
|
|
200
|
-
|
|
201
|
-
// 3. Mở phiên duyệt
|
|
202
|
-
const context = await Chromium.newContext();
|
|
203
|
-
const page = await context.newPage();
|
|
204
|
-
|
|
205
|
-
// 4. Đóng và lưu
|
|
206
|
-
await Chromium.quit();
|
|
207
|
-
```
|
|
208
|
-
|
|
209
|
-
> `launch()` chỉ được gọi **một lần**. Gọi lại sẽ ném lỗi.
|
|
210
|
-
> `newContext()` chỉ cho phép một context tại một thời điểm. Gọi `quit()` trước khi tạo context mới.
|
|
211
|
-
|
|
212
|
-
---
|
|
213
|
-
|
|
214
|
-
## Lưu ý
|
|
215
|
-
|
|
216
|
-
**IP Geolocation với ip-api.com** — bản free giới hạn 45 request/phút/IP. Vượt quá giới hạn nhận HTTP 429. Cân nhắc dùng bản Pro hoặc chuyển về `ipInfoMethod: 'database'` khi scale lớn.
|
|
217
|
-
|
|
218
|
-
**FontPack** — cần tải và cài đặt riêng từ [Bablosoft Wiki](https://wiki.bablosoft.com/doku.php?id=fontpack) để `useFontPack` hoạt động đúng.
|
|
219
|
-
|
|
220
|
-
**Thứ tự gọi** — `use*` → `launch()` → `newContext()` → `quit()`. Sai thứ tự sẽ ném lỗi có mô tả rõ ràng.
|
|
221
|
-
|
|
222
|
-
---
|
|
223
|
-
|
|
224
|
-
## Đóng góp & Hỗ trợ
|
|
225
|
-
|
|
226
|
-
Gặp vấn đề hoặc muốn đề xuất tính năng — tạo [Issue](../../issues) hoặc [Pull Request](../../pulls).
|
|
227
|
-
|
|
1
|
+
# Chromium Anti-Detect Engine
|
|
2
|
+
|
|
3
|
+
Thư viện điều khiển trình duyệt Chromium chống bot detection, tích hợp fingerprint, proxy và quản lý profile đa phiên.
|
|
4
|
+
|
|
5
|
+
Được xây dựng trên nền `playwright-core` — tương thích hoàn toàn với Playwright API hiện có, không cần viết lại code nghiệp vụ.
|
|
6
|
+
|
|
7
|
+
[](https://www.typescriptlang.org/)
|
|
8
|
+
[](https://playwright.dev/)
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Tính năng
|
|
13
|
+
|
|
14
|
+
### Fingerprint từ thiết bị thật, inject ở tầng C native
|
|
15
|
+
|
|
16
|
+
Không sinh fingerprint ngẫu nhiên — engine sử dụng fingerprint thu thập từ các thiết bị thực tế, sau đó inject trực tiếp vào Chromium ở cấp độ C/C++. Kết quả là mọi thuộc tính đều trả về giá trị native, không có dấu hiệu bị override dưới bất kỳ hình thức kiểm tra nào.
|
|
17
|
+
|
|
18
|
+
**Navigator & Platform**
|
|
19
|
+
- Navigator properties (thiết bị, trình duyệt, locale, OS...)
|
|
20
|
+
- Network headers `Accept-Language` và `User-Agent` tự động khớp với navigator
|
|
21
|
+
- Kích thước & độ phân giải màn hình, inner/outer viewport
|
|
22
|
+
- `devicePixelRatio` & HiDPI/Retina screen emulation
|
|
23
|
+
|
|
24
|
+
**Đồ họa**
|
|
25
|
+
- WebGL parameters, supported extensions, context attributes & shader precision formats
|
|
26
|
+
- Canvas 2D — thêm nhiễu chống canvas fingerprinting
|
|
27
|
+
- Font fingerprinting (hỗ trợ FontPack đồng bộ font hệ thống)
|
|
28
|
+
|
|
29
|
+
**Media & Hardware**
|
|
30
|
+
- AudioContext sample rate, output latency & max channel count
|
|
31
|
+
- Device voices & speech playback rates
|
|
32
|
+
- Số lượng microphone, webcam, speaker available
|
|
33
|
+
- Battery API, Sensor API (gia tốc kế, con quay hồi chuyển)
|
|
34
|
+
- ClientRects & DOM element coordinates
|
|
35
|
+
|
|
36
|
+
**Mạng & Vị trí**
|
|
37
|
+
- WebRTC IP spoofing ở tầng protocol — không thể bị detect qua JS
|
|
38
|
+
- Geolocation, timezone & locale
|
|
39
|
+
|
|
40
|
+
### Proxy & Môi trường thông minh
|
|
41
|
+
|
|
42
|
+
Không chỉ định tuyến traffic — engine tự động đồng bộ toàn bộ môi trường trình duyệt theo IP proxy:
|
|
43
|
+
|
|
44
|
+
- **Timezone** — múi giờ tự động khớp với vị trí địa lý của proxy
|
|
45
|
+
- **Ngôn ngữ** — `Accept-Language`, `navigator.language` theo quốc gia proxy
|
|
46
|
+
- **Geolocation** — vị trí địa lý theo IP (tuỳ chọn)
|
|
47
|
+
- **WebRTC** — che giấu hoặc thay thế IP rò rỉ qua WebRTC
|
|
48
|
+
- **DNS tùy chỉnh** — hỗ trợ `custom-proxy` và `custom-direct` để tránh DNS leak
|
|
49
|
+
- **QUIC** — tùy chọn bật giao thức QUIC nếu proxy hỗ trợ UDP
|
|
50
|
+
|
|
51
|
+
### Profile đa phiên
|
|
52
|
+
|
|
53
|
+
Duy trì trạng thái đăng nhập, cookies, localStorage và lịch sử giữa các lần chạy:
|
|
54
|
+
|
|
55
|
+
- Mỗi profile độc lập, được lưu theo đường dẫn tùy chọn
|
|
56
|
+
- Tự động khôi phục fingerprint và proxy đã dùng ở phiên trước
|
|
57
|
+
- Lưu profile khi đóng — có thể chỉ định đường dẫn lưu khác nhau mỗi lần
|
|
58
|
+
|
|
59
|
+
### Tương thích Playwright 100%
|
|
60
|
+
|
|
61
|
+
Trả về `BrowserContext` chuẩn của `playwright-core`. Toàn bộ API Playwright (`page`, `locator`, `expect`, `route`...) hoạt động bình thường — không cần thay đổi code nghiệp vụ.
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Cài đặt
|
|
66
|
+
|
|
67
|
+
Cài đặt trực tiếp từ GitHub:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
# npm
|
|
71
|
+
npm install github:maxlogvn/PrivateBrowser playwright-core
|
|
72
|
+
|
|
73
|
+
# yarn
|
|
74
|
+
yarn add github:maxlogvn/PrivateBrowser playwright-core
|
|
75
|
+
|
|
76
|
+
# bun
|
|
77
|
+
bun add github:maxlogvn/PrivateBrowser playwright-core
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
> `playwright-core` là peer dependency — cần cài kèm để thư viện hoạt động.
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## Bắt đầu nhanh
|
|
85
|
+
|
|
86
|
+
```ts
|
|
87
|
+
import { Chromium } from 'playwright-browser-manager';
|
|
88
|
+
|
|
89
|
+
const context = await Chromium
|
|
90
|
+
.useFingerprint(fingerprintData)
|
|
91
|
+
.useProxy('http://user:pass@127.0.0.1:8080')
|
|
92
|
+
.useProfile('./profiles/user_01')
|
|
93
|
+
.launch({ headless: false })
|
|
94
|
+
.newContext();
|
|
95
|
+
|
|
96
|
+
const page = await context.newPage();
|
|
97
|
+
await page.goto('https://example.com');
|
|
98
|
+
|
|
99
|
+
await Chromium.quit();
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
> Tất cả method cấu hình (`use*`) trả về `this` — hỗ trợ method chaining.
|
|
103
|
+
> Bắt buộc gọi trước `launch()`. Sau khi `launch()`, cấu hình bị khóa.
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## Hướng dẫn sử dụng
|
|
108
|
+
|
|
109
|
+
### Fingerprint
|
|
110
|
+
|
|
111
|
+
```ts
|
|
112
|
+
Chromium.useFingerprint(fingerprintData, {
|
|
113
|
+
usePerfectCanvas: true, // Canvas chính xác theo fingerprint
|
|
114
|
+
safeWebGL: true, // Che giấu GPU renderer & vendor
|
|
115
|
+
safeAudio: true, // Che giấu thông tin audio hardware
|
|
116
|
+
useFontPack: true, // Đồng bộ font với fingerprint mục tiêu
|
|
117
|
+
})
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
> `useFontPack` yêu cầu cài đặt [FontPack từ Bablosoft](https://wiki.bablosoft.com/doku.php?id=fontpack). Nếu chưa cài, engine tự fallback.
|
|
121
|
+
|
|
122
|
+
| Tùy chọn | Mô tả | Mặc định |
|
|
123
|
+
|---|---|---|
|
|
124
|
+
| `emulateDeviceScaleFactor` | Giả lập màn hình HiDPI/Retina | `true` |
|
|
125
|
+
| `emulateSensorAPI` | Giả lập cảm biến di động | `true` |
|
|
126
|
+
| `usePerfectCanvas` | Canvas chính xác từ fingerprint | `true` |
|
|
127
|
+
| `useFontPack` | Đồng bộ font hệ thống | `true` |
|
|
128
|
+
| `safeElementSize` | Che giấu tọa độ DOM element | `false` |
|
|
129
|
+
| `safeBattery` | Giả lập Battery API | `true` |
|
|
130
|
+
| `safeCanvas` | Thêm nhiễu Canvas 2D | `true` |
|
|
131
|
+
| `safeAudio` | Thêm nhiễu Web Audio | `true` |
|
|
132
|
+
| `safeWebGL` | Thêm nhiễu WebGL | `true` |
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
### Proxy
|
|
137
|
+
|
|
138
|
+
```ts
|
|
139
|
+
Chromium.useProxy('http://user:pass@127.0.0.1:8080', {
|
|
140
|
+
changeTimezone: true, // Đồng bộ múi giờ theo IP proxy
|
|
141
|
+
changeGeolocation: true, // Đồng bộ vị trí địa lý
|
|
142
|
+
changeBrowserLanguage: true, // Đồng bộ ngôn ngữ trình duyệt
|
|
143
|
+
changeWebRTC: 'replace', // Thay IP WebRTC bằng IP proxy
|
|
144
|
+
})
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
**Tùy chọn DNS:**
|
|
148
|
+
|
|
149
|
+
```ts
|
|
150
|
+
Chromium.useProxy('http://...', {
|
|
151
|
+
dnsMode: 'custom-direct', // phân giải DNS cục bộ, traffic còn lại qua proxy
|
|
152
|
+
dnsIP: '1.1.1.1',
|
|
153
|
+
})
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
> `custom-proxy` yêu cầu proxy hỗ trợ UDP. Nếu proxy chỉ hỗ trợ TCP, dùng `custom-direct` hoặc `system-proxy`.
|
|
157
|
+
|
|
158
|
+
**Tùy chọn WebRTC:**
|
|
159
|
+
|
|
160
|
+
| Giá trị | Hành vi |
|
|
161
|
+
|---|---|
|
|
162
|
+
| `enable` | Bật WebRTC — lộ IP thật |
|
|
163
|
+
| `disable` | Tắt hoàn toàn WebRTC |
|
|
164
|
+
| `replace` | Thay IP WebRTC bằng IP proxy *(khuyến nghị)* |
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
### Profile
|
|
169
|
+
|
|
170
|
+
```ts
|
|
171
|
+
// Lần đầu — tạo mới profile
|
|
172
|
+
Chromium.useProfile('./profiles/user_01')
|
|
173
|
+
|
|
174
|
+
// Các lần sau — tự động khôi phục session, proxy, fingerprint
|
|
175
|
+
Chromium.useProfile('./profiles/user_01', {
|
|
176
|
+
loadProxy: true, // khôi phục proxy từ phiên trước
|
|
177
|
+
loadFingerprint: true, // khôi phục fingerprint từ phiên trước
|
|
178
|
+
})
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
Profile tự động lưu khi gọi `quit()`. Có thể ghi đè đường dẫn lưu:
|
|
182
|
+
|
|
183
|
+
```ts
|
|
184
|
+
await Chromium.quit('./profiles/user_01_backup');
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
### Vòng đời trình duyệt
|
|
190
|
+
|
|
191
|
+
```ts
|
|
192
|
+
// 1. Cấu hình (có thể chaining)
|
|
193
|
+
Chromium
|
|
194
|
+
.useFingerprint(data)
|
|
195
|
+
.useProxy('http://...')
|
|
196
|
+
.useProfile('./profiles/user_01')
|
|
197
|
+
|
|
198
|
+
// 2. Khởi tạo engine — chỉ gọi một lần
|
|
199
|
+
.launch({ headless: false })
|
|
200
|
+
|
|
201
|
+
// 3. Mở phiên duyệt
|
|
202
|
+
const context = await Chromium.newContext();
|
|
203
|
+
const page = await context.newPage();
|
|
204
|
+
|
|
205
|
+
// 4. Đóng và lưu
|
|
206
|
+
await Chromium.quit();
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
> `launch()` chỉ được gọi **một lần**. Gọi lại sẽ ném lỗi.
|
|
210
|
+
> `newContext()` chỉ cho phép một context tại một thời điểm. Gọi `quit()` trước khi tạo context mới.
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
## Lưu ý
|
|
215
|
+
|
|
216
|
+
**IP Geolocation với ip-api.com** — bản free giới hạn 45 request/phút/IP. Vượt quá giới hạn nhận HTTP 429. Cân nhắc dùng bản Pro hoặc chuyển về `ipInfoMethod: 'database'` khi scale lớn.
|
|
217
|
+
|
|
218
|
+
**FontPack** — cần tải và cài đặt riêng từ [Bablosoft Wiki](https://wiki.bablosoft.com/doku.php?id=fontpack) để `useFontPack` hoạt động đúng.
|
|
219
|
+
|
|
220
|
+
**Thứ tự gọi** — `use*` → `launch()` → `newContext()` → `quit()`. Sai thứ tự sẽ ném lỗi có mô tả rõ ràng.
|
|
221
|
+
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
## Đóng góp & Hỗ trợ
|
|
225
|
+
|
|
226
|
+
Gặp vấn đề hoặc muốn đề xuất tính năng — tạo [Issue](../../issues) hoặc [Pull Request](../../pulls).
|
|
227
|
+
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fingerprint-chromium-engine",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"description": "Native Chromium anti-detect engine for Playwright with real-device fingerprint injection, proxy synchronization and persistent browser profiles.",
|