jumpy-lion 0.1.1 → 0.1.3
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/dist/browser-controller.d.ts +22 -3
- package/dist/browser-controller.d.ts.map +1 -1
- package/dist/browser-controller.js +316 -71
- package/dist/browser-controller.js.map +1 -1
- package/dist/browser-plugin.d.ts +56 -7
- package/dist/browser-plugin.d.ts.map +1 -1
- package/dist/browser-plugin.js +268 -56
- package/dist/browser-plugin.js.map +1 -1
- package/dist/browser-process/browser.d.ts +39 -0
- package/dist/browser-process/browser.d.ts.map +1 -1
- package/dist/browser-process/browser.js +127 -16
- package/dist/browser-process/browser.js.map +1 -1
- package/dist/browser-process/process.d.ts +9 -0
- package/dist/browser-process/process.d.ts.map +1 -1
- package/dist/browser-process/process.js +100 -6
- package/dist/browser-process/process.js.map +1 -1
- package/dist/browser-profiles/chrome/default.d.ts +116 -0
- package/dist/browser-profiles/chrome/default.d.ts.map +1 -1
- package/dist/browser-profiles/chrome/default.js +118 -1
- package/dist/browser-profiles/chrome/default.js.map +1 -1
- package/dist/browser-profiles/chrome/populate-profile.d.ts +76 -0
- package/dist/browser-profiles/chrome/populate-profile.d.ts.map +1 -0
- package/dist/browser-profiles/chrome/populate-profile.js +300 -0
- package/dist/browser-profiles/chrome/populate-profile.js.map +1 -0
- package/dist/browser-profiles/index.d.ts +1 -0
- package/dist/browser-profiles/index.d.ts.map +1 -1
- package/dist/browser-profiles/index.js +2 -0
- package/dist/browser-profiles/index.js.map +1 -1
- package/dist/crawler.d.ts +81 -9
- package/dist/crawler.d.ts.map +1 -1
- package/dist/crawler.js +26 -10
- package/dist/crawler.js.map +1 -1
- package/dist/fingerprinting/all-fingerprint-defender/_locales/en/messages.json +95 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-16ff15da.d.ts +2 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-16ff15da.d.ts.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-16ff15da.js +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-16ff15da.js.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-1a1456ec.d.ts +2 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-1a1456ec.d.ts.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-1a1456ec.js +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-1a1456ec.js.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-3a7b59dd.d.ts +83 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-3a7b59dd.d.ts.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-3a7b59dd.js +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-3a7b59dd.js.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-7ce85519.d.ts +2 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-7ce85519.d.ts.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-7ce85519.js +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-7ce85519.js.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-aaea1190.d.ts +2 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-aaea1190.d.ts.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-aaea1190.js +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-aaea1190.js.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-b4410958.d.ts +2 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-b4410958.d.ts.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-b4410958.js +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-b4410958.js.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-dfed3562.d.ts +2 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-dfed3562.d.ts.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-dfed3562.js +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-dfed3562.js.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/debounce-09920c81.css +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/options-fe2fb5aa.css +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/popup-1886d2ef.css +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/img/icon-128.png +0 -0
- package/dist/fingerprinting/all-fingerprint-defender/img/icon-16.png +0 -0
- package/dist/fingerprinting/all-fingerprint-defender/img/icon-24.png +0 -0
- package/dist/fingerprinting/all-fingerprint-defender/img/icon-32-disabled.png +0 -0
- package/dist/fingerprinting/all-fingerprint-defender/img/icon-32.png +0 -0
- package/dist/fingerprinting/all-fingerprint-defender/img/icon-48.png +0 -0
- package/dist/fingerprinting/all-fingerprint-defender/manifest.json +83 -0
- package/dist/fingerprinting/all-fingerprint-defender/options.html +17 -0
- package/dist/fingerprinting/all-fingerprint-defender/popup.html +23 -0
- package/dist/fingerprinting/anti-webgpu/background.d.ts +2 -0
- package/dist/fingerprinting/anti-webgpu/background.d.ts.map +1 -0
- package/dist/fingerprinting/anti-webgpu/background.js +4 -0
- package/dist/fingerprinting/anti-webgpu/background.js.map +1 -0
- package/dist/fingerprinting/anti-webgpu/data/content_script/inject.d.ts +2 -0
- package/dist/fingerprinting/anti-webgpu/data/content_script/inject.d.ts.map +1 -0
- package/dist/fingerprinting/anti-webgpu/data/content_script/inject.js +50 -0
- package/dist/fingerprinting/anti-webgpu/data/content_script/inject.js.map +1 -0
- package/dist/fingerprinting/anti-webgpu/data/content_script/page_context/inject.d.ts +2 -0
- package/dist/fingerprinting/anti-webgpu/data/content_script/page_context/inject.d.ts.map +1 -0
- package/dist/fingerprinting/anti-webgpu/data/content_script/page_context/inject.js +172 -0
- package/dist/fingerprinting/anti-webgpu/data/content_script/page_context/inject.js.map +1 -0
- package/dist/fingerprinting/anti-webgpu/data/icons/128.png +0 -0
- package/dist/fingerprinting/anti-webgpu/data/icons/16.png +0 -0
- package/dist/fingerprinting/anti-webgpu/data/icons/32.png +0 -0
- package/dist/fingerprinting/anti-webgpu/data/icons/48.png +0 -0
- package/dist/fingerprinting/anti-webgpu/data/icons/64.png +0 -0
- package/dist/fingerprinting/anti-webgpu/data/popup/popup.css +88 -0
- package/dist/fingerprinting/anti-webgpu/data/popup/popup.d.ts +2 -0
- package/dist/fingerprinting/anti-webgpu/data/popup/popup.d.ts.map +1 -0
- package/dist/fingerprinting/anti-webgpu/data/popup/popup.html +58 -0
- package/dist/fingerprinting/anti-webgpu/data/popup/popup.js +96 -0
- package/dist/fingerprinting/anti-webgpu/data/popup/popup.js.map +1 -0
- package/dist/fingerprinting/anti-webgpu/lib/chrome.d.ts +2 -0
- package/dist/fingerprinting/anti-webgpu/lib/chrome.d.ts.map +1 -0
- package/dist/fingerprinting/anti-webgpu/lib/chrome.js +249 -0
- package/dist/fingerprinting/anti-webgpu/lib/chrome.js.map +1 -0
- package/dist/fingerprinting/anti-webgpu/lib/common.d.ts +2 -0
- package/dist/fingerprinting/anti-webgpu/lib/common.d.ts.map +1 -0
- package/dist/fingerprinting/anti-webgpu/lib/common.js +86 -0
- package/dist/fingerprinting/anti-webgpu/lib/common.js.map +1 -0
- package/dist/fingerprinting/anti-webgpu/lib/config.d.ts +2 -0
- package/dist/fingerprinting/anti-webgpu/lib/config.d.ts.map +1 -0
- package/dist/fingerprinting/anti-webgpu/lib/config.js +14 -0
- package/dist/fingerprinting/anti-webgpu/lib/config.js.map +1 -0
- package/dist/fingerprinting/anti-webgpu/lib/runtime.d.ts +2 -0
- package/dist/fingerprinting/anti-webgpu/lib/runtime.d.ts.map +1 -0
- package/dist/fingerprinting/anti-webgpu/lib/runtime.js +107 -0
- package/dist/fingerprinting/anti-webgpu/lib/runtime.js.map +1 -0
- package/dist/fingerprinting/anti-webgpu/manifest.json +58 -0
- package/dist/fingerprinting/custom-fingerprint-injector.d.ts +87 -0
- package/dist/fingerprinting/custom-fingerprint-injector.d.ts.map +1 -0
- package/dist/fingerprinting/custom-fingerprint-injector.js +342 -0
- package/dist/fingerprinting/custom-fingerprint-injector.js.map +1 -0
- package/dist/fingerprinting/fingerprint-injector.d.ts +163 -0
- package/dist/fingerprinting/fingerprint-injector.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-injector.js +697 -0
- package/dist/fingerprinting/fingerprint-injector.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/audio-spoofing.d.ts +6 -0
- package/dist/fingerprinting/fingerprint-overrides/audio-spoofing.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/audio-spoofing.js +119 -0
- package/dist/fingerprinting/fingerprint-overrides/audio-spoofing.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/canvas-protection.d.ts +6 -0
- package/dist/fingerprinting/fingerprint-overrides/canvas-protection.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/canvas-protection.js +149 -0
- package/dist/fingerprinting/fingerprint-overrides/canvas-protection.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/cdp-detection-bypass.d.ts +14 -0
- package/dist/fingerprinting/fingerprint-overrides/cdp-detection-bypass.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/cdp-detection-bypass.js +763 -0
- package/dist/fingerprinting/fingerprint-overrides/cdp-detection-bypass.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/client-rect-spoofing.d.ts +6 -0
- package/dist/fingerprinting/fingerprint-overrides/client-rect-spoofing.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/client-rect-spoofing.js +195 -0
- package/dist/fingerprinting/fingerprint-overrides/client-rect-spoofing.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/coalesced-events-spoofing.d.ts +10 -0
- package/dist/fingerprinting/fingerprint-overrides/coalesced-events-spoofing.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/coalesced-events-spoofing.js +195 -0
- package/dist/fingerprinting/fingerprint-overrides/coalesced-events-spoofing.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.d.ts +28 -0
- package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.js +1181 -0
- package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/font-spoofing.d.ts +7 -0
- package/dist/fingerprinting/fingerprint-overrides/font-spoofing.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/font-spoofing.js +171 -0
- package/dist/fingerprinting/fingerprint-overrides/font-spoofing.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/index.d.ts +37 -0
- package/dist/fingerprinting/fingerprint-overrides/index.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/index.js +41 -0
- package/dist/fingerprinting/fingerprint-overrides/index.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/keyboard-humanization.d.ts +45 -0
- package/dist/fingerprinting/fingerprint-overrides/keyboard-humanization.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/keyboard-humanization.js +268 -0
- package/dist/fingerprinting/fingerprint-overrides/keyboard-humanization.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/locale-spoofing.d.ts +6 -0
- package/dist/fingerprinting/fingerprint-overrides/locale-spoofing.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/locale-spoofing.js +301 -0
- package/dist/fingerprinting/fingerprint-overrides/locale-spoofing.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/media-codecs-spoofing.d.ts +14 -0
- package/dist/fingerprinting/fingerprint-overrides/media-codecs-spoofing.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/media-codecs-spoofing.js +160 -0
- package/dist/fingerprinting/fingerprint-overrides/media-codecs-spoofing.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/mouse-humanization.d.ts +7 -0
- package/dist/fingerprinting/fingerprint-overrides/mouse-humanization.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/mouse-humanization.js +58 -0
- package/dist/fingerprinting/fingerprint-overrides/mouse-humanization.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/performance-spoofing.d.ts +6 -0
- package/dist/fingerprinting/fingerprint-overrides/performance-spoofing.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/performance-spoofing.js +249 -0
- package/dist/fingerprinting/fingerprint-overrides/performance-spoofing.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/platform-consistency.d.ts +33 -0
- package/dist/fingerprinting/fingerprint-overrides/platform-consistency.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/platform-consistency.js +620 -0
- package/dist/fingerprinting/fingerprint-overrides/platform-consistency.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/prototype-integrity.d.ts +13 -0
- package/dist/fingerprinting/fingerprint-overrides/prototype-integrity.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/prototype-integrity.js +356 -0
- package/dist/fingerprinting/fingerprint-overrides/prototype-integrity.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/runtime-enable-bypass.d.ts +18 -0
- package/dist/fingerprinting/fingerprint-overrides/runtime-enable-bypass.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/runtime-enable-bypass.js +171 -0
- package/dist/fingerprinting/fingerprint-overrides/runtime-enable-bypass.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/scroll-humanization.d.ts +55 -0
- package/dist/fingerprinting/fingerprint-overrides/scroll-humanization.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/scroll-humanization.js +244 -0
- package/dist/fingerprinting/fingerprint-overrides/scroll-humanization.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/stealth-script.d.ts +14 -0
- package/dist/fingerprinting/fingerprint-overrides/stealth-script.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/stealth-script.js +983 -0
- package/dist/fingerprinting/fingerprint-overrides/stealth-script.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/storage-consistency.d.ts +13 -0
- package/dist/fingerprinting/fingerprint-overrides/storage-consistency.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/storage-consistency.js +346 -0
- package/dist/fingerprinting/fingerprint-overrides/storage-consistency.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/timing-consistency.d.ts +13 -0
- package/dist/fingerprinting/fingerprint-overrides/timing-consistency.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/timing-consistency.js +264 -0
- package/dist/fingerprinting/fingerprint-overrides/timing-consistency.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/ua-ch.d.ts +27 -0
- package/dist/fingerprinting/fingerprint-overrides/ua-ch.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/ua-ch.js +213 -0
- package/dist/fingerprinting/fingerprint-overrides/ua-ch.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/utils.d.ts +12 -0
- package/dist/fingerprinting/fingerprint-overrides/utils.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/utils.js +517 -0
- package/dist/fingerprinting/fingerprint-overrides/utils.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.d.ts +12 -0
- package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.js +215 -0
- package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/webgpu-spoofing.d.ts +6 -0
- package/dist/fingerprinting/fingerprint-overrides/webgpu-spoofing.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/webgpu-spoofing.js +202 -0
- package/dist/fingerprinting/fingerprint-overrides/webgpu-spoofing.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/webrtc-spoofing.d.ts +6 -0
- package/dist/fingerprinting/fingerprint-overrides/webrtc-spoofing.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/webrtc-spoofing.js +188 -0
- package/dist/fingerprinting/fingerprint-overrides/webrtc-spoofing.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/launcher-wrap.d.ts +2 -2
- package/dist/launcher-wrap.d.ts.map +1 -1
- package/dist/launcher-wrap.js.map +1 -1
- package/dist/page.d.ts +160 -13
- package/dist/page.d.ts.map +1 -1
- package/dist/page.js +1027 -42
- package/dist/page.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +8 -4
|
@@ -1,33 +1,52 @@
|
|
|
1
|
-
import type { Options } from 'chrome-remote-interface';
|
|
2
1
|
import { BrowserController } from 'crawlee';
|
|
2
|
+
import type { LaunchBrowserOptions } from './browser-plugin.js';
|
|
3
3
|
import type { CdpLauncher, LaunchReturn } from './launcher-wrap.js';
|
|
4
4
|
import type { Cookie } from './page.js';
|
|
5
5
|
import CdpPage from './page.js';
|
|
6
6
|
export type NewPageResult = CdpPage;
|
|
7
7
|
export default class CDPBrowserController extends BrowserController<CdpLauncher, // Library (CDP doesn't have a specific type)
|
|
8
|
-
|
|
8
|
+
LaunchBrowserOptions, // LaunchOptions
|
|
9
9
|
LaunchReturn, // LaunchResult (CDP client)
|
|
10
10
|
{}, // NewPageOptions (empty as there are no specific options)
|
|
11
11
|
NewPageResult> {
|
|
12
12
|
private client?;
|
|
13
|
+
private reconnectAttempts;
|
|
14
|
+
private hasDisconnectListener;
|
|
15
|
+
private isClosing;
|
|
13
16
|
initialize(): Promise<void>;
|
|
14
17
|
/**
|
|
18
|
+
* Attach a listener to handle WebSocket disconnections.
|
|
19
|
+
* @private
|
|
20
|
+
*/
|
|
21
|
+
private _attachDisconnectListener;
|
|
22
|
+
/**
|
|
23
|
+
* Attempt to reconnect if WebSocket connection is lost.
|
|
24
|
+
* @private
|
|
25
|
+
*/
|
|
26
|
+
private _attemptReconnect;
|
|
27
|
+
/**
|
|
28
|
+
* Gracefully closes the browser and associated process.
|
|
15
29
|
* @private
|
|
16
30
|
*/
|
|
17
31
|
protected _close(): Promise<void>;
|
|
18
32
|
/**
|
|
33
|
+
* Force kills the browser process without any grace period.
|
|
19
34
|
* @private
|
|
20
35
|
*/
|
|
21
36
|
protected _kill(): Promise<void>;
|
|
22
37
|
/**
|
|
38
|
+
* Creates a new page in the browser. Implements retry logic to handle potential errors.
|
|
23
39
|
* @private
|
|
24
40
|
*/
|
|
25
|
-
protected _newPage(): Promise<NewPageResult>;
|
|
41
|
+
protected _newPage(maxRetries?: number): Promise<NewPageResult>;
|
|
42
|
+
private _maybeOverrideFingerprint;
|
|
26
43
|
/**
|
|
44
|
+
* Sets cookies on the given page.
|
|
27
45
|
* @private
|
|
28
46
|
*/
|
|
29
47
|
protected _setCookies(page: NewPageResult, cookies: Cookie[]): Promise<void>;
|
|
30
48
|
/**
|
|
49
|
+
* Gets cookies from the given page.
|
|
31
50
|
* @private
|
|
32
51
|
*/
|
|
33
52
|
protected _getCookies(page: NewPageResult): Promise<Cookie[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-controller.d.ts","sourceRoot":"","sources":["../src/browser-controller.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"browser-controller.d.ts","sourceRoot":"","sources":["../src/browser-controller.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAc,MAAM,SAAS,CAAC;AAGxD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAGhE,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,OAAO,MAAM,WAAW,CAAC;AAEhC,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC;AAEpC,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,iBAAiB,CAC/D,WAAW,EAAE,6CAA6C;AAC1D,oBAAoB,EAAE,gBAAgB;AACtC,YAAY,EAAE,4BAA4B;AAC1C,EAAE,EAAE,0DAA0D;AAC9D,aAAa,CAChB;IACG,OAAO,CAAC,MAAM,CAAC,CAAa;IAC5B,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,qBAAqB,CAAS;IACtC,OAAO,CAAC,SAAS,CAAS;IAEpB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA4BjC;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IAiBjC;;;OAGG;YACW,iBAAiB;IAqC/B;;;OAGG;cACa,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAiCvC;;;OAGG;cACa,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBtC;;;OAGG;cACa,QAAQ,CAAC,UAAU,SAAI,GAAG,OAAO,CAAC,aAAa,CAAC;YAqDlD,yBAAyB;IA8JvC;;;OAGG;cACa,WAAW,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQlF;;;OAGG;cACa,WAAW,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAQ1D,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,YAAY,EAAE,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAI5G"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import CDP from 'chrome-remote-interface';
|
|
2
|
-
import { BrowserController, utils } from 'crawlee';
|
|
2
|
+
import { BrowserController, log, utils } from 'crawlee';
|
|
3
|
+
import { FingerprintGenerator } from 'fingerprint-generator';
|
|
3
4
|
import { PAGE_CLOSED } from './events.js';
|
|
5
|
+
import { CdpFingerprintInjector } from './fingerprinting/fingerprint-injector.js';
|
|
4
6
|
import CdpPage from './page.js';
|
|
5
7
|
export default class CDPBrowserController extends BrowserController {
|
|
6
8
|
constructor() {
|
|
@@ -11,98 +13,339 @@ export default class CDPBrowserController extends BrowserController {
|
|
|
11
13
|
writable: true,
|
|
12
14
|
value: void 0
|
|
13
15
|
});
|
|
16
|
+
Object.defineProperty(this, "reconnectAttempts", {
|
|
17
|
+
enumerable: true,
|
|
18
|
+
configurable: true,
|
|
19
|
+
writable: true,
|
|
20
|
+
value: 0
|
|
21
|
+
});
|
|
22
|
+
Object.defineProperty(this, "hasDisconnectListener", {
|
|
23
|
+
enumerable: true,
|
|
24
|
+
configurable: true,
|
|
25
|
+
writable: true,
|
|
26
|
+
value: false
|
|
27
|
+
}); // Flag to track disconnect listener
|
|
28
|
+
Object.defineProperty(this, "isClosing", {
|
|
29
|
+
enumerable: true,
|
|
30
|
+
configurable: true,
|
|
31
|
+
writable: true,
|
|
32
|
+
value: false
|
|
33
|
+
}); // Flag to track intentional browser closure
|
|
14
34
|
}
|
|
15
35
|
async initialize() {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
36
|
+
const maxInitAttempts = 3;
|
|
37
|
+
let attempt = 0;
|
|
38
|
+
while (attempt < maxInitAttempts) {
|
|
39
|
+
try {
|
|
40
|
+
this.client = await CDP({
|
|
41
|
+
port: this.launchContext.debuggingPort,
|
|
42
|
+
local: true,
|
|
43
|
+
});
|
|
44
|
+
this._attachDisconnectListener();
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
attempt++;
|
|
49
|
+
log.error(`Failed to initialize CDP client (attempt ${attempt}/${maxInitAttempts})`, error);
|
|
50
|
+
if (attempt === maxInitAttempts) {
|
|
51
|
+
throw error;
|
|
52
|
+
}
|
|
53
|
+
// Wait before retrying
|
|
54
|
+
await utils.sleep(2000 * attempt);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Attach a listener to handle WebSocket disconnections.
|
|
60
|
+
* @private
|
|
61
|
+
*/
|
|
62
|
+
_attachDisconnectListener() {
|
|
63
|
+
if (!this.client || this.hasDisconnectListener)
|
|
64
|
+
return;
|
|
65
|
+
this.client.on('disconnect', () => {
|
|
66
|
+
if (this.isClosing) {
|
|
67
|
+
log.info('Browser is being closed, skipping reconnection.');
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
log.error('WebSocket disconnected, attempting to reconnect...');
|
|
71
|
+
void this._attemptReconnect().catch((error) => {
|
|
72
|
+
log.error('Failed to reconnect after multiple attempts. Browser has been closed.', error);
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
this.hasDisconnectListener = true; // Mark that we have a disconnect listener attached
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Attempt to reconnect if WebSocket connection is lost.
|
|
79
|
+
* @private
|
|
80
|
+
*/
|
|
81
|
+
async _attemptReconnect(maxAttempts = 5, delayMs = 2000) {
|
|
82
|
+
this.reconnectAttempts = 0;
|
|
83
|
+
while (this.reconnectAttempts < maxAttempts) {
|
|
84
|
+
try {
|
|
85
|
+
log.info(`Reconnect attempt ${this.reconnectAttempts + 1} of ${maxAttempts}`);
|
|
86
|
+
// Connect to browser target directly
|
|
87
|
+
this.client = await CDP({
|
|
88
|
+
port: this.launchContext.debuggingPort,
|
|
89
|
+
target: 'browser', // This connects to the root target without creating new ones
|
|
90
|
+
local: true,
|
|
91
|
+
});
|
|
92
|
+
// NOTE: Network.enable() and Page.enable() REMOVED - they are CDP detection vectors!
|
|
93
|
+
// These domains will be enabled lazily only when actually needed
|
|
94
|
+
// Enabling them on connect triggers detectable side effects
|
|
95
|
+
this.reconnectAttempts = 0;
|
|
96
|
+
log.info('Reconnected to browser successfully.');
|
|
97
|
+
this.hasDisconnectListener = false;
|
|
98
|
+
this._attachDisconnectListener();
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
this.reconnectAttempts++;
|
|
103
|
+
log.error(`Reconnect attempt ${this.reconnectAttempts} failed.`, error);
|
|
104
|
+
if (this.reconnectAttempts === maxAttempts) {
|
|
105
|
+
log.error('Max reconnect attempts reached.');
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
await utils.sleep(delayMs / 2);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
20
111
|
}
|
|
21
112
|
/**
|
|
113
|
+
* Gracefully closes the browser and associated process.
|
|
22
114
|
* @private
|
|
23
115
|
*/
|
|
24
116
|
async _close() {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
117
|
+
try {
|
|
118
|
+
this.isClosing = true;
|
|
119
|
+
if (this.client) {
|
|
120
|
+
await Promise.race([
|
|
121
|
+
this.client.close(),
|
|
122
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error('CDP client close timeout')), 3000)),
|
|
123
|
+
]);
|
|
124
|
+
}
|
|
125
|
+
// Gracefully close the browser process with shorter timeout
|
|
126
|
+
await Promise.race([
|
|
127
|
+
this.launchContext.process.close(),
|
|
128
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error('Browser process close timeout')), 3000)),
|
|
129
|
+
]);
|
|
130
|
+
log.info('Browser process closed successfully');
|
|
131
|
+
}
|
|
132
|
+
catch (e) {
|
|
133
|
+
log.warning('Could not close browser gracefully, force killing', e);
|
|
134
|
+
// Force kill the browser process immediately
|
|
135
|
+
try {
|
|
136
|
+
await this.launchContext.process.kill();
|
|
137
|
+
}
|
|
138
|
+
catch (killError) {
|
|
139
|
+
log.error('Could not kill browser process', killError);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
// Wait for 5 seconds to ensure the browser is fully closed
|
|
28
143
|
await utils.sleep(5000);
|
|
29
144
|
}
|
|
30
145
|
/**
|
|
146
|
+
* Force kills the browser process without any grace period.
|
|
31
147
|
* @private
|
|
32
148
|
*/
|
|
33
149
|
async _kill() {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
150
|
+
try {
|
|
151
|
+
this.isClosing = true;
|
|
152
|
+
if (this.client) {
|
|
153
|
+
await Promise.race([
|
|
154
|
+
this.client.close(),
|
|
155
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error('CDP client close timeout')), 1000)),
|
|
156
|
+
]).catch(() => { }); // Ignore errors for force kill
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
catch (e) {
|
|
160
|
+
log.debug('Error closing client before kill', e);
|
|
161
|
+
}
|
|
162
|
+
await this.launchContext.process.kill();
|
|
37
163
|
}
|
|
38
164
|
/**
|
|
165
|
+
* Creates a new page in the browser. Implements retry logic to handle potential errors.
|
|
39
166
|
* @private
|
|
40
167
|
*/
|
|
41
|
-
async _newPage() {
|
|
42
|
-
|
|
43
|
-
|
|
168
|
+
async _newPage(maxRetries = 3) {
|
|
169
|
+
let retries = 0;
|
|
170
|
+
while (retries < maxRetries) {
|
|
171
|
+
try {
|
|
172
|
+
if (!this.client) {
|
|
173
|
+
await this.initialize();
|
|
174
|
+
}
|
|
175
|
+
// Check if client is still connected
|
|
176
|
+
// @ts-expect-error Accessing internal WebSocket
|
|
177
|
+
if (this.client._ws?.readyState !== 1) { // WebSocket.OPEN = 1
|
|
178
|
+
log.info('Browser connection lost, reinitializing...');
|
|
179
|
+
await this.initialize();
|
|
180
|
+
}
|
|
181
|
+
const { Target } = this.client;
|
|
182
|
+
// Always create a new target
|
|
183
|
+
const { targetId } = await Target.createTarget({ url: 'about:blank' });
|
|
184
|
+
const session = await CDP({ target: targetId, port: this.launchContext.debuggingPort });
|
|
185
|
+
// Activate the target
|
|
186
|
+
await Target.activateTarget({ targetId });
|
|
187
|
+
// Create and return the new page using the static create method
|
|
188
|
+
const page = await CdpPage.create(session);
|
|
189
|
+
page.once(PAGE_CLOSED, () => {
|
|
190
|
+
this.activePages -= 1;
|
|
191
|
+
});
|
|
192
|
+
await this._maybeOverrideFingerprint(page);
|
|
193
|
+
return page;
|
|
194
|
+
}
|
|
195
|
+
catch (error) {
|
|
196
|
+
retries++;
|
|
197
|
+
log.error(`Failed to create new page. Attempt ${retries} of ${maxRetries}`, error);
|
|
198
|
+
if (retries === maxRetries) {
|
|
199
|
+
log.error('Max retries reached. Closing the browser.');
|
|
200
|
+
try {
|
|
201
|
+
await this._close();
|
|
202
|
+
}
|
|
203
|
+
catch (closeError) {
|
|
204
|
+
log.error('Could not close browser client or process', { error: closeError });
|
|
205
|
+
}
|
|
206
|
+
throw new Error('Failed to create a new page after multiple attempts.');
|
|
207
|
+
}
|
|
208
|
+
await utils.sleep(1000 * retries);
|
|
209
|
+
}
|
|
44
210
|
}
|
|
45
|
-
|
|
46
|
-
const { targetId } = await Target.createTarget({ url: 'about:blank' });
|
|
47
|
-
const session = await CDP({ target: targetId, port: this.launchContext.debuggingPort });
|
|
48
|
-
await session.Network.enable();
|
|
49
|
-
await session.Page.enable();
|
|
50
|
-
const { targetInfos } = await Target.getTargets();
|
|
51
|
-
const pages = targetInfos.filter((target) => target.type === 'page' && !target.url.includes('chrome://'));
|
|
52
|
-
await Target.activateTarget({ targetId: pages[pages.length - 1].targetId });
|
|
53
|
-
const page = new CdpPage(session);
|
|
54
|
-
const script = `const inject = ()=> {
|
|
55
|
-
console.log("Injecting")
|
|
56
|
-
if (window.hasRunWebRTCControl) {
|
|
57
|
-
return;
|
|
211
|
+
throw new Error('Failed to create a new page after maximum retry attempts.');
|
|
58
212
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
function RTCPeerConnectionModified(config, constraints) {
|
|
65
|
-
// Modify config or constraints as needed
|
|
66
|
-
// For example, disable ICE gathering to prevent IP leaks
|
|
67
|
-
if (config && config.iceServers) {
|
|
68
|
-
config.iceServers = [];
|
|
213
|
+
async _maybeOverrideFingerprint(page) {
|
|
214
|
+
if (!this.launchContext.fingerprint) {
|
|
215
|
+
log.debug('No fingerprint provided in launchContext, skipping fingerprint injection');
|
|
216
|
+
return;
|
|
69
217
|
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
218
|
+
try {
|
|
219
|
+
// Get fingerprint generator options from launch context (passed from browserPoolOptions)
|
|
220
|
+
const fingerprintGeneratorOptions = this.launchContext.launchOptions?.fingerprintGeneratorOptions;
|
|
221
|
+
// Check if we need to regenerate the fingerprint based on OS mismatch
|
|
222
|
+
let fingerprint = this.launchContext.fingerprint;
|
|
223
|
+
let fp = fingerprint.fingerprint;
|
|
224
|
+
if (fingerprintGeneratorOptions?.operatingSystems?.length > 0) {
|
|
225
|
+
const requestedOS = fingerprintGeneratorOptions.operatingSystems[0]?.toLowerCase();
|
|
226
|
+
const currentPlatform = fp?.navigator?.platform?.toLowerCase() || '';
|
|
227
|
+
// Map platform names to OS names
|
|
228
|
+
const platformToOS = {
|
|
229
|
+
'win32': 'windows',
|
|
230
|
+
'macintel': 'macos',
|
|
231
|
+
'linux x86_64': 'linux',
|
|
232
|
+
'linux': 'linux',
|
|
233
|
+
};
|
|
234
|
+
const currentOS = platformToOS[currentPlatform] || currentPlatform;
|
|
235
|
+
// Check if the fingerprint matches the requested OS
|
|
236
|
+
const osMatches = requestedOS === currentOS ||
|
|
237
|
+
(requestedOS === 'windows' && currentPlatform.includes('win')) ||
|
|
238
|
+
(requestedOS === 'macos' && currentPlatform.includes('mac')) ||
|
|
239
|
+
(requestedOS === 'linux' && currentPlatform.includes('linux'));
|
|
240
|
+
if (!osMatches) {
|
|
241
|
+
log.info('Fingerprint OS mismatch detected, regenerating fingerprint', {
|
|
242
|
+
requestedOS,
|
|
243
|
+
currentPlatform,
|
|
244
|
+
currentOS,
|
|
245
|
+
fingerprintGeneratorOptions,
|
|
246
|
+
});
|
|
247
|
+
// Regenerate fingerprint with correct options using fingerprint-generator directly
|
|
248
|
+
try {
|
|
249
|
+
const generator = new FingerprintGenerator(fingerprintGeneratorOptions);
|
|
250
|
+
fingerprint = generator.getFingerprint();
|
|
251
|
+
fp = fingerprint.fingerprint;
|
|
252
|
+
// Update the launch context with the regenerated fingerprint
|
|
253
|
+
this.launchContext.fingerprint = fingerprint;
|
|
254
|
+
log.info('Fingerprint regenerated successfully', {
|
|
255
|
+
newPlatform: fp?.navigator?.platform,
|
|
256
|
+
newUserAgent: fp?.navigator?.userAgent?.substring(0, 50) + '...',
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
catch (regenerateError) {
|
|
260
|
+
log.error('Failed to regenerate fingerprint, using original', { error: regenerateError });
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
log.debug('Fingerprint OS matches requested OS', { requestedOS, currentPlatform });
|
|
265
|
+
}
|
|
96
266
|
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
267
|
+
const webgl = fp?.webgl;
|
|
268
|
+
log.debug('Fingerprint data from generator:', {
|
|
269
|
+
hasFingerprint: !!fp,
|
|
270
|
+
hasHeaders: !!fingerprint.headers,
|
|
271
|
+
navigatorPlatform: fp?.navigator?.platform,
|
|
272
|
+
navigatorUserAgent: fp?.navigator?.userAgent?.substring(0, 50) + '...',
|
|
273
|
+
screenWidth: fp?.screen?.width,
|
|
274
|
+
screenHeight: fp?.screen?.height,
|
|
275
|
+
webglVendor: webgl?.vendorUnmasked?.substring(0, 30),
|
|
276
|
+
webglRenderer: webgl?.rendererUnmasked?.substring(0, 50),
|
|
277
|
+
});
|
|
278
|
+
// Detect platform from fingerprint or default to Windows for better evasion
|
|
279
|
+
const fingerprintPlatform = fp?.navigator?.platform;
|
|
280
|
+
const platform = fingerprintPlatform || 'Win32'; // Default to Windows instead of Linux
|
|
281
|
+
// Determine if we're running on Apify
|
|
282
|
+
const isApify = process.env.APIFY_IS_AT_HOME === 'true';
|
|
283
|
+
// Get fingerprint options from launch context
|
|
284
|
+
const fingerprintOptions = this.launchContext.launchOptions?.fingerprintOptions || {};
|
|
285
|
+
// Get recommended settings based on environment
|
|
286
|
+
const defaultOptions = isApify
|
|
287
|
+
? CdpFingerprintInjector.getApifyRecommendedSettings()
|
|
288
|
+
: {
|
|
289
|
+
debug: false, // Disable debug logging - anti-bot services detect debug prefixes
|
|
290
|
+
enableAdvancedStealth: true,
|
|
291
|
+
bypassRuntimeEnable: true,
|
|
292
|
+
spoofWebGL: true,
|
|
293
|
+
spoofAudioContext: true,
|
|
294
|
+
spoofClientRects: true,
|
|
295
|
+
spoofFonts: true,
|
|
296
|
+
spoofPerformance: true,
|
|
297
|
+
spoofLocale: true,
|
|
298
|
+
detectTimezone: !!this.launchContext.proxyUrl,
|
|
299
|
+
useFingerprintDefaults: true, // Use hardcoded defaults (set to false to use generated fingerprint data)
|
|
300
|
+
// 2024-2025 new defaults
|
|
301
|
+
bypassCDPDetection: true,
|
|
302
|
+
spoofStorage: true,
|
|
303
|
+
spoofTiming: true,
|
|
304
|
+
enableDataDomeBypass: false,
|
|
305
|
+
// Humanization disabled by default
|
|
306
|
+
humanization: {
|
|
307
|
+
mouse: false,
|
|
308
|
+
keyboard: false,
|
|
309
|
+
scroll: false,
|
|
310
|
+
},
|
|
311
|
+
};
|
|
312
|
+
// Determine effective useFingerprintDefaults value
|
|
313
|
+
const effectiveUseFingerprintDefaults = fingerprintOptions.useFingerprintDefaults ?? defaultOptions.useFingerprintDefaults ?? true;
|
|
314
|
+
// Platform selection logic:
|
|
315
|
+
// - When useFingerprintDefaults is false: prefer generated fingerprint platform
|
|
316
|
+
// - When useFingerprintDefaults is true (default): prefer hardcoded fingerprintOptions.platform
|
|
317
|
+
const effectivePlatform = effectiveUseFingerprintDefaults === false
|
|
318
|
+
? (platform || fingerprintOptions.platform || 'Win32') // Generated fingerprint first
|
|
319
|
+
: (fingerprintOptions.platform || platform || 'Win32'); // Hardcoded option first
|
|
320
|
+
// Merge humanization options properly
|
|
321
|
+
const mergedOptions = {
|
|
322
|
+
...defaultOptions,
|
|
323
|
+
...fingerprintOptions,
|
|
324
|
+
proxyUrl: this.launchContext.proxyUrl,
|
|
325
|
+
platform: effectivePlatform,
|
|
326
|
+
viewport: this.launchContext.launchOptions?.viewport,
|
|
327
|
+
// Ensure humanization options are properly merged
|
|
328
|
+
humanization: {
|
|
329
|
+
...defaultOptions.humanization,
|
|
330
|
+
...fingerprintOptions.humanization,
|
|
331
|
+
},
|
|
332
|
+
};
|
|
333
|
+
await CdpFingerprintInjector.injectFingerprint(page, fingerprint, mergedOptions);
|
|
334
|
+
log.info('Fingerprint injected successfully', {
|
|
335
|
+
platform: mergedOptions.platform,
|
|
336
|
+
isApify,
|
|
337
|
+
hasProxy: !!this.launchContext.proxyUrl,
|
|
338
|
+
useFingerprintDefaults: mergedOptions.useFingerprintDefaults,
|
|
339
|
+
enableDataDomeBypass: mergedOptions.enableDataDomeBypass,
|
|
340
|
+
humanization: mergedOptions.humanization,
|
|
341
|
+
});
|
|
342
|
+
}
|
|
343
|
+
catch (error) {
|
|
344
|
+
log.error('Error attaching fingerprint', { error });
|
|
345
|
+
}
|
|
104
346
|
}
|
|
105
347
|
/**
|
|
348
|
+
* Sets cookies on the given page.
|
|
106
349
|
* @private
|
|
107
350
|
*/
|
|
108
351
|
async _setCookies(page, cookies) {
|
|
@@ -114,6 +357,7 @@ Object.defineProperty(HTMLDivElement.prototype, 'offsetHeight', {
|
|
|
114
357
|
}
|
|
115
358
|
}
|
|
116
359
|
/**
|
|
360
|
+
* Gets cookies from the given page.
|
|
117
361
|
* @private
|
|
118
362
|
*/
|
|
119
363
|
async _getCookies(page) {
|
|
@@ -123,8 +367,9 @@ Object.defineProperty(HTMLDivElement.prototype, 'offsetHeight', {
|
|
|
123
367
|
const cookies = await page?.getCookies();
|
|
124
368
|
return cookies || [];
|
|
125
369
|
}
|
|
126
|
-
// @ts-expect-error
|
|
127
370
|
normalizeProxyOptions(_proxyUrl, _pageOptions) {
|
|
371
|
+
// You can implement custom proxy normalization here if needed
|
|
372
|
+
return {};
|
|
128
373
|
}
|
|
129
374
|
}
|
|
130
375
|
//# sourceMappingURL=browser-controller.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-controller.js","sourceRoot":"","sources":["../src/browser-controller.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"browser-controller.js","sourceRoot":"","sources":["../src/browser-controller.ts"],"names":[],"mappings":"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"}
|
package/dist/browser-plugin.d.ts
CHANGED
|
@@ -7,15 +7,70 @@ type Library = CdpLauncher;
|
|
|
7
7
|
type LaunchResult = LaunchReturn;
|
|
8
8
|
interface NewPageOptions {
|
|
9
9
|
}
|
|
10
|
-
|
|
10
|
+
/**
|
|
11
|
+
* Humanization options for simulating realistic user behavior
|
|
12
|
+
* All options are disabled by default for performance
|
|
13
|
+
*/
|
|
14
|
+
export interface HumanizationOptions {
|
|
15
|
+
/** Enable mouse movement humanization. Default: false */
|
|
16
|
+
mouse?: boolean;
|
|
17
|
+
/** Enable keyboard humanization. Default: false */
|
|
18
|
+
keyboard?: boolean;
|
|
19
|
+
/** Enable scroll humanization. Default: false */
|
|
20
|
+
scroll?: boolean;
|
|
21
|
+
}
|
|
22
|
+
export interface LaunchBrowserOptions {
|
|
11
23
|
browserType: "chrome" | "firefox";
|
|
12
24
|
useIncognitoPages: boolean;
|
|
13
25
|
proxyUrl?: string;
|
|
14
26
|
ignoreHttpsErrors: boolean;
|
|
15
27
|
headless?: boolean;
|
|
16
28
|
executablePath?: string;
|
|
29
|
+
useExperimentalFingerprints?: boolean;
|
|
30
|
+
/** Whether to start the browser maximized and fullscreen. Default: true */
|
|
31
|
+
maximizeWindow?: boolean;
|
|
32
|
+
/** Window width in pixels. Default: 1920 */
|
|
33
|
+
windowWidth?: number;
|
|
34
|
+
/** Window height in pixels. Default: 1080 */
|
|
35
|
+
windowHeight?: number;
|
|
36
|
+
viewport?: {
|
|
37
|
+
width: number;
|
|
38
|
+
height: number;
|
|
39
|
+
deviceScaleFactor: number;
|
|
40
|
+
mobile: boolean;
|
|
41
|
+
};
|
|
42
|
+
fingerprintOptions?: {
|
|
43
|
+
enableAdvancedStealth?: boolean;
|
|
44
|
+
bypassRuntimeEnable?: boolean;
|
|
45
|
+
spoofWebGL?: boolean;
|
|
46
|
+
spoofAudioContext?: boolean;
|
|
47
|
+
spoofClientRects?: boolean;
|
|
48
|
+
maskAutomationFlags?: boolean;
|
|
49
|
+
useFingerprintDefaults?: boolean;
|
|
50
|
+
platform?: 'Win32' | 'MacIntel' | 'Linux x86_64';
|
|
51
|
+
spoofFonts?: boolean;
|
|
52
|
+
spoofPerformance?: boolean;
|
|
53
|
+
spoofLocale?: boolean;
|
|
54
|
+
detectTimezone?: boolean;
|
|
55
|
+
bypassCDPDetection?: boolean;
|
|
56
|
+
spoofStorage?: boolean;
|
|
57
|
+
spoofTiming?: boolean;
|
|
58
|
+
enableDataDomeBypass?: boolean;
|
|
59
|
+
/** Humanization options (all disabled by default) */
|
|
60
|
+
humanization?: HumanizationOptions;
|
|
61
|
+
/** Enable debug logging in browser console. Default: true for debugging */
|
|
62
|
+
debug?: boolean;
|
|
63
|
+
};
|
|
17
64
|
}
|
|
18
65
|
export default class CDPBrowserPlugin extends BrowserPlugin<Library, LaunchBrowserOptions, LaunchResult, NewPageOptions, NewPageResult> {
|
|
66
|
+
private static readonly PORT_RANGE;
|
|
67
|
+
private static usedPorts;
|
|
68
|
+
private static lastAssignedPort;
|
|
69
|
+
private static portLock;
|
|
70
|
+
private getNextAvailablePort;
|
|
71
|
+
private _cleanupStalePorts;
|
|
72
|
+
private _isPortAvailable;
|
|
73
|
+
private releasePort;
|
|
19
74
|
/**
|
|
20
75
|
*/
|
|
21
76
|
protected _addProxyToLaunchOptions(): Promise<void>;
|
|
@@ -49,12 +104,6 @@ export default class CDPBrowserPlugin extends BrowserPlugin<Library, LaunchBrows
|
|
|
49
104
|
* @private
|
|
50
105
|
*/
|
|
51
106
|
private _waitForPort;
|
|
52
|
-
/**
|
|
53
|
-
* Finds a free port to use.
|
|
54
|
-
*
|
|
55
|
-
* @private
|
|
56
|
-
*/
|
|
57
|
-
private _findFreePort;
|
|
58
107
|
/**
|
|
59
108
|
* Tries to connect to the browser using CDP with retries.
|
|
60
109
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-plugin.d.ts","sourceRoot":"","sources":["../src/browser-plugin.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAO,KAAK,aAAa,EAAE,MAAM,SAAS,CAAC;AAEjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,oBAAoB,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"browser-plugin.d.ts","sourceRoot":"","sources":["../src/browser-plugin.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAO,KAAK,aAAa,EAAE,MAAM,SAAS,CAAC;AAEjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,oBAAoB,MAAM,yBAAyB,CAAC;AAG3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAIjD,KAAK,OAAO,GAAG,WAAW,CAAC;AAC3B,KAAK,YAAY,GAAG,YAAY,CAAC;AACjC,UAAU,cAAc;CAAI;AAC5B;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAChC,yDAAyD;IACzD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iDAAiD;IACjD,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACjC,WAAW,EAAE,QAAQ,GAAG,SAAS,CAAC;IAClC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC,2EAA2E;IAC3E,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6CAA6C;IAC7C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,iBAAiB,EAAE,MAAM,CAAC;QAC1B,MAAM,EAAE,OAAO,CAAC;KACnB,CAAC;IACF,kBAAkB,CAAC,EAAE;QACjB,qBAAqB,CAAC,EAAE,OAAO,CAAC;QAChC,mBAAmB,CAAC,EAAE,OAAO,CAAC;QAC9B,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,iBAAiB,CAAC,EAAE,OAAO,CAAC;QAC5B,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAC3B,mBAAmB,CAAC,EAAE,OAAO,CAAC;QAC9B,sBAAsB,CAAC,EAAE,OAAO,CAAC;QACjC,QAAQ,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,cAAc,CAAC;QACjD,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,cAAc,CAAC,EAAE,OAAO,CAAC;QAEzB,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAC7B,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,oBAAoB,CAAC,EAAE,OAAO,CAAC;QAC/B,qDAAqD;QACrD,YAAY,CAAC,EAAE,mBAAmB,CAAC;QACnC,2EAA2E;QAC3E,KAAK,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC;CACL;AAED,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,aAAa,CACvD,OAAO,EACP,oBAAoB,EACpB,YAAY,EACZ,cAAc,EACd,aAAa,CAChB;IACG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAGhC;IAEF,OAAO,CAAC,MAAM,CAAC,SAAS,CAAqB;IAC7C,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAuC;IACtE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAS;YAElB,oBAAoB;YAkEpB,kBAAkB;YAYlB,gBAAgB;IAyC9B,OAAO,CAAC,WAAW;IASnB;OACG;cACa,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIzD;;;;OAIG;IACH,SAAS,CAAC,uBAAuB,CAC7B,aAAa,EAAE,aAAa,CAAC,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,CAAC,GACzG,OAAO;IAKV;;;;OAIG;cACa,OAAO,CACnB,aAAa,EAAE,aAAa,CAAC,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,CAAC,GACzG,OAAO,CAAC,YAAY,CAAC;IAmHxB;;;;OAIG;IAEH,SAAS,CAAC,iBAAiB,IAAI,oBAAoB;IAKnD;;;;OAIG;YACW,cAAc;IAuC5B;;;;OAIG;YACW,YAAY;IAmB1B;;;;OAIG;YACW,iBAAiB;CAuClC"}
|