@crawlee/browser-pool 3.10.6-beta.2 → 3.10.6-beta.20
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 +0 -11
- package/anonymize-proxy.d.ts.map +1 -1
- package/container-proxy-server.js +1 -2
- package/container-proxy-server.js.map +1 -1
- package/fingerprinting/hooks.d.ts.map +1 -1
- package/fingerprinting/hooks.js +3 -4
- package/fingerprinting/hooks.js.map +1 -1
- package/package.json +4 -4
- package/playwright/playwright-browser.d.ts +0 -2
- package/playwright/playwright-browser.d.ts.map +1 -1
- package/proxy-server.js +1 -2
- package/proxy-server.js.map +1 -1
- package/tsconfig.build.tsbuildinfo +1 -1
- package/utils.js +1 -2
- package/utils.js.map +1 -1
package/README.md
CHANGED
|
@@ -16,17 +16,6 @@
|
|
|
16
16
|
<a href="https://github.com/apify/crawlee/actions/workflows/test-ci.yml"><img src="https://github.com/apify/crawlee/actions/workflows/test-ci.yml/badge.svg?branch=master" alt="Build Status" style="max-width: 100%;"></a>
|
|
17
17
|
</p>
|
|
18
18
|
|
|
19
|
-
<h1 align="center">
|
|
20
|
-
<a href="https://apify.com/resources/scraping-with-crawlee">
|
|
21
|
-
<picture>
|
|
22
|
-
<source media="(prefers-color-scheme: dark)" srcset="https://cdn-cms.apify.com/Scraping_with_Crawlee_101_de11e9de45.png">
|
|
23
|
-
<img alt="Crawlee" src="https://cdn-cms.apify.com/Scraping_with_Crawlee_101_de11e9de45.png" width="500">
|
|
24
|
-
</picture>
|
|
25
|
-
</a>
|
|
26
|
-
<br>
|
|
27
|
-
<small>Join us for a free webinar about Crawlee at <a href="https://apify.com/resources/scraping-with-crawlee"> 9 AM EST on June 12th, 2024</a> to learn how to build reliable web scrapers fast!</small>
|
|
28
|
-
</h1>
|
|
29
|
-
|
|
30
19
|
Crawlee covers your crawling and scraping end-to-end and **helps you build reliable scrapers. Fast.**
|
|
31
20
|
|
|
32
21
|
Your crawlers will appear human-like and fly under the radar of modern bot protections even with the default configuration. Crawlee gives you the tools to crawl the web for links, scrape data, and store it to disk or cloud while staying configurable to suit your project's needs.
|
package/anonymize-proxy.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anonymize-proxy.d.ts","sourceRoot":"","sources":["../src/anonymize-proxy.ts"],"names":[],"mappings":"AAEA,KAAK,WAAW,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;AAEvC,eAAO,MAAM,mBAAmB,cACjB,MAAM,aACN,MAAM,aACN,MAAM,KAClB,
|
|
1
|
+
{"version":3,"file":"anonymize-proxy.d.ts","sourceRoot":"","sources":["../src/anonymize-proxy.ts"],"names":[],"mappings":"AAEA,KAAK,WAAW,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;AAEvC,eAAO,MAAM,mBAAmB,cACjB,MAAM,aACN,MAAM,aACN,MAAM,KAClB,OAAO,CAAC,CAAC,MAAM,GAAG,SAAS,EAAE,WAAW,CAAC,CAwB3C,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createProxyServerForContainers =
|
|
3
|
+
exports.createProxyServerForContainers = createProxyServerForContainers;
|
|
4
4
|
const proxy_chain_1 = require("proxy-chain");
|
|
5
5
|
/**
|
|
6
6
|
* Creates a proxy server designed to handle requests from "container" instances.
|
|
@@ -44,5 +44,4 @@ async function createProxyServerForContainers(fallbackProxyUrl) {
|
|
|
44
44
|
},
|
|
45
45
|
};
|
|
46
46
|
}
|
|
47
|
-
exports.createProxyServerForContainers = createProxyServerForContainers;
|
|
48
47
|
//# sourceMappingURL=container-proxy-server.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container-proxy-server.js","sourceRoot":"","sources":["../src/container-proxy-server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"container-proxy-server.js","sourceRoot":"","sources":["../src/container-proxy-server.ts"],"names":[],"mappings":";;AAQA,wEA2CC;AAnDD,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,CAAC;gBACjC,IAAI,gBAAgB,EAAE,CAAC;oBACnB,OAAO;wBACH,gBAAgB,EAAE,gBAAgB;wBAClC,qBAAqB,EAAE,KAAK;qBAC/B,CAAC;gBACN,CAAC;gBAED,sCAAsC;gBACtC,OAAO,CAAC,IAAI,CAAC,yBAAyB,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YAClF,CAAC;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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/fingerprinting/hooks.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAGhE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AACtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAIvD;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,WAAW,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,aAO3E,MAAM,iBAAiB,aAAa,UAoCxD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,cAClB,MAAM,qBAAqB,iBAAiB,eAAe,GAAG,KAAG,IAAI,CAYzF;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,mBAAmB,EAAE,mBAAmB,UACzD,GAAG,qBAAqB,iBAAiB,KAAG,
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/fingerprinting/hooks.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAGhE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AACtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAIvD;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,WAAW,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,aAO3E,MAAM,iBAAiB,aAAa,UAoCxD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,cAClB,MAAM,qBAAqB,iBAAiB,eAAe,GAAG,KAAG,IAAI,CAYzF;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,mBAAmB,EAAE,mBAAmB,UACzD,GAAG,qBAAqB,iBAAiB,KAAG,OAAO,CAAC,IAAI,CAAC,CA0BhF"}
|
package/fingerprinting/hooks.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.createFingerprintPreLaunchHook = createFingerprintPreLaunchHook;
|
|
4
|
+
exports.createPrePageCreateHook = createPrePageCreateHook;
|
|
5
|
+
exports.createPostPageCreateHook = createPostPageCreateHook;
|
|
4
6
|
const utils_1 = require("./utils");
|
|
5
7
|
const playwright_plugin_1 = require("../playwright/playwright-plugin");
|
|
6
8
|
const puppeteer_plugin_1 = require("../puppeteer/puppeteer-plugin");
|
|
@@ -38,7 +40,6 @@ function createFingerprintPreLaunchHook(browserPool) {
|
|
|
38
40
|
};
|
|
39
41
|
};
|
|
40
42
|
}
|
|
41
|
-
exports.createFingerprintPreLaunchHook = createFingerprintPreLaunchHook;
|
|
42
43
|
/**
|
|
43
44
|
* @internal
|
|
44
45
|
*/
|
|
@@ -55,7 +56,6 @@ function createPrePageCreateHook() {
|
|
|
55
56
|
}
|
|
56
57
|
};
|
|
57
58
|
}
|
|
58
|
-
exports.createPrePageCreateHook = createPrePageCreateHook;
|
|
59
59
|
/**
|
|
60
60
|
* @internal
|
|
61
61
|
*/
|
|
@@ -84,5 +84,4 @@ function createPostPageCreateHook(fingerprintInjector) {
|
|
|
84
84
|
}
|
|
85
85
|
};
|
|
86
86
|
}
|
|
87
|
-
exports.createPostPageCreateHook = createPostPageCreateHook;
|
|
88
87
|
//# sourceMappingURL=hooks.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/fingerprinting/hooks.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/fingerprinting/hooks.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@crawlee/browser-pool",
|
|
3
|
-
"version": "3.10.6-beta.
|
|
3
|
+
"version": "3.10.6-beta.20",
|
|
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,8 +38,8 @@
|
|
|
38
38
|
"dependencies": {
|
|
39
39
|
"@apify/log": "^2.4.0",
|
|
40
40
|
"@apify/timeout": "^0.3.0",
|
|
41
|
-
"@crawlee/core": "3.10.6-beta.
|
|
42
|
-
"@crawlee/types": "3.10.6-beta.
|
|
41
|
+
"@crawlee/core": "3.10.6-beta.20",
|
|
42
|
+
"@crawlee/types": "3.10.6-beta.20",
|
|
43
43
|
"fingerprint-generator": "^2.0.6",
|
|
44
44
|
"fingerprint-injector": "^2.0.5",
|
|
45
45
|
"lodash.merge": "^4.6.2",
|
|
@@ -70,5 +70,5 @@
|
|
|
70
70
|
}
|
|
71
71
|
}
|
|
72
72
|
},
|
|
73
|
-
"gitHead": "
|
|
73
|
+
"gitHead": "727094022a36c55e97f9444c88050e9e7c05933e"
|
|
74
74
|
}
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
// @ts-ignore optional peer dependency or compatibility with es2022
|
|
2
|
-
/// <reference types="node" />
|
|
3
1
|
import { EventEmitter } from 'node:events';
|
|
4
2
|
// @ts-ignore optional peer dependency or compatibility with es2022
|
|
5
3
|
import type { BrowserContext, BrowserType, Browser } from 'playwright';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"playwright-browser.d.ts","sourceRoot":"","sources":["../../src/playwright/playwright-browser.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"playwright-browser.d.ts","sourceRoot":"","sources":["../../src/playwright/playwright-browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAEvE,MAAM,WAAW,cAAc;IAC3B,cAAc,EAAE,cAAc,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,YAAa,YAAW,OAAO;IAClE,OAAO,CAAC,eAAe,CAAiB;IACxC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,YAAY,CAAC,CAAc;gBAEvB,OAAO,EAAE,cAAc;IAc7B,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC;IAItC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B,QAAQ,IAAI,cAAc,EAAE;IAI5B,WAAW,IAAI,OAAO;IAItB,OAAO,IAAI,MAAM;IAIjB,gBAAgB;IAChB,eAAe,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAI/C,WAAW,IAAI,WAAW;IAIpB,OAAO,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,GAAG,UAAU,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IAI9F,UAAU,IAAI,OAAO,CAAC,KAAK,CAAC;IAI5B,oBAAoB,IAAI,OAAO,CAAC,KAAK,CAAC;IAItC,YAAY,IAAI,OAAO,CAAC,KAAK,CAAC;IAI9B,WAAW,IAAI,OAAO,CAAC,KAAK,CAAC;CAGtC"}
|
package/proxy-server.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getLocalProxyAddress =
|
|
3
|
+
exports.getLocalProxyAddress = getLocalProxyAddress;
|
|
4
4
|
const proxy_chain_1 = require("proxy-chain");
|
|
5
5
|
const server = new proxy_chain_1.Server({
|
|
6
6
|
port: 0,
|
|
@@ -13,5 +13,4 @@ async function getLocalProxyAddress() {
|
|
|
13
13
|
await listenPromise;
|
|
14
14
|
return `http://127.0.0.1:${server.port}`;
|
|
15
15
|
}
|
|
16
|
-
exports.getLocalProxyAddress = getLocalProxyAddress;
|
|
17
16
|
//# sourceMappingURL=proxy-server.js.map
|
package/proxy-server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy-server.js","sourceRoot":"","sources":["../src/proxy-server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"proxy-server.js","sourceRoot":"","sources":["../src/proxy-server.ts"],"names":[],"mappings":";;AAYA,oDAGC;AAfD,6CAAyD;AAEzD,MAAM,MAAM,GAAG,IAAI,oBAAgB,CAAC;IAChC,IAAI,EAAE,CAAC;CACV,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;AAEtB,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AACtC,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;AAE9B,wJAAwJ;AACjJ,KAAK,UAAU,oBAAoB;IACtC,MAAM,aAAa,CAAC;IACpB,OAAO,oBAAoB,MAAM,CAAC,IAAI,EAAE,CAAC;AAC7C,CAAC"}
|