@crawlee/browser-pool 3.0.3-beta.9 → 3.0.4-beta.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 +1 -1
- package/abstract-classes/browser-plugin.d.ts +3 -2
- package/abstract-classes/browser-plugin.d.ts.map +1 -1
- package/abstract-classes/browser-plugin.js +1 -1
- package/abstract-classes/browser-plugin.js.map +1 -1
- package/browser-pool.d.ts +16 -16
- package/browser-pool.js +2 -2
- package/container-proxy-server.d.ts +1 -1
- package/container-proxy-server.d.ts.map +1 -1
- package/container-proxy-server.js +7 -1
- package/container-proxy-server.js.map +1 -1
- package/launch-context.d.ts +1 -0
- package/launch-context.d.ts.map +1 -1
- package/launch-context.js.map +1 -1
- package/package.json +4 -4
- package/playwright/load-firefox-addon.d.ts +2 -0
- package/playwright/load-firefox-addon.d.ts.map +1 -0
- package/playwright/load-firefox-addon.js +86 -0
- package/playwright/load-firefox-addon.js.map +1 -0
- package/playwright/playwright-controller.d.ts.map +1 -1
- package/playwright/playwright-controller.js +22 -17
- package/playwright/playwright-controller.js.map +1 -1
- package/playwright/playwright-plugin.d.ts.map +1 -1
- package/playwright/playwright-plugin.js +56 -11
- package/playwright/playwright-plugin.js.map +1 -1
- package/puppeteer/puppeteer-plugin.d.ts.map +1 -1
- package/puppeteer/puppeteer-plugin.js +4 -1
- package/puppeteer/puppeteer-plugin.js.map +1 -1
- package/tab-as-a-container/background.js +50 -15
- package/tsconfig.build.tsbuildinfo +1 -1
package/README.md
CHANGED
|
@@ -63,7 +63,7 @@ Additionally, the package provides various helper functions to simplify running
|
|
|
63
63
|
|
|
64
64
|
## Quick Start
|
|
65
65
|
|
|
66
|
-
This short tutorial will set you up to start using Crawlee in a minute or two. If you want to learn more, proceed to the [Getting Started](https://crawlee.dev/docs/
|
|
66
|
+
This short tutorial will set you up to start using Crawlee in a minute or two. If you want to learn more, proceed to the [Getting Started](https://crawlee.dev/docs/introduction) tutorial that will take you step by step through creating your first scraper.
|
|
67
67
|
|
|
68
68
|
### Local stand-alone usage
|
|
69
69
|
|
|
@@ -37,7 +37,7 @@ export interface BrowserPluginOptions<LibraryOptions> {
|
|
|
37
37
|
* Options that will be passed down to the automation library. E.g.
|
|
38
38
|
* `puppeteer.launch(launchOptions);`. This is a good place to set
|
|
39
39
|
* options that you want to apply as defaults. To dynamically override
|
|
40
|
-
* those options per-browser, see the `preLaunchHooks` of {@
|
|
40
|
+
* those options per-browser, see the `preLaunchHooks` of {@apilink BrowserPool}.
|
|
41
41
|
*/
|
|
42
42
|
launchOptions?: LibraryOptions;
|
|
43
43
|
/**
|
|
@@ -56,6 +56,7 @@ export interface BrowserPluginOptions<LibraryOptions> {
|
|
|
56
56
|
/**
|
|
57
57
|
* @experimental
|
|
58
58
|
* Like `useIncognitoPages`, but for persistent contexts, so cache is used for faster loading.
|
|
59
|
+
* Works best with Firefox. Unstable on Chromium.
|
|
59
60
|
*/
|
|
60
61
|
experimentalContainers?: boolean;
|
|
61
62
|
/**
|
|
@@ -69,7 +70,7 @@ export interface CreateLaunchContextOptions<Library extends CommonLibrary, Libra
|
|
|
69
70
|
* The `BrowserPlugin` serves two purposes. First, it is the base class that
|
|
70
71
|
* specialized controllers like `PuppeteerPlugin` or `PlaywrightPlugin` extend.
|
|
71
72
|
* Second, it allows the user to configure the automation libraries and
|
|
72
|
-
* feed them to {@
|
|
73
|
+
* feed them to {@apilink BrowserPool} for use.
|
|
73
74
|
*/
|
|
74
75
|
export declare abstract class BrowserPlugin<Library extends CommonLibrary = CommonLibrary, LibraryOptions = Parameters<Library['launch']>[0], LaunchResult extends CommonBrowser = UnwrapPromise<ReturnType<Library['launch']>>, NewPageOptions = Parameters<LaunchResult['newPage']>[0], NewPageResult = UnwrapPromise<ReturnType<LaunchResult['newPage']>>> {
|
|
75
76
|
name: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-plugin.d.ts","sourceRoot":"","sources":["../../src/abstract-classes/browser-plugin.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,8GAA8G,CAAC;AAE9I;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACnD,IAAI,CAAC,EAAE,MAAM,MAAM,CAAC;CACvB;AAED,gBAAgB;AAChB,MAAM,WAAW,aAAa;IAC1B,OAAO,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CACpD;AAED,gBAAgB;AAChB,MAAM,WAAW,UAAU;IACvB,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5C,GAAG,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,oBAAoB,CAAC,cAAc;IAChD;;;;;OAKG;IACH,aAAa,CAAC,EAAE,cAAc,CAAC;IAC/B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B
|
|
1
|
+
{"version":3,"file":"browser-plugin.d.ts","sourceRoot":"","sources":["../../src/abstract-classes/browser-plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,7 +18,7 @@ exports.DEFAULT_USER_AGENT = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36
|
|
|
18
18
|
* The `BrowserPlugin` serves two purposes. First, it is the base class that
|
|
19
19
|
* specialized controllers like `PuppeteerPlugin` or `PlaywrightPlugin` extend.
|
|
20
20
|
* Second, it allows the user to configure the automation libraries and
|
|
21
|
-
* feed them to {@
|
|
21
|
+
* feed them to {@apilink BrowserPool} for use.
|
|
22
22
|
*/
|
|
23
23
|
class BrowserPlugin {
|
|
24
24
|
constructor(library, options = {}) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-plugin.js","sourceRoot":"","sources":["../../src/abstract-classes/browser-plugin.ts"],"names":[],"mappings":";;;;AAAA,wEAAiC;AAEjC,sDAAkD;AAElD,mCAAoD;AAGpD;;;;;;;GAOG;AACU,QAAA,kBAAkB,GAAG,2GAA2G,CAAC;
|
|
1
|
+
{"version":3,"file":"browser-plugin.js","sourceRoot":"","sources":["../../src/abstract-classes/browser-plugin.ts"],"names":[],"mappings":"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"}
|
package/browser-pool.d.ts
CHANGED
|
@@ -74,15 +74,15 @@ export interface BrowserPoolOptions<Plugin extends BrowserPlugin = BrowserPlugin
|
|
|
74
74
|
* Pre-launch hooks are executed just before a browser is launched and provide
|
|
75
75
|
* a good opportunity to dynamically change the launch options.
|
|
76
76
|
* The hooks are called with two arguments:
|
|
77
|
-
* `pageId`: `string` and `launchContext`: {@
|
|
77
|
+
* `pageId`: `string` and `launchContext`: {@apilink LaunchContext}
|
|
78
78
|
*/
|
|
79
79
|
export declare type PreLaunchHook<LC extends LaunchContext> = (pageId: string, launchContext: LC) => void | Promise<void>;
|
|
80
80
|
/**
|
|
81
81
|
* Post-launch hooks are executed as soon as a browser is launched.
|
|
82
82
|
* The hooks are called with two arguments:
|
|
83
|
-
* `pageId`: `string` and `browserController`: {@
|
|
83
|
+
* `pageId`: `string` and `browserController`: {@apilink BrowserController}
|
|
84
84
|
* To guarantee order of execution before other hooks in the same browser,
|
|
85
|
-
* the {@
|
|
85
|
+
* the {@apilink BrowserController} methods cannot be used until the post-launch
|
|
86
86
|
* hooks complete. If you attempt to call `await browserController.close()` from
|
|
87
87
|
* a post-launch hook, it will deadlock the process. This API is subject to change.
|
|
88
88
|
*/
|
|
@@ -91,7 +91,7 @@ export declare type PostLaunchHook<BC extends BrowserController> = (pageId: stri
|
|
|
91
91
|
* Pre-page-create hooks are executed just before a new page is created. They
|
|
92
92
|
* are useful to make dynamic changes to the browser before opening a page.
|
|
93
93
|
* The hooks are called with three arguments:
|
|
94
|
-
* `pageId`: `string`, `browserController`: {@
|
|
94
|
+
* `pageId`: `string`, `browserController`: {@apilink BrowserController} and
|
|
95
95
|
* `pageOptions`: `object|undefined` - This only works if the underlying `BrowserController` supports new page options.
|
|
96
96
|
* So far, new page options are only supported by `PlaywrightController`.
|
|
97
97
|
* If the page options are not supported by `BrowserController` the `pageOptions` argument is `undefined`.
|
|
@@ -103,7 +103,7 @@ export declare type PrePageCreateHook<BC extends BrowserController, PO = Paramet
|
|
|
103
103
|
* place to make changes to a page that you would like to apply to all
|
|
104
104
|
* pages. Such as injecting a JavaScript library into all pages.
|
|
105
105
|
* The hooks are called with two arguments:
|
|
106
|
-
* `page`: `Page` and `browserController`: {@
|
|
106
|
+
* `page`: `Page` and `browserController`: {@apilink BrowserController}
|
|
107
107
|
*/
|
|
108
108
|
export declare type PostPageCreateHook<BC extends BrowserController, Page = UnwrapPromise<ReturnType<BC['newPage']>>> = (page: Page, browserController: BC) => void | Promise<void>;
|
|
109
109
|
/**
|
|
@@ -111,13 +111,13 @@ export declare type PostPageCreateHook<BC extends BrowserController, Page = Unwr
|
|
|
111
111
|
* in a page that's about to be closed, such as saving a snapshot or updating
|
|
112
112
|
* state.
|
|
113
113
|
* The hooks are called with two arguments:
|
|
114
|
-
* `page`: `Page` and `browserController`: {@
|
|
114
|
+
* `page`: `Page` and `browserController`: {@apilink BrowserController}
|
|
115
115
|
*/
|
|
116
116
|
export declare type PrePageCloseHook<BC extends BrowserController, Page = UnwrapPromise<ReturnType<BC['newPage']>>> = (page: Page, browserController: BC) => void | Promise<void>;
|
|
117
117
|
/**
|
|
118
118
|
* Post-page-close hooks allow you to do page related clean up.
|
|
119
119
|
* The hooks are called with two arguments:
|
|
120
|
-
* `pageId`: `string` and `browserController`: {@
|
|
120
|
+
* `pageId`: `string` and `browserController`: {@apilink BrowserController}
|
|
121
121
|
*/
|
|
122
122
|
export declare type PostPageCloseHook<BC extends BrowserController> = (pageId: string, browserController: BC) => void | Promise<void>;
|
|
123
123
|
export interface BrowserPoolHooks<BC extends BrowserController, LC extends LaunchContext, PR extends UnwrapPromise<ReturnType<BC['newPage']>> = UnwrapPromise<ReturnType<BC['newPage']>>> {
|
|
@@ -125,15 +125,15 @@ export interface BrowserPoolHooks<BC extends BrowserController, LC extends Launc
|
|
|
125
125
|
* Pre-launch hooks are executed just before a browser is launched and provide
|
|
126
126
|
* a good opportunity to dynamically change the launch options.
|
|
127
127
|
* The hooks are called with two arguments:
|
|
128
|
-
* `pageId`: `string` and `launchContext`: {@
|
|
128
|
+
* `pageId`: `string` and `launchContext`: {@apilink LaunchContext}
|
|
129
129
|
*/
|
|
130
130
|
preLaunchHooks?: PreLaunchHook<LC>[];
|
|
131
131
|
/**
|
|
132
132
|
* Post-launch hooks are executed as soon as a browser is launched.
|
|
133
133
|
* The hooks are called with two arguments:
|
|
134
|
-
* `pageId`: `string` and `browserController`: {@
|
|
134
|
+
* `pageId`: `string` and `browserController`: {@apilink BrowserController}
|
|
135
135
|
* To guarantee order of execution before other hooks in the same browser,
|
|
136
|
-
* the {@
|
|
136
|
+
* the {@apilink BrowserController} methods cannot be used until the post-launch
|
|
137
137
|
* hooks complete. If you attempt to call `await browserController.close()` from
|
|
138
138
|
* a post-launch hook, it will deadlock the process. This API is subject to change.
|
|
139
139
|
*/
|
|
@@ -142,7 +142,7 @@ export interface BrowserPoolHooks<BC extends BrowserController, LC extends Launc
|
|
|
142
142
|
* Pre-page-create hooks are executed just before a new page is created. They
|
|
143
143
|
* are useful to make dynamic changes to the browser before opening a page.
|
|
144
144
|
* The hooks are called with three arguments:
|
|
145
|
-
* `pageId`: `string`, `browserController`: {@
|
|
145
|
+
* `pageId`: `string`, `browserController`: {@apilink BrowserController} and
|
|
146
146
|
* `pageOptions`: `object|undefined` - This only works if the underlying `BrowserController` supports new page options.
|
|
147
147
|
* So far, new page options are only supported by `PlaywrightController`.
|
|
148
148
|
* If the page options are not supported by `BrowserController` the `pageOptions` argument is `undefined`.
|
|
@@ -154,7 +154,7 @@ export interface BrowserPoolHooks<BC extends BrowserController, LC extends Launc
|
|
|
154
154
|
* place to make changes to a page that you would like to apply to all
|
|
155
155
|
* pages. Such as injecting a JavaScript library into all pages.
|
|
156
156
|
* The hooks are called with two arguments:
|
|
157
|
-
* `page`: `Page` and `browserController`: {@
|
|
157
|
+
* `page`: `Page` and `browserController`: {@apilink BrowserController}
|
|
158
158
|
*/
|
|
159
159
|
postPageCreateHooks?: PostPageCreateHook<BC, PR>[];
|
|
160
160
|
/**
|
|
@@ -162,13 +162,13 @@ export interface BrowserPoolHooks<BC extends BrowserController, LC extends Launc
|
|
|
162
162
|
* in a page that's about to be closed, such as saving a snapshot or updating
|
|
163
163
|
* state.
|
|
164
164
|
* The hooks are called with two arguments:
|
|
165
|
-
* `page`: `Page` and `browserController`: {@
|
|
165
|
+
* `page`: `Page` and `browserController`: {@apilink BrowserController}
|
|
166
166
|
*/
|
|
167
167
|
prePageCloseHooks?: PrePageCloseHook<BC, PR>[];
|
|
168
168
|
/**
|
|
169
169
|
* Post-page-close hooks allow you to do page related clean up.
|
|
170
170
|
* The hooks are called with two arguments:
|
|
171
|
-
* `pageId`: `string` and `browserController`: {@
|
|
171
|
+
* `pageId`: `string` and `browserController`: {@apilink BrowserController}
|
|
172
172
|
*/
|
|
173
173
|
postPageCloseHooks?: PostPageCloseHook<BC>[];
|
|
174
174
|
}
|
|
@@ -253,7 +253,7 @@ export declare class BrowserPool<Options extends BrowserPoolOptions = BrowserPoo
|
|
|
253
253
|
*/
|
|
254
254
|
newPage(options?: BrowserPoolNewPageOptions<PageOptions, BrowserPlugins[number]>): Promise<PageReturn>;
|
|
255
255
|
/**
|
|
256
|
-
* Unlike {@
|
|
256
|
+
* Unlike {@apilink newPage}, `newPageInNewBrowser` always launches a new
|
|
257
257
|
* browser to open the page in. Use the `launchOptions` option to
|
|
258
258
|
* configure the new browser.
|
|
259
259
|
*/
|
|
@@ -280,7 +280,7 @@ export declare class BrowserPool<Options extends BrowserPoolOptions = BrowserPoo
|
|
|
280
280
|
*/
|
|
281
281
|
newPageWithEachPlugin(optionsList?: Omit<BrowserPoolNewPageOptions<PageOptions, BrowserPlugins[number]>, 'browserPlugin'>[]): Promise<PageReturn[]>;
|
|
282
282
|
/**
|
|
283
|
-
* Retrieves a {@
|
|
283
|
+
* Retrieves a {@apilink BrowserController} for a given page. This is useful
|
|
284
284
|
* when you're working only with pages and need to access the browser
|
|
285
285
|
* manipulation functionality.
|
|
286
286
|
*
|
package/browser-pool.js
CHANGED
|
@@ -277,7 +277,7 @@ class BrowserPool extends tiny_typed_emitter_1.TypedEmitter {
|
|
|
277
277
|
});
|
|
278
278
|
}
|
|
279
279
|
/**
|
|
280
|
-
* Unlike {@
|
|
280
|
+
* Unlike {@apilink newPage}, `newPageInNewBrowser` always launches a new
|
|
281
281
|
* browser to open the page in. Use the `launchOptions` option to
|
|
282
282
|
* configure the new browser.
|
|
283
283
|
*/
|
|
@@ -321,7 +321,7 @@ class BrowserPool extends tiny_typed_emitter_1.TypedEmitter {
|
|
|
321
321
|
return Promise.all(pagePromises);
|
|
322
322
|
}
|
|
323
323
|
/**
|
|
324
|
-
* Retrieves a {@
|
|
324
|
+
* Retrieves a {@apilink BrowserController} for a given page. This is useful
|
|
325
325
|
* when you're working only with pages and need to access the browser
|
|
326
326
|
* manipulation functionality.
|
|
327
327
|
*
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* in order to work around authorization and to enable upstream.
|
|
5
5
|
* @internal
|
|
6
6
|
*/
|
|
7
|
-
export declare function createProxyServerForContainers(): Promise<{
|
|
7
|
+
export declare function createProxyServerForContainers(fallbackProxyUrl?: string): Promise<{
|
|
8
8
|
port: number;
|
|
9
9
|
ipToProxy: Map<string, string>;
|
|
10
10
|
close(closeConnections: boolean): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container-proxy-server.d.ts","sourceRoot":"","sources":["../src/container-proxy-server.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,wBAAsB,8BAA8B;;;
|
|
1
|
+
{"version":3,"file":"container-proxy-server.d.ts","sourceRoot":"","sources":["../src/container-proxy-server.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,wBAAsB,8BAA8B,CAAC,gBAAgB,CAAC,EAAE,MAAM;;;4BAuCxC,OAAO;GAI5C"}
|
|
@@ -8,7 +8,7 @@ const proxy_chain_1 = require("proxy-chain");
|
|
|
8
8
|
* in order to work around authorization and to enable upstream.
|
|
9
9
|
* @internal
|
|
10
10
|
*/
|
|
11
|
-
async function createProxyServerForContainers() {
|
|
11
|
+
async function createProxyServerForContainers(fallbackProxyUrl) {
|
|
12
12
|
const ipToProxy = new Map();
|
|
13
13
|
const proxyServer = new proxy_chain_1.Server({
|
|
14
14
|
prepareRequestFunction({ request }) {
|
|
@@ -18,6 +18,12 @@ async function createProxyServerForContainers() {
|
|
|
18
18
|
: request.socket.localAddress;
|
|
19
19
|
const upstreamProxyUrl = ipToProxy.get(localAddress);
|
|
20
20
|
if (upstreamProxyUrl === undefined) {
|
|
21
|
+
if (fallbackProxyUrl) {
|
|
22
|
+
return {
|
|
23
|
+
upstreamProxyUrl: fallbackProxyUrl,
|
|
24
|
+
requestAuthentication: false,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
21
27
|
// eslint-disable-next-line no-console
|
|
22
28
|
console.warn(`Request without proxy ${localAddress} ${request.headers.host}`);
|
|
23
29
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container-proxy-server.js","sourceRoot":"","sources":["../src/container-proxy-server.ts"],"names":[],"mappings":";;;AAAA,6CAAyD;AAEzD;;;;;GAKG;AACI,KAAK,UAAU,8BAA8B;
|
|
1
|
+
{"version":3,"file":"container-proxy-server.js","sourceRoot":"","sources":["../src/container-proxy-server.ts"],"names":[],"mappings":";;;AAAA,6CAAyD;AAEzD;;;;;GAKG;AACI,KAAK,UAAU,8BAA8B,CAAC,gBAAyB;IAC1E,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE5C,MAAM,WAAW,GAAG,IAAI,oBAAgB,CAAC;QACrC,sBAAsB,CAAC,EAAE,OAAO,EAAE;YAC9B,MAAM,UAAU,GAAG,SAAS,CAAC;YAC7B,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,YAAa,CAAC,UAAU,CAAC,UAAU,CAAC;gBACpE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,YAAa,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC;gBACvD,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,YAAa,CAAC;YAEnC,MAAM,gBAAgB,GAAG,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAErD,IAAI,gBAAgB,KAAK,SAAS,EAAE;gBAChC,IAAI,gBAAgB,EAAE;oBAClB,OAAO;wBACH,gBAAgB,EAAE,gBAAgB;wBAClC,qBAAqB,EAAE,KAAK;qBAC/B,CAAC;iBACL;gBAED,sCAAsC;gBACtC,OAAO,CAAC,IAAI,CAAC,yBAAyB,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;aACjF;YAED,OAAO;gBACH,gBAAgB;gBAChB,qBAAqB,EAAE,KAAK;aAC/B,CAAC;QACN,CAAC;QACD,IAAI,EAAE,CAAC;KACV,CAAC,CAAC;IAEH,MAAM,WAAW,CAAC,MAAM,EAAE,CAAC;IAE3B,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IAE3B,OAAO;QACH,IAAI,EAAE,WAAW,CAAC,IAAI;QACtB,SAAS;QACT,KAAK,CAAC,KAAK,CAAC,gBAAyB;YACjC,OAAO,WAAW,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAC/C,CAAC;KACJ,CAAC;AACN,CAAC;AA3CD,wEA2CC;AAAA,CAAC"}
|
package/launch-context.d.ts
CHANGED
|
@@ -33,6 +33,7 @@ export interface LaunchContextOptions<Library extends CommonLibrary = CommonLibr
|
|
|
33
33
|
/**
|
|
34
34
|
* @experimental
|
|
35
35
|
* Like `useIncognitoPages`, but for persistent contexts, so cache is used for faster loading.
|
|
36
|
+
* Works best with Firefox. Unstable on Chromium.
|
|
36
37
|
*/
|
|
37
38
|
experimentalContainers?: boolean;
|
|
38
39
|
/**
|
package/launch-context.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launch-context.d.ts","sourceRoot":"","sources":["../src/launch-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AACrG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB,CACjC,OAAO,SAAS,aAAa,GAAG,aAAa,EAC7C,cAAc,GAAG,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EACjD,YAAY,SAAS,aAAa,GAAG,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EACjF,cAAc,GAAG,UAAU,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EACvD,aAAa,GAAG,aAAa,CAAC,UAAU,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;IAElE;;;;;OAKG;IACH,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ;;OAEG;IACH,aAAa,EAAE,aAAa,CAAC,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC;IACnG;;;OAGG;IACH,aAAa,EAAE,cAAc,CAAC;IAC9B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B
|
|
1
|
+
{"version":3,"file":"launch-context.d.ts","sourceRoot":"","sources":["../src/launch-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AACrG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB,CACjC,OAAO,SAAS,aAAa,GAAG,aAAa,EAC7C,cAAc,GAAG,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EACjD,YAAY,SAAS,aAAa,GAAG,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EACjF,cAAc,GAAG,UAAU,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EACvD,aAAa,GAAG,aAAa,CAAC,UAAU,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;IAElE;;;;;OAKG;IACH,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ;;OAEG;IACH,aAAa,EAAE,aAAa,CAAC,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC;IACnG;;;OAGG;IACH,aAAa,EAAE,cAAc,CAAC;IAC9B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,aAAa,CACtB,OAAO,SAAS,aAAa,GAAG,aAAa,EAC7C,cAAc,GAAG,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EACjD,YAAY,SAAS,aAAa,GAAG,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EACjF,cAAc,GAAG,UAAU,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EACvD,aAAa,GAAG,aAAa,CAAC,UAAU,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;IAElE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,aAAa,EAAE,aAAa,CAAC,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC;IACnG,aAAa,EAAE,cAAc,CAAC;IAC9B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,sBAAsB,EAAE,OAAO,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;IAEpB,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAwC;IAE5E,WAAW,CAAC,EAAE,6BAA6B,CAAC;IAC5C,CAAC,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC;gBAEd,OAAO,EAAE,oBAAoB,CAAC,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,CAAC;IAqB/G;;;;;;OAMG;IACH,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI;IAU/D;;;OAGG;IACH,IAAI,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAYnC;IAED;;OAEG;IACH,IAAI,QAAQ,IAAI,MAAM,GAAG,SAAS,CAEjC;CACJ"}
|
package/launch-context.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launch-context.js","sourceRoot":"","sources":["../src/launch-context.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"launch-context.js","sourceRoot":"","sources":["../src/launch-context.ts"],"names":[],"mappings":";;;AAoDA,MAAa,aAAa;IAoBtB,YAAY,OAAmG;QAb/G;;;;;WAAY;QACZ;;;;;WAAmG;QACnG;;;;;WAA8B;QAC9B;;;;;WAA2B;QAC3B;;;;;WAAgC;QAChC;;;;;WAAoB;QAEpB;;;;;WAA2B;QAC3B;;;;mBAAuC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC;WAAC;QAE5E;;;;;WAA4C;QAIxC,MAAM,EACF,EAAE,EACF,aAAa,EACb,aAAa,EACb,QAAQ,EACR,iBAAiB,EACjB,sBAAsB,EACtB,WAAW,GAAG,EAAE,GACnB,GAAG,OAAO,CAAC;QAEZ,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,IAAI,KAAK,CAAC;QACpD,IAAI,CAAC,sBAAsB,GAAG,sBAAsB,IAAI,KAAK,CAAC;QAC9D,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAE/B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC9B,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAyC,MAAS;QACpD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YAC5C,IAAI,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;gBACxC,MAAM,IAAI,KAAK,CAAC,yCAAyC,GAAG,0BAA0B,CAAC,CAAC;aAC3F;iBAAM;gBACH,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;aACjC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;OAGG;IACH,IAAI,QAAQ,CAAC,GAAuB;QAChC,IAAI,CAAC,GAAG,EAAE;YACN,OAAO;SACV;QAED,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QACjC,WAAW,CAAC,QAAQ,GAAG,GAAG,CAAC;QAC3B,WAAW,CAAC,MAAM,GAAG,EAAE,CAAC;QACxB,WAAW,CAAC,IAAI,GAAG,EAAE,CAAC;QAEtB,iHAAiH;QACjH,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC;IAED;;OAEG;IACH,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;CACJ;AAlFD,sCAkFC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@crawlee/browser-pool",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.4-beta.1",
|
|
4
4
|
"description": "Rotate multiple browsers using popular automation libraries such as Playwright or Puppeteer.",
|
|
5
5
|
"engines": {
|
|
6
6
|
"node": ">=16.0.0"
|
|
@@ -38,9 +38,9 @@
|
|
|
38
38
|
"dependencies": {
|
|
39
39
|
"@apify/log": "^2.0.0",
|
|
40
40
|
"@apify/timeout": "^0.3.0",
|
|
41
|
-
"@crawlee/types": "^3.0.
|
|
42
|
-
"fingerprint-generator": "^2.0.
|
|
43
|
-
"fingerprint-injector": "^2.0.
|
|
41
|
+
"@crawlee/types": "^3.0.4-beta.1",
|
|
42
|
+
"fingerprint-generator": "^2.0.5",
|
|
43
|
+
"fingerprint-injector": "^2.0.4",
|
|
44
44
|
"lodash.merge": "^4.6.2",
|
|
45
45
|
"nanoid": "^3.3.4",
|
|
46
46
|
"ow": "^0.28.1",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load-firefox-addon.d.ts","sourceRoot":"","sources":["../../src/playwright/load-firefox-addon.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,gBAAgB,SAAU,MAAM,QAAQ,MAAM,aAAa,MAAM,qBAoG7E,CAAC"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.loadFirefoxAddon = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const buffer_1 = require("buffer");
|
|
6
|
+
const net_1 = tslib_1.__importDefault(require("net"));
|
|
7
|
+
const loadFirefoxAddon = (port, host, addonPath) => {
|
|
8
|
+
return new Promise((resolve) => {
|
|
9
|
+
const socket = net_1.default.connect({
|
|
10
|
+
port,
|
|
11
|
+
host,
|
|
12
|
+
});
|
|
13
|
+
let success = false;
|
|
14
|
+
socket.once('error', () => { });
|
|
15
|
+
socket.once('close', () => {
|
|
16
|
+
resolve(success);
|
|
17
|
+
});
|
|
18
|
+
const send = (data) => {
|
|
19
|
+
const raw = buffer_1.Buffer.from(JSON.stringify(data));
|
|
20
|
+
socket.write(`${raw.length}`);
|
|
21
|
+
socket.write(':');
|
|
22
|
+
socket.write(raw);
|
|
23
|
+
};
|
|
24
|
+
send({
|
|
25
|
+
to: 'root',
|
|
26
|
+
type: 'getRoot',
|
|
27
|
+
});
|
|
28
|
+
const onMessage = (message) => {
|
|
29
|
+
if (message.addonsActor) {
|
|
30
|
+
send({
|
|
31
|
+
to: message.addonsActor,
|
|
32
|
+
type: 'installTemporaryAddon',
|
|
33
|
+
addonPath,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
if (message.addon) {
|
|
37
|
+
success = true;
|
|
38
|
+
socket.end();
|
|
39
|
+
}
|
|
40
|
+
if (message.error) {
|
|
41
|
+
socket.end();
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
const buffers = [];
|
|
45
|
+
let remainingBytes = 0;
|
|
46
|
+
socket.on('data', (data) => {
|
|
47
|
+
while (true) {
|
|
48
|
+
if (remainingBytes === 0) {
|
|
49
|
+
const index = data.indexOf(':');
|
|
50
|
+
buffers.push(data);
|
|
51
|
+
if (index === -1) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
const buffer = buffer_1.Buffer.concat(buffers);
|
|
55
|
+
const bufferIndex = buffer.indexOf(':');
|
|
56
|
+
buffers.length = 0;
|
|
57
|
+
remainingBytes = Number(buffer.subarray(0, bufferIndex).toString());
|
|
58
|
+
if (!Number.isFinite(remainingBytes)) {
|
|
59
|
+
throw new Error('Invalid state');
|
|
60
|
+
}
|
|
61
|
+
data = buffer.subarray(bufferIndex + 1);
|
|
62
|
+
}
|
|
63
|
+
if (data.length < remainingBytes) {
|
|
64
|
+
remainingBytes -= data.length;
|
|
65
|
+
buffers.push(data);
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
buffers.push(data.subarray(0, remainingBytes));
|
|
69
|
+
const buffer = buffer_1.Buffer.concat(buffers);
|
|
70
|
+
buffers.length = 0;
|
|
71
|
+
const json = JSON.parse(buffer.toString());
|
|
72
|
+
queueMicrotask(() => {
|
|
73
|
+
onMessage(json);
|
|
74
|
+
});
|
|
75
|
+
const remainder = data.subarray(remainingBytes);
|
|
76
|
+
remainingBytes = 0;
|
|
77
|
+
if (remainder.length === 0) {
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
data = remainder;
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
};
|
|
85
|
+
exports.loadFirefoxAddon = loadFirefoxAddon;
|
|
86
|
+
//# sourceMappingURL=load-firefox-addon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load-firefox-addon.js","sourceRoot":"","sources":["../../src/playwright/load-firefox-addon.ts"],"names":[],"mappings":";;;;AAAA,mCAAgC;AAChC,sDAAsB;AAEf,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAE,IAAY,EAAE,SAAiB,EAAE,EAAE;IAC9E,OAAO,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,EAAE;QACpC,MAAM,MAAM,GAAG,aAAG,CAAC,OAAO,CAAC;YACvB,IAAI;YACJ,IAAI;SACP,CAAC,CAAC;QAEH,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;YACtB,OAAO,CAAC,OAAO,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,CAAC,IAA4B,EAAE,EAAE;YAC1C,MAAM,GAAG,GAAG,eAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;YAE9C,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;YAC9B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAClB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC,CAAC;QAEF,IAAI,CAAC;YACD,EAAE,EAAE,MAAM;YACV,IAAI,EAAE,SAAS;SAClB,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,CAAC,OAAY,EAAE,EAAE;YAC/B,IAAI,OAAO,CAAC,WAAW,EAAE;gBACrB,IAAI,CAAC;oBACD,EAAE,EAAE,OAAO,CAAC,WAAW;oBACvB,IAAI,EAAE,uBAAuB;oBAC7B,SAAS;iBACZ,CAAC,CAAC;aACN;YAED,IAAI,OAAO,CAAC,KAAK,EAAE;gBACf,OAAO,GAAG,IAAI,CAAC;gBACf,MAAM,CAAC,GAAG,EAAE,CAAC;aAChB;YAED,IAAI,OAAO,CAAC,KAAK,EAAE;gBACf,MAAM,CAAC,GAAG,EAAE,CAAC;aAChB;QACL,CAAC,CAAC;QAEF,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,IAAI,cAAc,GAAG,CAAC,CAAC;QAEvB,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACvB,OAAO,IAAI,EAAE;gBACT,IAAI,cAAc,KAAK,CAAC,EAAE;oBACtB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;oBAEhC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAEnB,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;wBACd,OAAO;qBACV;oBAED,MAAM,MAAM,GAAG,eAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;oBACtC,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;oBAExC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;oBACnB,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;oBAEpE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE;wBAClC,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;qBACpC;oBAED,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;iBAC3C;gBAED,IAAI,IAAI,CAAC,MAAM,GAAG,cAAc,EAAE;oBAC9B,cAAc,IAAI,IAAI,CAAC,MAAM,CAAC;oBAC9B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACnB,MAAM;iBACT;gBAED,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC;gBAE/C,MAAM,MAAM,GAAG,eAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBACtC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;gBAEnB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAC3C,cAAc,CAAC,GAAG,EAAE;oBAChB,SAAS,CAAC,IAAI,CAAC,CAAC;gBACpB,CAAC,CAAC,CAAC;gBAEH,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;gBAChD,cAAc,GAAG,CAAC,CAAC;gBAEnB,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;oBACxB,MAAM;iBACT;gBAED,IAAI,GAAG,SAAS,CAAC;aACpB;QACL,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AApGW,QAAA,gBAAgB,oBAoG3B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"playwright-controller.d.ts","sourceRoot":"","sources":["../../src/playwright/playwright-controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAE7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAO3E,qBAAa,oBAAqB,SAAQ,iBAAiB,CAAC,WAAW,EAAE,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;IACnH,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,WAAW,EAAE,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;cAmB9E,QAAQ,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"playwright-controller.d.ts","sourceRoot":"","sources":["../../src/playwright/playwright-controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAE7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAO3E,qBAAa,oBAAqB,SAAQ,iBAAiB,CAAC,WAAW,EAAE,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;IACnH,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,WAAW,EAAE,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;cAmB9E,QAAQ,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;cAqF3E,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;cAIvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;cAKtB,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;cAwB1C,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAoB5E"}
|
|
@@ -55,23 +55,28 @@ class PlaywrightController extends browser_controller_1.BrowserController {
|
|
|
55
55
|
url.password = contextOptions.proxy.password ?? '';
|
|
56
56
|
this.browserPlugin._containerProxyServer.ipToProxy.set(proxyip, url.href);
|
|
57
57
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
58
|
+
if (this.browserPlugin.library.name() === 'firefox') {
|
|
59
|
+
// Playwright does not support creating new CDP sessions with Firefox
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
const session = await page.context().newCDPSession(page);
|
|
63
|
+
await session.send('Network.enable');
|
|
64
|
+
session.on('Network.responseReceived', (responseRecevied) => {
|
|
65
|
+
const logOnly = ['Document', 'XHR', 'Fetch', 'EventSource', 'WebSocket', 'Other'];
|
|
66
|
+
if (!logOnly.includes(responseRecevied.type)) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
const { response } = responseRecevied;
|
|
70
|
+
if (response.fromDiskCache || response.fromPrefetchCache || response.fromServiceWorker) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
const { remoteIPAddress } = response;
|
|
74
|
+
if (remoteIPAddress && remoteIPAddress !== proxyip) {
|
|
75
|
+
// eslint-disable-next-line no-console
|
|
76
|
+
console.warn(`Request to ${response.url} was through ${remoteIPAddress} instead of ${proxyip}`);
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
}
|
|
75
80
|
tabIds.set(page, tabid);
|
|
76
81
|
}
|
|
77
82
|
(0, timeout_1.tryCancel)();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"playwright-controller.js","sourceRoot":"","sources":["../../src/playwright/playwright-controller.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"playwright-controller.js","sourceRoot":"","sources":["../../src/playwright/playwright-controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"playwright-plugin.d.ts","sourceRoot":"","sources":["../../src/playwright/playwright-plugin.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"playwright-plugin.d.ts","sourceRoot":"","sources":["../../src/playwright/playwright-plugin.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,IAAI,iBAAiB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG5E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAIvD,OAAO,EAAE,8BAA8B,EAAE,MAAM,2BAA2B,CAAC;AAgB3E,qBAAa,gBAAiB,SAAQ,aAAa,CAAC,WAAW,EAAE,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,iBAAiB,CAAC;IACrH,OAAO,CAAC,eAAe,CAAC,CAAS;IACjC,qBAAqB,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,8BAA8B,CAAC,CAAC,CAAC;cAEnE,OAAO,CAAC,aAAa,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA4I9F,SAAS,CAAC,iBAAiB,IAAI,iBAAiB,CAAC,WAAW,EAAE,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,iBAAiB,CAAC;cAItG,wBAAwB,CAAC,aAAa,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBlG,SAAS,CAAC,uBAAuB,IAAI,OAAO;CAI/C"}
|
|
@@ -2,6 +2,9 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.PlaywrightPlugin = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
|
+
const os_1 = tslib_1.__importDefault(require("os"));
|
|
6
|
+
const fs_1 = tslib_1.__importDefault(require("fs"));
|
|
7
|
+
const net_1 = tslib_1.__importDefault(require("net"));
|
|
5
8
|
const path_1 = tslib_1.__importDefault(require("path"));
|
|
6
9
|
const playwright_browser_1 = require("./playwright-browser");
|
|
7
10
|
const playwright_controller_1 = require("./playwright-controller");
|
|
@@ -10,6 +13,15 @@ const logger_1 = require("../logger");
|
|
|
10
13
|
const proxy_server_1 = require("../proxy-server");
|
|
11
14
|
const anonymize_proxy_1 = require("../anonymize-proxy");
|
|
12
15
|
const container_proxy_server_1 = require("../container-proxy-server");
|
|
16
|
+
const load_firefox_addon_1 = require("./load-firefox-addon");
|
|
17
|
+
const getFreePort = async () => {
|
|
18
|
+
return new Promise((resolve, reject) => {
|
|
19
|
+
const server = net_1.default.createServer().once('error', reject).listen(() => {
|
|
20
|
+
resolve(server.address().port);
|
|
21
|
+
server.close();
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
};
|
|
13
25
|
// __dirname = browser-pool/dist/playwright
|
|
14
26
|
// taacPath = browser-pool/dist/tab-as-a-container
|
|
15
27
|
const taacPath = path_1.default.join(__dirname, '..', 'tab-as-a-container');
|
|
@@ -30,7 +42,8 @@ class PlaywrightPlugin extends browser_plugin_1.BrowserPlugin {
|
|
|
30
42
|
});
|
|
31
43
|
}
|
|
32
44
|
async _launch(launchContext) {
|
|
33
|
-
const { launchOptions, useIncognitoPages,
|
|
45
|
+
const { launchOptions, useIncognitoPages, proxyUrl, } = launchContext;
|
|
46
|
+
let { userDataDir, } = launchContext;
|
|
34
47
|
let browser;
|
|
35
48
|
// Required for the `proxy` context option to work.
|
|
36
49
|
launchOptions.proxy = {
|
|
@@ -54,26 +67,58 @@ class PlaywrightPlugin extends browser_plugin_1.BrowserPlugin {
|
|
|
54
67
|
}
|
|
55
68
|
}
|
|
56
69
|
else {
|
|
57
|
-
|
|
70
|
+
const experimentalContainers = launchContext.experimentalContainers && this.library.name() !== 'webkit';
|
|
71
|
+
let firefoxPort;
|
|
72
|
+
if (experimentalContainers) {
|
|
58
73
|
launchOptions.args = [
|
|
59
74
|
...(launchOptions.args ?? []),
|
|
60
75
|
];
|
|
61
76
|
// Use native headless mode so we can load an extension
|
|
62
|
-
if (launchOptions.headless) {
|
|
77
|
+
if (launchOptions.headless && this.library.name() === 'chromium') {
|
|
63
78
|
launchOptions.args.push('--headless=chrome');
|
|
64
79
|
}
|
|
65
|
-
|
|
80
|
+
if (this.library.name() === 'chromium') {
|
|
81
|
+
launchOptions.args.push(`--disable-extensions-except=${taacPath}`, `--load-extension=${taacPath}`);
|
|
82
|
+
}
|
|
83
|
+
else if (this.library.name() === 'firefox') {
|
|
84
|
+
firefoxPort = await getFreePort();
|
|
85
|
+
launchOptions.args.push(`--start-debugger-server=${firefoxPort}`);
|
|
86
|
+
const prefs = {
|
|
87
|
+
'devtools.debugger.remote-enabled': true,
|
|
88
|
+
'devtools.debugger.prompt-connection': false,
|
|
89
|
+
};
|
|
90
|
+
const prefsRaw = Object.entries(prefs)
|
|
91
|
+
.map(([name, value]) => `user_pref(${JSON.stringify(name)}, ${JSON.stringify(value)});`)
|
|
92
|
+
.join('\n');
|
|
93
|
+
if (userDataDir === '') {
|
|
94
|
+
userDataDir = fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'apify-playwright-firefox-taac-'));
|
|
95
|
+
}
|
|
96
|
+
fs_1.default.writeFileSync(path_1.default.join(userDataDir, 'user.js'), prefsRaw);
|
|
97
|
+
}
|
|
66
98
|
}
|
|
67
99
|
const browserContext = await this.library.launchPersistentContext(userDataDir, launchOptions);
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
100
|
+
browserContext.once('close', () => {
|
|
101
|
+
if (userDataDir.includes('apify-playwright-firefox-taac-')) {
|
|
102
|
+
fs_1.default.rmSync(userDataDir, {
|
|
103
|
+
recursive: true,
|
|
104
|
+
force: true,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
if (experimentalContainers) {
|
|
109
|
+
if (this.library.name() === 'firefox') {
|
|
110
|
+
const loaded = await (0, load_firefox_addon_1.loadFirefoxAddon)(firefoxPort, '127.0.0.1', taacPath);
|
|
111
|
+
if (!loaded) {
|
|
112
|
+
await browserContext.close();
|
|
113
|
+
throw new Error('Failed to load Firefox experimental containers addon');
|
|
114
|
+
}
|
|
73
115
|
}
|
|
116
|
+
// Wait for the extension to load.
|
|
117
|
+
const checker = await browserContext.newPage();
|
|
118
|
+
await checker.goto('data:text/plain,tabid');
|
|
119
|
+
await checker.waitForNavigation();
|
|
120
|
+
await checker.close();
|
|
74
121
|
this._containerProxyServer = await (0, container_proxy_server_1.createProxyServerForContainers)();
|
|
75
|
-
// @ts-expect-error loading is defined inside background script
|
|
76
|
-
await backgroundPage.evaluate(() => loading);
|
|
77
122
|
const page = await browserContext.newPage();
|
|
78
123
|
await page.goto(`data:text/plain,proxy#{"port":${this._containerProxyServer.port}}`);
|
|
79
124
|
await page.waitForNavigation();
|