@crawlee/playwright 4.0.0-beta.3 → 4.0.0-beta.30

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.
@@ -1,8 +1,9 @@
1
+ import { isDeepStrictEqual } from 'node:util';
2
+ import { BasicCrawler } from '@crawlee/basic';
1
3
  import { extractUrlsFromPage } from '@crawlee/browser';
2
- import { Configuration, RequestHandlerResult, Router, Statistics, withCheckedStorageAccess } from '@crawlee/core';
4
+ import { CheerioCrawler } from '@crawlee/cheerio';
5
+ import { RequestHandlerError, RequestHandlerResult, resolveBaseUrlForEnqueueLinksFiltering, Router, serviceLocator, Statistics, withCheckedStorageAccess, } from '@crawlee/core';
3
6
  import { extractUrlsFromCheerio } from '@crawlee/utils';
4
- import { load } from 'cheerio';
5
- import isEqual from 'lodash.isequal';
6
7
  import { addTimeoutToPromise } from '@apify/timeout';
7
8
  import { PlaywrightCrawler } from './playwright-crawler.js';
8
9
  import { RenderingTypePredictor } from './utils/rendering-type-prediction.js';
@@ -80,24 +81,30 @@ const proxyLogMethods = [
80
81
  *
81
82
  * @experimental
82
83
  */
83
- export class AdaptivePlaywrightCrawler extends PlaywrightCrawler {
84
- config;
85
- adaptiveRequestHandler;
84
+ export class AdaptivePlaywrightCrawler extends BasicCrawler {
86
85
  renderingTypePredictor;
87
86
  resultChecker;
88
87
  resultComparator;
89
88
  preventDirectStorageAccess;
90
- /**
91
- * Default {@link Router} instance that will be used if we don't specify any {@link AdaptivePlaywrightCrawlerOptions.requestHandler|`requestHandler`}.
92
- * See {@link Router.addHandler|`router.addHandler()`} and {@link Router.addDefaultHandler|`router.addDefaultHandler()`}.
93
- */
94
- // @ts-ignore
95
- router = Router.create();
96
- constructor(options = {}, config = Configuration.getGlobalConfig()) {
97
- const { requestHandler, renderingTypeDetectionRatio = 0.1, renderingTypePredictor, resultChecker, resultComparator, statisticsOptions, preventDirectStorageAccess = true, ...rest } = options;
98
- super(rest, config);
99
- this.config = config;
100
- this.adaptiveRequestHandler = requestHandler ?? this.router;
89
+ staticContextPipeline;
90
+ browserContextPipeline;
91
+ individualRequestHandlerTimeoutMillis;
92
+ resultObjects = new WeakMap();
93
+ teardownHooks = [];
94
+ constructor(options = {}) {
95
+ const { requestHandler, renderingTypeDetectionRatio = 0.1, renderingTypePredictor, resultChecker, resultComparator, statisticsOptions, preventDirectStorageAccess = true, requestHandlerTimeoutSecs = 60, errorHandler, failedRequestHandler, preNavigationHooks, postNavigationHooks, extendContext, contextPipelineBuilder, ...rest } = options;
96
+ super({
97
+ ...rest,
98
+ // Pass error handlers to the "main" crawler - we only pluck them from `rest` so that they don't go to the sub crawlers
99
+ errorHandler,
100
+ failedRequestHandler,
101
+ // Same for request handler
102
+ requestHandler,
103
+ // The builder intentionally returns null so that it crashes the crawler when it tries to use this instead of one of two the specialized context pipelines
104
+ // (that would be a logical error in this class)
105
+ contextPipelineBuilder: () => null,
106
+ });
107
+ this.individualRequestHandlerTimeoutMillis = requestHandlerTimeoutSecs * 1000;
101
108
  this.renderingTypePredictor =
102
109
  renderingTypePredictor ?? new RenderingTypePredictor({ detectionRatio: renderingTypeDetectionRatio });
103
110
  this.resultChecker = resultChecker ?? (() => true);
@@ -112,18 +119,175 @@ export class AdaptivePlaywrightCrawler extends PlaywrightCrawler {
112
119
  return (resultA.datasetItems.length === resultB.datasetItems.length &&
113
120
  resultA.datasetItems.every((itemA, i) => {
114
121
  const itemB = resultB.datasetItems[i];
115
- return isEqual(itemA, itemB);
122
+ return isDeepStrictEqual(itemA, itemB);
116
123
  }));
117
124
  };
118
125
  }
126
+ const staticCrawler = new CheerioCrawler({
127
+ ...rest,
128
+ useSessionPool: false,
129
+ statisticsOptions: {
130
+ persistenceOptions: { enable: false },
131
+ },
132
+ preNavigationHooks: [
133
+ async (context) => {
134
+ for (const hook of preNavigationHooks ?? []) {
135
+ await hook(context, undefined);
136
+ }
137
+ },
138
+ ],
139
+ postNavigationHooks: [
140
+ async (context) => {
141
+ for (const hook of postNavigationHooks ?? []) {
142
+ await hook(context, undefined);
143
+ }
144
+ },
145
+ ],
146
+ });
147
+ const browserCrawler = new PlaywrightCrawler({
148
+ ...rest,
149
+ useSessionPool: false,
150
+ statisticsOptions: {
151
+ persistenceOptions: { enable: false },
152
+ },
153
+ preNavigationHooks: [
154
+ async (context, gotoOptions) => {
155
+ for (const hook of preNavigationHooks ?? []) {
156
+ await hook(context, gotoOptions);
157
+ }
158
+ },
159
+ ],
160
+ postNavigationHooks: [
161
+ async (context, gotoOptions) => {
162
+ for (const hook of postNavigationHooks ?? []) {
163
+ await hook(context, gotoOptions);
164
+ }
165
+ },
166
+ ],
167
+ });
168
+ this.teardownHooks.push(browserCrawler.teardown.bind(browserCrawler));
169
+ this.staticContextPipeline = staticCrawler.contextPipeline
170
+ .compose({
171
+ action: this.adaptCheerioContext.bind(this),
172
+ })
173
+ .compose({
174
+ action: async (context) => extendContext ? await extendContext(context) : context,
175
+ });
176
+ this.browserContextPipeline = browserCrawler.contextPipeline
177
+ .compose({
178
+ action: this.adaptPlaywrightContext.bind(this),
179
+ })
180
+ .compose({
181
+ action: async (context) => extendContext ? await extendContext(context) : context,
182
+ });
119
183
  this.stats = new AdaptivePlaywrightCrawlerStatistics({
120
184
  logMessage: `${this.log.getOptions().prefix} request statistics:`,
121
- config,
122
185
  ...statisticsOptions,
123
186
  });
124
187
  this.preventDirectStorageAccess = preventDirectStorageAccess;
125
188
  }
126
- async _runRequestHandler(crawlingContext) {
189
+ async _init() {
190
+ await this.renderingTypePredictor.initialize();
191
+ return await super._init();
192
+ }
193
+ async adaptCheerioContext(cheerioContext) {
194
+ // Capture the original response to avoid infinite recursion when the getter is copied to the context
195
+ const result = this.resultObjects.get(cheerioContext);
196
+ if (result === undefined) {
197
+ throw new Error('Logical error - `this.resultObjects` does not contain the result object');
198
+ }
199
+ return {
200
+ get page() {
201
+ throw new Error('Page object was used in HTTP-only request handler');
202
+ },
203
+ async querySelector(selector) {
204
+ return cheerioContext.$(selector);
205
+ },
206
+ enqueueLinks: async (options = {}) => {
207
+ const urls = options.urls ??
208
+ extractUrlsFromCheerio(cheerioContext.$, options.selector, options.baseUrl ?? cheerioContext.request.loadedUrl);
209
+ return (await this.enqueueLinks({ ...options, urls }, cheerioContext.request, result));
210
+ },
211
+ response: cheerioContext.response,
212
+ };
213
+ }
214
+ async adaptPlaywrightContext(playwrightContext) {
215
+ const originalResponse = playwrightContext.response;
216
+ const result = this.resultObjects.get(playwrightContext);
217
+ if (result === undefined) {
218
+ throw new Error('Logical error - `this.resultObjects` does not contain the result object');
219
+ }
220
+ return {
221
+ response: new Response(Uint8Array.from(await originalResponse.body()), {
222
+ headers: originalResponse.headers(),
223
+ status: originalResponse.status(),
224
+ statusText: originalResponse.statusText(),
225
+ }),
226
+ async querySelector(selector, timeoutMs = 5000) {
227
+ const locator = playwrightContext.page.locator(selector).first();
228
+ await locator.waitFor({ timeout: timeoutMs, state: 'attached' });
229
+ const $ = await playwrightContext.parseWithCheerio();
230
+ return $(selector);
231
+ },
232
+ enqueueLinks: async (options = {}, timeoutMs = 5000) => {
233
+ // TODO consider using `context.parseWithCheerio` to make this universal and avoid code duplication
234
+ let urls;
235
+ if (options.urls === undefined) {
236
+ const selector = options.selector ?? 'a';
237
+ const locator = playwrightContext.page.locator(selector).first();
238
+ await locator.waitFor({ timeout: timeoutMs, state: 'attached' });
239
+ urls =
240
+ options.urls ??
241
+ (await extractUrlsFromPage(playwrightContext.page, selector, options.baseUrl ?? playwrightContext.request.loadedUrl));
242
+ }
243
+ else {
244
+ urls = options.urls;
245
+ }
246
+ return (await this.enqueueLinks({ ...options, urls }, playwrightContext.request, result));
247
+ },
248
+ };
249
+ }
250
+ async crawlOne(renderingType, context, useStateFunction) {
251
+ const result = new RequestHandlerResult(serviceLocator.getConfiguration(), AdaptivePlaywrightCrawler.CRAWLEE_STATE_KEY);
252
+ const logs = [];
253
+ const deferredCleanup = [];
254
+ const resultBoundContextHelpers = {
255
+ addRequests: result.addRequests,
256
+ pushData: result.pushData,
257
+ useState: this.allowStorageAccess(useStateFunction),
258
+ getKeyValueStore: this.allowStorageAccess(result.getKeyValueStore),
259
+ enqueueLinks: async (options) => {
260
+ return await this.enqueueLinks(options, context.request, result);
261
+ },
262
+ log: this.createLogProxy(context.log, logs),
263
+ registerDeferredCleanup: (cleanup) => deferredCleanup.push(cleanup),
264
+ };
265
+ const subCrawlerContext = { ...context, ...resultBoundContextHelpers };
266
+ this.resultObjects.set(subCrawlerContext, result);
267
+ try {
268
+ const callAdaptiveRequestHandler = async () => {
269
+ if (renderingType === 'static') {
270
+ await this.staticContextPipeline.call(subCrawlerContext, async (finalContext) => await this.requestHandler(finalContext));
271
+ }
272
+ else if (renderingType === 'clientOnly') {
273
+ await this.browserContextPipeline.call(subCrawlerContext, async (finalContext) => await this.requestHandler(finalContext));
274
+ }
275
+ };
276
+ await addTimeoutToPromise(async () => withCheckedStorageAccess(() => {
277
+ if (this.preventDirectStorageAccess) {
278
+ throw new Error('Directly accessing storage in a request handler is not allowed in AdaptivePlaywrightCrawler');
279
+ }
280
+ }, callAdaptiveRequestHandler), this.individualRequestHandlerTimeoutMillis, 'Request handler timed out');
281
+ return { result, ok: true, logs };
282
+ }
283
+ catch (error) {
284
+ return { error, ok: false, logs };
285
+ }
286
+ finally {
287
+ await Promise.all(deferredCleanup.map((cleanup) => cleanup()));
288
+ }
289
+ }
290
+ async runRequestHandler(crawlingContext) {
127
291
  const renderingTypePrediction = this.renderingTypePredictor.predict(crawlingContext.request);
128
292
  const shouldDetectRenderingType = Math.random() < renderingTypePrediction.detectionProbabilityRecommendation;
129
293
  if (!shouldDetectRenderingType) {
@@ -132,15 +296,19 @@ export class AdaptivePlaywrightCrawler extends PlaywrightCrawler {
132
296
  if (renderingTypePrediction.renderingType === 'static' && !shouldDetectRenderingType) {
133
297
  crawlingContext.log.debug(`Running HTTP-only request handler for ${crawlingContext.request.url}`);
134
298
  this.stats.trackHttpOnlyRequestHandlerRun();
135
- const plainHTTPRun = await this.runRequestHandlerWithPlainHTTP(crawlingContext);
299
+ const plainHTTPRun = await this.crawlOne('static', crawlingContext, crawlingContext.useState);
136
300
  if (plainHTTPRun.ok && this.resultChecker(plainHTTPRun.result)) {
137
301
  crawlingContext.log.debug(`HTTP-only request handler succeeded for ${crawlingContext.request.url}`);
138
302
  plainHTTPRun.logs?.forEach(([log, method, ...args]) => log[method](...args));
139
303
  await this.commitResult(crawlingContext, plainHTTPRun.result);
140
304
  return;
141
305
  }
306
+ // Execution will "fall through" and try running the request handler in a browser
142
307
  if (!plainHTTPRun.ok) {
143
- crawlingContext.log.exception(plainHTTPRun.error, `HTTP-only request handler failed for ${crawlingContext.request.url}`);
308
+ const actualError = plainHTTPRun.error instanceof RequestHandlerError
309
+ ? plainHTTPRun.error.cause
310
+ : plainHTTPRun.error;
311
+ crawlingContext.log.exception(actualError, `HTTP-only request handler failed for ${crawlingContext.request.url}`);
144
312
  }
145
313
  else {
146
314
  crawlingContext.log.warning(`HTTP-only request handler returned a suspicious result for ${crawlingContext.request.url}`);
@@ -153,31 +321,52 @@ export class AdaptivePlaywrightCrawler extends PlaywrightCrawler {
153
321
  // a rendering type detection if necessary. Without this measure, the HTTP request handler would run
154
322
  // under different conditions, which could change its behavior. Changes done to the crawler state by
155
323
  // the HTTP request handler will not be committed to the actual storage.
156
- const { result: browserRun, initialStateCopy } = await this.runRequestHandlerInBrowser(crawlingContext);
324
+ const stateTracker = {
325
+ stateCopy: null,
326
+ async getLiveState(defaultValue = {}) {
327
+ const state = await crawlingContext.useState(defaultValue);
328
+ if (this.stateCopy === null) {
329
+ this.stateCopy = JSON.parse(JSON.stringify(state));
330
+ }
331
+ return state;
332
+ },
333
+ async getStateCopy(defaultValue = {}) {
334
+ if (this.stateCopy === null) {
335
+ return defaultValue;
336
+ }
337
+ return this.stateCopy;
338
+ },
339
+ };
340
+ const browserRun = await this.crawlOne('clientOnly', crawlingContext, stateTracker.getLiveState.bind(stateTracker));
157
341
  if (!browserRun.ok) {
158
342
  throw browserRun.error;
159
343
  }
160
344
  await this.commitResult(crawlingContext, browserRun.result);
161
345
  if (shouldDetectRenderingType) {
162
346
  crawlingContext.log.debug(`Detecting rendering type for ${crawlingContext.request.url}`);
163
- const plainHTTPRun = await this.runRequestHandlerWithPlainHTTP(crawlingContext, initialStateCopy);
347
+ const plainHTTPRun = await this.crawlOne('static', crawlingContext, stateTracker.getStateCopy.bind(stateTracker));
164
348
  const detectionResult = (() => {
165
349
  if (!plainHTTPRun.ok) {
166
350
  return 'clientOnly';
167
351
  }
168
- if (this.resultComparator(plainHTTPRun.result, browserRun.result)) {
352
+ const comparisonResult = this.resultComparator(plainHTTPRun.result, browserRun.result);
353
+ if (comparisonResult === true || comparisonResult === 'equal') {
169
354
  return 'static';
170
355
  }
171
- return 'clientOnly';
356
+ if (comparisonResult === false || comparisonResult === 'different') {
357
+ return 'clientOnly';
358
+ }
359
+ return undefined;
172
360
  })();
173
361
  crawlingContext.log.debug(`Detected rendering type ${detectionResult} for ${crawlingContext.request.url}`);
174
- this.renderingTypePredictor.storeResult(crawlingContext.request, detectionResult);
362
+ if (detectionResult !== undefined) {
363
+ this.renderingTypePredictor.storeResult(crawlingContext.request, detectionResult);
364
+ }
175
365
  }
176
366
  }
177
367
  async commitResult(crawlingContext, { calls, keyValueStoreChanges }) {
178
368
  await Promise.all([
179
369
  ...calls.pushData.map(async (params) => crawlingContext.pushData(...params)),
180
- ...calls.enqueueLinks.map(async (params) => await crawlingContext.enqueueLinks(...params)),
181
370
  ...calls.addRequests.map(async (params) => crawlingContext.addRequests(...params)),
182
371
  ...Object.entries(keyValueStoreChanges).map(async ([storeIdOrName, changes]) => {
183
372
  const store = await crawlingContext.getKeyValueStore(storeIdOrName);
@@ -188,151 +377,28 @@ export class AdaptivePlaywrightCrawler extends PlaywrightCrawler {
188
377
  allowStorageAccess(func) {
189
378
  return async (...args) => withCheckedStorageAccess(() => { }, async () => func(...args));
190
379
  }
191
- async runRequestHandlerInBrowser(crawlingContext) {
192
- const result = new RequestHandlerResult(this.config, AdaptivePlaywrightCrawler.CRAWLEE_STATE_KEY);
193
- let initialStateCopy;
194
- try {
195
- await super._runRequestHandler.call(new Proxy(this, {
196
- get: (target, propertyName, receiver) => {
197
- if (propertyName === 'userProvidedRequestHandler') {
198
- return async (playwrightContext) => withCheckedStorageAccess(() => {
199
- if (this.preventDirectStorageAccess) {
200
- throw new Error('Directly accessing storage in a request handler is not allowed in AdaptivePlaywrightCrawler');
201
- }
202
- }, () => this.adaptiveRequestHandler({
203
- id: crawlingContext.id,
204
- session: crawlingContext.session,
205
- proxyInfo: crawlingContext.proxyInfo,
206
- request: crawlingContext.request,
207
- response: {
208
- url: crawlingContext.response.url(),
209
- statusCode: crawlingContext.response.status(),
210
- headers: crawlingContext.response.headers(),
211
- trailers: {},
212
- complete: true,
213
- redirectUrls: [],
214
- },
215
- log: crawlingContext.log,
216
- page: crawlingContext.page,
217
- querySelector: async (selector, timeoutMs = 5_000) => {
218
- const locator = playwrightContext.page.locator(selector).first();
219
- await locator.waitFor({ timeout: timeoutMs, state: 'attached' });
220
- const $ = await playwrightContext.parseWithCheerio();
221
- return $(selector);
222
- },
223
- async waitForSelector(selector, timeoutMs = 5_000) {
224
- const locator = playwrightContext.page.locator(selector).first();
225
- await locator.waitFor({ timeout: timeoutMs, state: 'attached' });
226
- },
227
- async parseWithCheerio(selector, timeoutMs = 5_000) {
228
- if (selector) {
229
- const locator = playwrightContext.page.locator(selector).first();
230
- await locator.waitFor({ timeout: timeoutMs, state: 'attached' });
231
- }
232
- return playwrightContext.parseWithCheerio();
233
- },
234
- async enqueueLinks(options = {}, timeoutMs = 5_000) {
235
- const selector = options.selector ?? 'a';
236
- const locator = playwrightContext.page.locator(selector).first();
237
- await locator.waitFor({ timeout: timeoutMs, state: 'attached' });
238
- const urls = await extractUrlsFromPage(playwrightContext.page, selector, options.baseUrl ??
239
- playwrightContext.request.loadedUrl ??
240
- playwrightContext.request.url);
241
- await result.enqueueLinks({ ...options, urls });
242
- },
243
- addRequests: result.addRequests,
244
- pushData: result.pushData,
245
- useState: this.allowStorageAccess(async (defaultValue) => {
246
- const state = await result.useState(defaultValue);
247
- if (initialStateCopy === undefined) {
248
- initialStateCopy = JSON.parse(JSON.stringify(state));
249
- }
250
- return state;
251
- }),
252
- getKeyValueStore: this.allowStorageAccess(result.getKeyValueStore),
253
- }));
254
- }
255
- return Reflect.get(target, propertyName, receiver);
256
- },
257
- }), crawlingContext);
258
- return { result: { result, ok: true }, initialStateCopy };
259
- }
260
- catch (error) {
261
- return { result: { error, ok: false }, initialStateCopy };
262
- }
263
- }
264
- async runRequestHandlerWithPlainHTTP(crawlingContext, oldStateCopy) {
265
- const result = new RequestHandlerResult(this.config, AdaptivePlaywrightCrawler.CRAWLEE_STATE_KEY);
266
- const logs = [];
267
- const pageGotoOptions = { timeout: this.navigationTimeoutMillis }; // Irrelevant, but required by BrowserCrawler
268
- try {
269
- await withCheckedStorageAccess(() => {
270
- if (this.preventDirectStorageAccess) {
271
- throw new Error('Directly accessing storage in a request handler is not allowed in AdaptivePlaywrightCrawler');
272
- }
273
- }, async () => addTimeoutToPromise(async () => {
274
- const hookContext = {
275
- id: crawlingContext.id,
276
- session: crawlingContext.session,
277
- proxyInfo: crawlingContext.proxyInfo,
278
- request: crawlingContext.request,
279
- log: this.createLogProxy(crawlingContext.log, logs),
280
- };
281
- await this._executeHooks(this.preNavigationHooks, {
282
- ...hookContext,
283
- get page() {
284
- throw new Error('Page object was used in HTTP-only pre-navigation hook');
285
- },
286
- }, // This is safe because `executeHooks` just passes the context to the hooks which accept the partial context
287
- pageGotoOptions);
288
- const response = await crawlingContext.sendRequest({});
289
- const loadedUrl = response.url;
290
- crawlingContext.request.loadedUrl = loadedUrl;
291
- const $ = load(response.body);
292
- await this.adaptiveRequestHandler({
293
- ...hookContext,
294
- request: crawlingContext.request,
295
- response,
296
- get page() {
297
- throw new Error('Page object was used in HTTP-only request handler');
298
- },
299
- async querySelector(selector, _timeoutMs) {
300
- return $(selector);
301
- },
302
- async waitForSelector(selector, _timeoutMs) {
303
- if ($(selector).get().length === 0) {
304
- throw new Error(`Selector '${selector}' not found.`);
305
- }
306
- },
307
- async parseWithCheerio(selector, _timeoutMs) {
308
- if (selector && $(selector).get().length === 0) {
309
- throw new Error(`Selector '${selector}' not found.`);
310
- }
311
- return $;
312
- },
313
- async enqueueLinks(options = {}) {
314
- const urls = extractUrlsFromCheerio($, options.selector, options.baseUrl ?? loadedUrl);
315
- await result.enqueueLinks({ ...options, urls });
316
- },
317
- addRequests: result.addRequests,
318
- pushData: result.pushData,
319
- useState: async (defaultValue) => {
320
- // return the old state before the browser handler was executed
321
- // when rerunning the handler via HTTP for detection
322
- if (oldStateCopy !== undefined) {
323
- return oldStateCopy ?? defaultValue; // fallback to the default for `null`
324
- }
325
- return this.allowStorageAccess(result.useState)(defaultValue);
326
- },
327
- getKeyValueStore: this.allowStorageAccess(result.getKeyValueStore),
328
- });
329
- await this._executeHooks(this.postNavigationHooks, crawlingContext, pageGotoOptions);
330
- }, this.requestHandlerTimeoutInnerMillis, 'Request handler timed out'));
331
- return { result, logs, ok: true };
332
- }
333
- catch (error) {
334
- return { error, logs, ok: false };
335
- }
380
+ async enqueueLinks(options, request, result) {
381
+ const baseUrl = resolveBaseUrlForEnqueueLinksFiltering({
382
+ enqueueStrategy: options?.strategy,
383
+ finalRequestUrl: request.loadedUrl,
384
+ originalRequestUrl: request.url,
385
+ userProvidedBaseUrl: options?.baseUrl,
386
+ });
387
+ const addRequestsBatched = async (requests) => {
388
+ await result.addRequests(requests);
389
+ return {
390
+ addedRequests: requests.map(({ uniqueKey, id }) => ({
391
+ uniqueKey,
392
+ requestId: id ?? '',
393
+ wasAlreadyPresent: false,
394
+ wasAlreadyHandled: false,
395
+ })),
396
+ waitForAllRequestsToBeAdded: Promise.resolve([]),
397
+ };
398
+ };
399
+ // We need to use a mock request queue implementation, in order to add the requests into our result object
400
+ const mockRequestQueue = { addRequestsBatched };
401
+ return await this.enqueueLinksWithCrawlDepth({ ...options, baseUrl }, request, mockRequestQueue);
336
402
  }
337
403
  createLogProxy(log, logs) {
338
404
  return new Proxy(log, {
@@ -346,6 +412,12 @@ export class AdaptivePlaywrightCrawler extends PlaywrightCrawler {
346
412
  },
347
413
  });
348
414
  }
415
+ async teardown() {
416
+ await super.teardown();
417
+ for (const hook of this.teardownHooks) {
418
+ await hook();
419
+ }
420
+ }
349
421
  }
350
422
  export function createAdaptivePlaywrightRouter(routes) {
351
423
  return Router.create(routes);
@@ -1 +1 @@
1
- {"version":3,"file":"adaptive-playwright-crawler.js","sourceRoot":"","sources":["../../src/internals/adaptive-playwright-crawler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adaptive-playwright-crawler.js","sourceRoot":"","sources":["../../src/internals/adaptive-playwright-crawler.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { GlobInput, PseudoUrlInput, RegExpInput, RequestProvider, RequestTransform } from '@crawlee/browser';
1
+ import type { GlobInput, PseudoUrlInput, RegExpInput, RequestProvider, RequestTransform, SkippedRequestCallback } from '@crawlee/browser';
2
2
  import type { BatchAddRequestsResult, Dictionary } from '@crawlee/types';
3
3
  // @ts-ignore optional peer dependency or compatibility with es2022
4
4
  import type { Page } from 'playwright';
@@ -40,6 +40,16 @@ export interface EnqueueLinksByClickingElementsOptions {
40
40
  * after clicking on elements matching the provided CSS selector.
41
41
  */
42
42
  globs?: GlobInput[];
43
+ /**
44
+ * An array of glob pattern strings, regexp patterns or plain objects
45
+ * containing patterns matching URLs that will **never** be enqueued.
46
+ *
47
+ * The plain objects must include either the `glob` property or the `regexp` property.
48
+ *
49
+ * Glob matching is always case-insensitive.
50
+ * If you need case-sensitive matching, provide a regexp.
51
+ */
52
+ exclude?: readonly (GlobInput | RegExpInput)[];
43
53
  /**
44
54
  * An array of regular expressions or plain objects
45
55
  * containing regular expressions matching the URLs to be enqueued.
@@ -73,25 +83,28 @@ export interface EnqueueLinksByClickingElementsOptions {
73
83
  */
74
84
  pseudoUrls?: PseudoUrlInput[];
75
85
  /**
76
- * Just before a new {@link Request} is constructed and enqueued to the {@link RequestQueue}, this function can be used
77
- * to remove it or modify its contents such as `userData`, `payload` or, most importantly `uniqueKey`. This is useful
78
- * when you need to enqueue multiple `Requests` to the queue that share the same URL, but differ in methods or payloads,
79
- * or to dynamically update or create `userData`.
80
- *
81
- * For example: by adding `useExtendedUniqueKey: true` to the `request` object, `uniqueKey` will be computed from
82
- * a combination of `url`, `method` and `payload` which enables crawling of websites that navigate using form submits
83
- * (POST requests).
86
+ * After {@link Request} objects are constructed and filtered by URL patterns (`globs`, `regexps`, `pseudoUrls`),
87
+ * this function can be used to remove them or modify their contents such as `userData`, `payload` or, most importantly
88
+ * `uniqueKey`. This is useful when you need to enqueue multiple `Requests` to the queue that share the same URL,
89
+ * but differ in methods or payloads, or to dynamically update or create `userData`.
84
90
  *
85
91
  * **Example:**
86
92
  * ```javascript
87
93
  * {
88
94
  * transformRequestFunction: (request) => {
89
95
  * request.userData.foo = 'bar';
90
- * request.useExtendedUniqueKey = true;
91
96
  * return request;
92
97
  * }
93
98
  * }
94
99
  * ```
100
+ *
101
+ * Note that `transformRequestFunction` has the highest priority and can overwrite request options
102
+ * specified in `globs`, `regexps`, or `pseudoUrls` objects, as well as the global `label` option.
103
+ *
104
+ * The function receives a {@link RequestOptions} object and can return either:
105
+ * - The modified {@link RequestOptions} object
106
+ * - `'unchanged'` to keep the original options as-is
107
+ * - A falsy value or `'skip'` to exclude the request from the queue
95
108
  */
96
109
  transformRequestFunction?: RequestTransform;
97
110
  /**
@@ -131,6 +144,12 @@ export interface EnqueueLinksByClickingElementsOptions {
131
144
  * @default false
132
145
  */
133
146
  skipNavigation?: boolean;
147
+ /**
148
+ * When a request is skipped for some reason, you can use this callback to act on it.
149
+ * This is fired for requests skipped because they don't match enqueueLinks filters
150
+ * or because they were removed by `transformRequestFunction`.
151
+ */
152
+ onSkippedRequest?: SkippedRequestCallback;
134
153
  }
135
154
  /**
136
155
  * The function finds elements matching a specific CSS selector in a Playwright page,