@crawlee/playwright 3.17.1-beta.6 → 3.17.1-beta.60
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/index.mjs +3 -0
- package/internals/adaptive-playwright-crawler.d.ts +9 -2
- package/internals/adaptive-playwright-crawler.js +9 -2
- package/internals/enqueue-links/click-elements.js +1 -1
- package/internals/playwright-crawler.d.ts +4 -3
- package/internals/playwright-crawler.js +2 -26
- package/internals/utils/playwright-utils.js +4 -1
- package/package.json +10 -9
package/index.mjs
CHANGED
|
@@ -54,6 +54,7 @@ export const RequestQueue = mod.RequestQueue;
|
|
|
54
54
|
export const RequestQueueV1 = mod.RequestQueueV1;
|
|
55
55
|
export const RequestQueueV2 = mod.RequestQueueV2;
|
|
56
56
|
export const RequestState = mod.RequestState;
|
|
57
|
+
export const RequestValidationError = mod.RequestValidationError;
|
|
57
58
|
export const RetryRequestError = mod.RetryRequestError;
|
|
58
59
|
export const Router = mod.Router;
|
|
59
60
|
export const STATE_PERSISTENCE_KEY = mod.STATE_PERSISTENCE_KEY;
|
|
@@ -85,6 +86,7 @@ export const createEventLoopLoadSignal = mod.createEventLoopLoadSignal;
|
|
|
85
86
|
export const createPlaywrightRouter = mod.createPlaywrightRouter;
|
|
86
87
|
export const createRequestOptions = mod.createRequestOptions;
|
|
87
88
|
export const createRequests = mod.createRequests;
|
|
89
|
+
export const defaultRoute = mod.defaultRoute;
|
|
88
90
|
export const deserializeArray = mod.deserializeArray;
|
|
89
91
|
export const enqueueLinks = mod.enqueueLinks;
|
|
90
92
|
export const evaluateLoadSignalSample = mod.evaluateLoadSignalSample;
|
|
@@ -109,5 +111,6 @@ export const tryAbsoluteURL = mod.tryAbsoluteURL;
|
|
|
109
111
|
export const updateEnqueueLinksPatternCache = mod.updateEnqueueLinksPatternCache;
|
|
110
112
|
export const useState = mod.useState;
|
|
111
113
|
export const validateGlobPattern = mod.validateGlobPattern;
|
|
114
|
+
export const validateUserData = mod.validateUserData;
|
|
112
115
|
export const validators = mod.validators;
|
|
113
116
|
export const withCheckedStorageAccess = mod.withCheckedStorageAccess;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { BrowserHook, LoadedContext, RouterHandler } from '@crawlee/browser';
|
|
1
|
+
import type { BrowserHook, LoadedContext, RequestHandler, RouterHandler, RouteSchemas, RoutesFromSchemas } from '@crawlee/browser';
|
|
2
2
|
import type { BaseHttpResponseData, EnqueueLinksOptions, GetUserDataFromRequest, RestrictedCrawlingContext, RouterRoutes, StatisticsOptions, StatisticState } from '@crawlee/core';
|
|
3
3
|
import { Configuration, RequestHandlerResult, Statistics } from '@crawlee/core';
|
|
4
4
|
import type { Awaitable, BatchAddRequestsResult, Dictionary } from '@crawlee/types';
|
|
@@ -194,6 +194,11 @@ export declare class AdaptivePlaywrightCrawler extends PlaywrightCrawler {
|
|
|
194
194
|
*/
|
|
195
195
|
// @ts-ignore optional peer dependency or compatibility with es2022
|
|
196
196
|
readonly router: RouterHandler<AdaptivePlaywrightCrawlerContext>;
|
|
197
|
+
/**
|
|
198
|
+
* The `requestHandler` never reaches `BrowserCrawler` here — it is kept as `adaptiveRequestHandler` and
|
|
199
|
+
* invoked through a proxy — so router-aware metadata has to resolve against it.
|
|
200
|
+
*/
|
|
201
|
+
protected get userRequestHandler(): RequestHandler<PlaywrightCrawlingContext>;
|
|
197
202
|
constructor(options?: AdaptivePlaywrightCrawlerOptions, config?: Configuration);
|
|
198
203
|
/**
|
|
199
204
|
* Returns the number of rendering type detections currently in progress.
|
|
@@ -211,5 +216,7 @@ export declare class AdaptivePlaywrightCrawler extends PlaywrightCrawler {
|
|
|
211
216
|
protected enqueueLinks(options: SetRequired<EnqueueLinksOptions, 'urls'>, request: RestrictedCrawlingContext['request'], result: RequestHandlerResult): Promise<BatchAddRequestsResult>;
|
|
212
217
|
private createLogProxy;
|
|
213
218
|
}
|
|
214
|
-
export declare function createAdaptivePlaywrightRouter<Context extends AdaptivePlaywrightCrawlerContext = AdaptivePlaywrightCrawlerContext,
|
|
219
|
+
export declare function createAdaptivePlaywrightRouter<Context extends AdaptivePlaywrightCrawlerContext = AdaptivePlaywrightCrawlerContext, Routes extends Record<keyof Routes, Dictionary> = Record<string, GetUserDataFromRequest<Context['request']>>>(routes?: RouterRoutes<Context, Routes>): RouterHandler<Context, Routes>;
|
|
220
|
+
export declare function createAdaptivePlaywrightRouter<Context extends AdaptivePlaywrightCrawlerContext = AdaptivePlaywrightCrawlerContext, UserData extends Dictionary = GetUserDataFromRequest<Context['request']>>(routes?: RouterRoutes<Context, Record<string, UserData>>): RouterHandler<Context, Record<string, UserData>>;
|
|
221
|
+
export declare function createAdaptivePlaywrightRouter<Context extends AdaptivePlaywrightCrawlerContext = AdaptivePlaywrightCrawlerContext, const Schemas extends RouteSchemas = RouteSchemas>(schemas: Schemas): RouterHandler<Context, RoutesFromSchemas<Schemas>>;
|
|
215
222
|
export {};
|
|
@@ -94,6 +94,13 @@ const proxyLogMethods = [
|
|
|
94
94
|
* @experimental
|
|
95
95
|
*/
|
|
96
96
|
class AdaptivePlaywrightCrawler extends playwright_crawler_1.PlaywrightCrawler {
|
|
97
|
+
/**
|
|
98
|
+
* The `requestHandler` never reaches `BrowserCrawler` here — it is kept as `adaptiveRequestHandler` and
|
|
99
|
+
* invoked through a proxy — so router-aware metadata has to resolve against it.
|
|
100
|
+
*/
|
|
101
|
+
get userRequestHandler() {
|
|
102
|
+
return this.adaptiveRequestHandler;
|
|
103
|
+
}
|
|
97
104
|
constructor(options = {}, config = core_1.Configuration.getGlobalConfig()) {
|
|
98
105
|
const { requestHandler, renderingTypeDetectionRatio = 0.1, renderingTypePredictor, resultChecker, shouldPropagateError, resultComparator, statisticsOptions, preventDirectStorageAccess = true, ...rest } = options;
|
|
99
106
|
super(rest, config);
|
|
@@ -478,6 +485,6 @@ class AdaptivePlaywrightCrawler extends playwright_crawler_1.PlaywrightCrawler {
|
|
|
478
485
|
}
|
|
479
486
|
}
|
|
480
487
|
exports.AdaptivePlaywrightCrawler = AdaptivePlaywrightCrawler;
|
|
481
|
-
function createAdaptivePlaywrightRouter(
|
|
482
|
-
return core_1.Router.create(
|
|
488
|
+
function createAdaptivePlaywrightRouter(routesOrSchemas) {
|
|
489
|
+
return core_1.Router.create(routesOrSchemas);
|
|
483
490
|
}
|
|
@@ -57,7 +57,7 @@ async function enqueueLinksByClickingElements(options) {
|
|
|
57
57
|
requestQueue: ow_1.default.object.hasKeys('fetchNextRequest', 'addRequest'),
|
|
58
58
|
selector: ow_1.default.string,
|
|
59
59
|
userData: ow_1.default.optional.object,
|
|
60
|
-
clickOptions: ow_1.default.optional.object
|
|
60
|
+
clickOptions: ow_1.default.optional.object,
|
|
61
61
|
pseudoUrls: ow_1.default.optional.array.ofType(ow_1.default.any(ow_1.default.string, ow_1.default.object.hasKeys('purl'))),
|
|
62
62
|
globs: ow_1.default.optional.array.ofType(ow_1.default.any(ow_1.default.string, ow_1.default.object.hasKeys('glob'))),
|
|
63
63
|
regexps: ow_1.default.optional.array.ofType(ow_1.default.any(ow_1.default.regExp, ow_1.default.object.hasKeys('regexp'))),
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { BrowserCrawlerOptions, BrowserCrawlingContext, BrowserHook, BrowserRequestHandler, GetUserDataFromRequest, LoadedContext, RouterRoutes } from '@crawlee/browser';
|
|
1
|
+
import type { BrowserCrawlerOptions, BrowserCrawlingContext, BrowserHook, BrowserRequestHandler, GetUserDataFromRequest, LoadedContext, RouterHandler, RouterRoutes, RouteSchemas, RoutesFromSchemas } from '@crawlee/browser';
|
|
2
2
|
import { BrowserCrawler, Configuration } from '@crawlee/browser';
|
|
3
3
|
import type { CommonPage, PlaywrightController, PlaywrightPlugin } from '@crawlee/browser-pool';
|
|
4
4
|
import type { Dictionary } from '@crawlee/types';
|
|
@@ -295,5 +295,6 @@ export declare class PlaywrightCrawler extends BrowserCrawler<{
|
|
|
295
295
|
* await crawler.run();
|
|
296
296
|
* ```
|
|
297
297
|
*/
|
|
298
|
-
|
|
299
|
-
export declare function createPlaywrightRouter<Context extends PlaywrightCrawlingContext = PlaywrightCrawlingContext, UserData extends Dictionary = GetUserDataFromRequest<Context['request']>>(routes?: RouterRoutes<Context, UserData
|
|
298
|
+
export declare function createPlaywrightRouter<Context extends PlaywrightCrawlingContext = PlaywrightCrawlingContext, Routes extends Record<keyof Routes, Dictionary> = Record<string, GetUserDataFromRequest<Context['request']>>>(routes?: RouterRoutes<Context, Routes>): RouterHandler<Context, Routes>;
|
|
299
|
+
export declare function createPlaywrightRouter<Context extends PlaywrightCrawlingContext = PlaywrightCrawlingContext, UserData extends Dictionary = GetUserDataFromRequest<Context['request']>>(routes?: RouterRoutes<Context, Record<string, UserData>>): RouterHandler<Context, Record<string, UserData>>;
|
|
300
|
+
export declare function createPlaywrightRouter<Context extends PlaywrightCrawlingContext = PlaywrightCrawlingContext, const Schemas extends RouteSchemas = RouteSchemas>(schemas: Schemas): RouterHandler<Context, RoutesFromSchemas<Schemas>>;
|
|
@@ -134,30 +134,6 @@ Object.defineProperty(PlaywrightCrawler, "optionsShape", {
|
|
|
134
134
|
launcher: ow_1.default.optional.object,
|
|
135
135
|
}
|
|
136
136
|
});
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
* This instance can then serve as a `requestHandler` of your {@link PlaywrightCrawler}.
|
|
140
|
-
* Defaults to the {@link PlaywrightCrawlingContext}.
|
|
141
|
-
*
|
|
142
|
-
* > Serves as a shortcut for using `Router.create<PlaywrightCrawlingContext>()`.
|
|
143
|
-
*
|
|
144
|
-
* ```ts
|
|
145
|
-
* import { PlaywrightCrawler, createPlaywrightRouter } from 'crawlee';
|
|
146
|
-
*
|
|
147
|
-
* const router = createPlaywrightRouter();
|
|
148
|
-
* router.addHandler('label-a', async (ctx) => {
|
|
149
|
-
* ctx.log.info('...');
|
|
150
|
-
* });
|
|
151
|
-
* router.addDefaultHandler(async (ctx) => {
|
|
152
|
-
* ctx.log.info('...');
|
|
153
|
-
* });
|
|
154
|
-
*
|
|
155
|
-
* const crawler = new PlaywrightCrawler({
|
|
156
|
-
* requestHandler: router,
|
|
157
|
-
* });
|
|
158
|
-
* await crawler.run();
|
|
159
|
-
* ```
|
|
160
|
-
*/
|
|
161
|
-
function createPlaywrightRouter(routes) {
|
|
162
|
-
return browser_1.Router.create(routes);
|
|
137
|
+
function createPlaywrightRouter(routesOrSchemas) {
|
|
138
|
+
return browser_1.Router.create(routesOrSchemas);
|
|
163
139
|
}
|
|
@@ -133,7 +133,7 @@ async function gotoExtended(page, request, gotoOptions = {}) {
|
|
|
133
133
|
(0, ow_1.default)(gotoOptions, ow_1.default.object);
|
|
134
134
|
const { url, method, headers, payload } = request;
|
|
135
135
|
const isEmpty = (o) => !o || Object.keys(o).length === 0;
|
|
136
|
-
if (method !== 'GET' || payload
|
|
136
|
+
if (method !== 'GET' || payload) {
|
|
137
137
|
// This is not deprecated, we use it to log only once.
|
|
138
138
|
log.deprecated('Using other request methods than GET, rewriting headers and adding payloads has a high impact on performance ' +
|
|
139
139
|
'in recent versions of Playwright. Use only when necessary.');
|
|
@@ -162,6 +162,9 @@ async function gotoExtended(page, request, gotoOptions = {}) {
|
|
|
162
162
|
};
|
|
163
163
|
await page.route('**/*', interceptRequestHandler);
|
|
164
164
|
}
|
|
165
|
+
else if (!isEmpty(headers)) {
|
|
166
|
+
await page.setExtraHTTPHeaders(headers);
|
|
167
|
+
}
|
|
165
168
|
return page.goto(url, gotoOptions);
|
|
166
169
|
}
|
|
167
170
|
/**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@crawlee/playwright",
|
|
3
|
-
"version": "3.17.1-beta.
|
|
3
|
+
"version": "3.17.1-beta.60",
|
|
4
4
|
"description": "The scalable web crawling and scraping library for JavaScript/Node.js. Enables development of data extraction and web automation jobs (not only) with headless Chrome and Puppeteer.",
|
|
5
5
|
"engines": {
|
|
6
6
|
"node": ">=16.0.0"
|
|
@@ -55,12 +55,12 @@
|
|
|
55
55
|
"dependencies": {
|
|
56
56
|
"@apify/datastructures": "^2.0.0",
|
|
57
57
|
"@apify/log": "^2.4.0",
|
|
58
|
-
"@apify/timeout": "^0.
|
|
59
|
-
"@crawlee/browser": "3.17.1-beta.
|
|
60
|
-
"@crawlee/browser-pool": "3.17.1-beta.
|
|
61
|
-
"@crawlee/core": "3.17.1-beta.
|
|
62
|
-
"@crawlee/types": "3.17.1-beta.
|
|
63
|
-
"@crawlee/utils": "3.17.1-beta.
|
|
58
|
+
"@apify/timeout": "^0.4.0",
|
|
59
|
+
"@crawlee/browser": "3.17.1-beta.60",
|
|
60
|
+
"@crawlee/browser-pool": "3.17.1-beta.60",
|
|
61
|
+
"@crawlee/core": "3.17.1-beta.60",
|
|
62
|
+
"@crawlee/types": "3.17.1-beta.60",
|
|
63
|
+
"@crawlee/utils": "3.17.1-beta.60",
|
|
64
64
|
"cheerio": "1.0.0-rc.12",
|
|
65
65
|
"jquery": "^3.6.0",
|
|
66
66
|
"lodash.isequal": "^4.5.0",
|
|
@@ -68,7 +68,8 @@
|
|
|
68
68
|
"ml-matrix": "^6.11.0",
|
|
69
69
|
"ow": "^0.28.1",
|
|
70
70
|
"string-comparison": "^1.3.0",
|
|
71
|
-
"tslib": "^2.4.0"
|
|
71
|
+
"tslib": "^2.4.0",
|
|
72
|
+
"type-fest": "^4.0.0"
|
|
72
73
|
},
|
|
73
74
|
"peerDependencies": {
|
|
74
75
|
"idcac-playwright": "^0.2.0",
|
|
@@ -89,5 +90,5 @@
|
|
|
89
90
|
}
|
|
90
91
|
}
|
|
91
92
|
},
|
|
92
|
-
"gitHead": "
|
|
93
|
+
"gitHead": "5ba2517b5f3bc6ef868b860c6c783a3e7e7d4a93"
|
|
93
94
|
}
|