@crawlee/cheerio 3.0.0-alpha.3 → 3.0.0-alpha.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.
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -39,7 +39,6 @@ export const Snapshotter = mod.Snapshotter;
39
39
  export const Statistics = mod.Statistics;
40
40
  export const StorageManager = mod.StorageManager;
41
41
  export const SystemStatus = mod.SystemStatus;
42
- export const basicCrawlerEnqueueLinks = mod.basicCrawlerEnqueueLinks;
43
42
  export const checkAndSerialize = mod.checkAndSerialize;
44
43
  export const cheerioCrawlerEnqueueLinks = mod.cheerioCrawlerEnqueueLinks;
45
44
  export const chunkBySize = mod.chunkBySize;
@@ -58,11 +57,9 @@ export const handleRequestTimeout = mod.handleRequestTimeout;
58
57
  export const log = mod.log;
59
58
  export const maybeStringify = mod.maybeStringify;
60
59
  export const mergeCookies = mod.mergeCookies;
61
- export const openDataset = mod.openDataset;
62
- export const pushData = mod.pushData;
60
+ export const resolveBaseUrl = mod.resolveBaseUrl;
63
61
  export const serializeArray = mod.serializeArray;
64
62
  export const storage = mod.storage;
65
- export const throwOnBlockedRequest = mod.throwOnBlockedRequest;
66
63
  export const updateEnqueueLinksPatternCache = mod.updateEnqueueLinksPatternCache;
67
64
  export const validateGlobPattern = mod.validateGlobPattern;
68
65
  export const validators = mod.validators;
@@ -1,14 +1,14 @@
1
1
  /// <reference types="node" />
2
2
  import { BasicCrawler, BasicCrawlerOptions } from '@crawlee/basic';
3
3
  import { CrawlerExtension, CrawlerHandleFailedRequestInput, CrawlingContext, EnqueueLinksOptions, ProxyConfiguration, ProxyInfo, Request, RequestQueue, Session, storage } from '@crawlee/core';
4
- import { Awaitable, CheerioRoot } from '@crawlee/utils';
4
+ import { Awaitable, CheerioRoot, Dictionary } from '@crawlee/utils';
5
5
  import { RequestLike, ResponseLike } from 'content-type';
6
6
  import { OptionsInit } from 'got-scraping';
7
7
  import { IncomingMessage } from 'http';
8
- export interface CheerioFailedRequestHandlerInput<JSONData = unknown> extends CrawlerHandleFailedRequestInput, CheerioRequestHandlerInputs<JSONData> {
8
+ export interface CheerioFailedRequestHandlerInput<JSONData = Dictionary> extends CrawlerHandleFailedRequestInput, CheerioRequestHandlerInputs<JSONData> {
9
9
  }
10
- export declare type CheerioFailedRequestHandler<JSONData = unknown> = (inputs: CheerioFailedRequestHandlerInput<JSONData>) => Awaitable<void>;
11
- export interface CheerioCrawlerOptions<JSONData = unknown> extends Omit<BasicCrawlerOptions<CheerioCrawlingContext<JSONData>>, 'requestHandler' | 'handleRequestFunction' | 'failedRequestHandler' | 'handleFailedRequestFunction' | 'handleRequestTimeoutSecs'> {
10
+ export declare type CheerioFailedRequestHandler<JSONData = Dictionary> = (inputs: CheerioFailedRequestHandlerInput<JSONData>) => Awaitable<void>;
11
+ export interface CheerioCrawlerOptions<JSONData = Dictionary> extends Omit<BasicCrawlerOptions<CheerioCrawlingContext<JSONData>>, 'requestHandler' | 'handleRequestFunction' | 'failedRequestHandler' | 'handleFailedRequestFunction' | 'handleRequestTimeoutSecs'> {
12
12
  /**
13
13
  * User-provided function that performs the logic of the crawler. It is called for each page
14
14
  * loaded and parsed by the crawler.
@@ -133,61 +133,6 @@ export interface CheerioCrawlerOptions<JSONData = unknown> extends Omit<BasicCra
133
133
  * @deprecated `handlePageFunction` has been renamed to `requestHandler` and will be removed in a future version.
134
134
  */
135
135
  handlePageFunction?: CheerioRequestHandler<JSONData>;
136
- /**
137
- * > This option is deprecated, use `preNavigationHooks` instead.
138
- *
139
- * A function that executes before the HTTP request is made to the target resource.
140
- * This function is suitable for setting dynamic properties such as cookies to the {@link Request}.
141
- *
142
- * The function receives the following object as an argument:
143
- * ```
144
- * {
145
- * request: Request,
146
- * session: Session,
147
- * proxyInfo: ProxyInfo,
148
- * crawler: CheerioCrawler,
149
- * }
150
- * ```
151
- * where the {@link Request} instance corresponds to the initialized request
152
- * and the {@link Session} instance corresponds to used session.
153
- *
154
- * The function should modify the properties of the passed {@link Request} instance
155
- * in place because there are already earlier references to it. Making a copy and returning it from
156
- * this function is therefore not supported, because it would create inconsistencies where
157
- * different parts of SDK would have access to a different {@link Request} instance.
158
- */
159
- prepareRequestFunction?: PrepareRequest<JSONData>;
160
- /**
161
- * > This option is deprecated, use `postNavigationHooks` instead.
162
- *
163
- * A function that executes right after the HTTP request is made to the target resource and response is returned.
164
- * This function is suitable for overriding custom properties of response e.g. setting headers because of response parsing.
165
- *
166
- * **Example usage:**
167
- *
168
- * ```javascript
169
- * const cheerioCrawlerOptions = {
170
- * // ...
171
- * postResponseFunction: ({ request, response }) => {
172
- * if (request.userData.parseAsJSON) {
173
- * response.headers['content-type'] = 'application/json; charset=utf-8';
174
- * }
175
- * }
176
- * }
177
- * ```
178
- * The function receives the following object as an argument:
179
- * ```
180
- * {
181
- * response: Object,
182
- * request: Request,
183
- * session: Session,
184
- * proxyInfo: ProxyInfo,
185
- * crawler: CheerioCrawler,
186
- * }
187
- * ```
188
- * The response is an instance of Node's http.IncomingMessage object.
189
- */
190
- postResponseFunction?: PostResponse<JSONData>;
191
136
  /**
192
137
  * Timeout in which the HTTP request to the resource needs to finish, given in seconds.
193
138
  */
@@ -314,7 +259,7 @@ export interface CheerioCrawlerOptions<JSONData = unknown> extends Omit<BasicCra
314
259
  */
315
260
  persistCookiesPerSession?: boolean;
316
261
  }
317
- export interface PrepareRequestInputs<JSONData = unknown> {
262
+ export interface PrepareRequestInputs<JSONData = Dictionary> {
318
263
  /**
319
264
  * Original instance of the {@link Request} object. Must be modified in-place.
320
265
  */
@@ -330,9 +275,9 @@ export interface PrepareRequestInputs<JSONData = unknown> {
330
275
  proxyInfo?: ProxyInfo;
331
276
  crawler?: CheerioCrawler<JSONData>;
332
277
  }
333
- export declare type PrepareRequest<JSONData = unknown> = (inputs: PrepareRequestInputs<JSONData>) => Awaitable<void>;
334
- export declare type CheerioHook<JSONData = unknown> = (crawlingContext: CheerioCrawlingContext<JSONData>, gotOptions: OptionsInit) => Awaitable<void>;
335
- export interface PostResponseInputs<JSONData = unknown> {
278
+ export declare type PrepareRequest<JSONData = Dictionary> = (inputs: PrepareRequestInputs<JSONData>) => Awaitable<void>;
279
+ export declare type CheerioHook<JSONData = Dictionary> = (crawlingContext: CheerioCrawlingContext<JSONData>, gotOptions: OptionsInit) => Awaitable<void>;
280
+ export interface PostResponseInputs<JSONData = Dictionary> {
336
281
  /**
337
282
  * stream
338
283
  */
@@ -352,8 +297,8 @@ export interface PostResponseInputs<JSONData = unknown> {
352
297
  proxyInfo?: ProxyInfo;
353
298
  crawler: CheerioCrawler<JSONData>;
354
299
  }
355
- export declare type PostResponse<JSONData = unknown> = (inputs: PostResponseInputs<JSONData>) => Awaitable<void>;
356
- export interface CheerioRequestHandlerInputs<JSONData = unknown> extends CrawlingContext {
300
+ export declare type PostResponse<JSONData = Dictionary> = (inputs: PostResponseInputs<JSONData>) => Awaitable<void>;
301
+ export interface CheerioRequestHandlerInputs<JSONData = Dictionary> extends CrawlingContext {
357
302
  /**
358
303
  * The [Cheerio](https://cheerio.js.org/) object with parsed HTML.
359
304
  */
@@ -377,8 +322,8 @@ export interface CheerioRequestHandlerInputs<JSONData = unknown> extends Crawlin
377
322
  response: IncomingMessage;
378
323
  enqueueLinks: (options?: CheerioCrawlerEnqueueLinksOptions) => Promise<storage.BatchAddRequestsResult>;
379
324
  }
380
- export declare type CheerioCrawlingContext<JSONData = unknown> = CheerioRequestHandlerInputs<JSONData>;
381
- export declare type CheerioRequestHandler<JSONData = unknown> = (inputs: CheerioRequestHandlerInputs<JSONData>) => Awaitable<void>;
325
+ export declare type CheerioCrawlingContext<JSONData = Dictionary> = CheerioRequestHandlerInputs<JSONData>;
326
+ export declare type CheerioRequestHandler<JSONData = Dictionary> = (inputs: CheerioRequestHandlerInputs<JSONData>) => Awaitable<void>;
382
327
  export declare type CheerioCrawlerEnqueueLinksOptions = Omit<EnqueueLinksOptions, 'urls' | 'requestQueue'>;
383
328
  /**
384
329
  * Provides a framework for the parallel crawling of web pages using plain HTTP requests and
@@ -465,16 +410,13 @@ export declare type CheerioCrawlerEnqueueLinksOptions = Omit<EnqueueLinksOptions
465
410
  * ```
466
411
  * @category Crawlers
467
412
  */
468
- export declare class CheerioCrawler<JSONData = unknown> extends BasicCrawler<CheerioCrawlingContext<JSONData>, CheerioFailedRequestHandlerInput<JSONData>> {
413
+ export declare class CheerioCrawler<JSONData = Dictionary> extends BasicCrawler<CheerioCrawlingContext<JSONData>, CheerioFailedRequestHandlerInput<JSONData>> {
469
414
  /**
470
415
  * A reference to the underlying {@link ProxyConfiguration} class that manages the crawler's proxies.
471
416
  * Only available if used by the crawler.
472
417
  */
473
418
  proxyConfiguration?: ProxyConfiguration;
474
419
  protected userRequestHandlerTimeoutMillis: number;
475
- protected defaultGotoOptions: {
476
- timeout: number;
477
- };
478
420
  protected preNavigationHooks: CheerioHook<JSONData>[];
479
421
  protected postNavigationHooks: CheerioHook<JSONData>[];
480
422
  protected persistCookiesPerSession: boolean;
@@ -482,8 +424,6 @@ export declare class CheerioCrawler<JSONData = unknown> extends BasicCrawler<Che
482
424
  protected ignoreSslErrors: boolean;
483
425
  protected suggestResponseEncoding?: string;
484
426
  protected forceResponseEncoding?: string;
485
- protected prepareRequestFunction?: PrepareRequest<JSONData>;
486
- protected postResponseFunction?: PostResponse<JSONData>;
487
427
  protected readonly supportedMimeTypes: Set<string>;
488
428
  protected static optionsShape: {
489
429
  handlePageFunction: import("ow").Predicate<Function> & import("ow").BasePredicate<Function | undefined>;
@@ -493,8 +433,6 @@ export declare class CheerioCrawler<JSONData = unknown> extends BasicCrawler<Che
493
433
  suggestResponseEncoding: import("ow").StringPredicate & import("ow").BasePredicate<string | undefined>;
494
434
  forceResponseEncoding: import("ow").StringPredicate & import("ow").BasePredicate<string | undefined>;
495
435
  proxyConfiguration: import("ow").ObjectPredicate<object> & import("ow").BasePredicate<object | undefined>;
496
- prepareRequestFunction: import("ow").Predicate<Function> & import("ow").BasePredicate<Function | undefined>;
497
- postResponseFunction: import("ow").Predicate<Function> & import("ow").BasePredicate<Function | undefined>;
498
436
  persistCookiesPerSession: import("ow").BooleanPredicate & import("ow").BasePredicate<boolean | undefined>;
499
437
  preNavigationHooks: import("ow").ArrayPredicate<unknown> & import("ow").BasePredicate<unknown[] | undefined>;
500
438
  postNavigationHooks: import("ow").ArrayPredicate<unknown> & import("ow").BasePredicate<unknown[] | undefined>;
@@ -503,7 +441,10 @@ export declare class CheerioCrawler<JSONData = unknown> extends BasicCrawler<Che
503
441
  requestHandler: import("ow").Predicate<Function> & import("ow").BasePredicate<Function | undefined>;
504
442
  handleRequestFunction: import("ow").Predicate<Function> & import("ow").BasePredicate<Function | undefined>;
505
443
  requestHandlerTimeoutSecs: import("ow").NumberPredicate & import("ow").BasePredicate<number | undefined>;
506
- handleRequestTimeoutSecs: import("ow").NumberPredicate & import("ow").BasePredicate<number | undefined>;
444
+ handleRequestTimeoutSecs: import("ow").NumberPredicate & import("ow").BasePredicate<number | undefined>; /**
445
+ * An object with information about currently used proxy by the crawler
446
+ * and configured by the {@link ProxyConfiguration} class.
447
+ */
507
448
  failedRequestHandler: import("ow").Predicate<Function> & import("ow").BasePredicate<Function | undefined>;
508
449
  handleFailedRequestFunction: import("ow").Predicate<Function> & import("ow").BasePredicate<Function | undefined>;
509
450
  maxRequestRetries: import("ow").NumberPredicate & import("ow").BasePredicate<number | undefined>;
@@ -531,25 +472,15 @@ export declare class CheerioCrawler<JSONData = unknown> extends BasicCrawler<Che
531
472
  protected _runRequestHandler(crawlingContext: CheerioCrawlingContext<JSONData>): Promise<void>;
532
473
  protected _handleNavigation(crawlingContext: CheerioCrawlingContext<JSONData>): Promise<void>;
533
474
  /**
534
- * When users change `request.headers.cookie` inside preNavigationHook, the change would be ignored,
535
- * as `request.headers` are already merged into the `gotOptions`. This method is using
536
- * old `request.headers` snapshot (before hooks are executed), makes a diff with the cookie value
537
- * after hooks are executed, and merges any new cookies back to `gotOptions`.
538
- *
539
- * This way we can still use both `gotOptions` and `context.request` in the hooks (not both).
475
+ * Sets the cookie header to `gotOptions` based on the provided request and session headers, as well as any changes that occurred due to hooks.
540
476
  */
541
- private _mergeRequestCookieDiff;
477
+ private _applyCookies;
542
478
  /**
543
479
  * Function to make the HTTP request. It performs optimizations
544
480
  * on the request such as only downloading the request body if the
545
481
  * received content type matches text/html, application/xml, application/xhtml+xml.
546
482
  */
547
483
  protected _requestFunction({ request, session, proxyUrl, gotOptions }: RequestFunctionOptions): Promise<IncomingMessage>;
548
- /**
549
- * Sets the cookie header to `gotOptions` based on provided session and request. If some cookies were already set,
550
- * the session cookie will be merged with them. User provided cookies on `request` object have precedence.
551
- */
552
- private _applySessionCookie;
553
484
  /**
554
485
  * Encodes and parses response according to the provided content type
555
486
  */
@@ -587,10 +518,6 @@ export declare class CheerioCrawler<JSONData = unknown> extends BasicCrawler<Che
587
518
  * Checks and extends supported mime types
588
519
  */
589
520
  protected _extendSupportedMimeTypes(additionalMimeTypes: (string | RequestLike | ResponseLike)[]): void;
590
- /**
591
- * Handles blocked request
592
- */
593
- protected _throwOnBlockedRequest(session: Session, statusCode: number): void;
594
521
  /**
595
522
  * Handles timeout request
596
523
  */
@@ -604,11 +531,12 @@ export declare class CheerioCrawler<JSONData = unknown> extends BasicCrawler<Che
604
531
  interface EnqueueLinksInternalOptions {
605
532
  options?: CheerioCrawlerEnqueueLinksOptions;
606
533
  $: CheerioRoot | null;
607
- requestQueue?: RequestQueue;
608
- defaultBaseUrl?: string;
534
+ requestQueue: RequestQueue;
535
+ originalRequestUrl: string;
536
+ finalRequestUrl?: string;
609
537
  }
610
538
  /** @internal */
611
- export declare function cheerioCrawlerEnqueueLinks({ options, $, requestQueue, defaultBaseUrl }: EnqueueLinksInternalOptions): Promise<storage.BatchAddRequestsResult>;
539
+ export declare function cheerioCrawlerEnqueueLinks({ options, $, requestQueue, originalRequestUrl, finalRequestUrl }: EnqueueLinksInternalOptions): Promise<storage.BatchAddRequestsResult>;
612
540
  interface RequestFunctionOptions {
613
541
  request: Request;
614
542
  session?: Session;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cheerio-crawler.d.ts","sourceRoot":"","sources":["../../src/internals/cheerio-crawler.ts"],"names":[],"mappings":"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"}
@@ -120,7 +120,7 @@ class CheerioCrawler extends basic_1.BasicCrawler {
120
120
  */
121
121
  constructor(options) {
122
122
  (0, ow_1.default)(options, 'CheerioCrawlerOptions', ow_1.default.object.exactShape(CheerioCrawler.optionsShape));
123
- const { requestHandler, handlePageFunction, requestHandlerTimeoutSecs = 60, requestTimeoutSecs = 30, ignoreSslErrors = true, additionalMimeTypes = [], suggestResponseEncoding, forceResponseEncoding, proxyConfiguration, prepareRequestFunction, postResponseFunction, persistCookiesPerSession, preNavigationHooks = [], postNavigationHooks = [],
123
+ const { requestHandler, handlePageFunction, requestHandlerTimeoutSecs = 60, requestTimeoutSecs = 30, ignoreSslErrors = true, additionalMimeTypes = [], suggestResponseEncoding, forceResponseEncoding, proxyConfiguration, persistCookiesPerSession, preNavigationHooks = [], postNavigationHooks = [],
124
124
  // Ignored
125
125
  handleRequestFunction,
126
126
  // BasicCrawler
@@ -150,12 +150,6 @@ class CheerioCrawler extends basic_1.BasicCrawler {
150
150
  writable: true,
151
151
  value: void 0
152
152
  });
153
- Object.defineProperty(this, "defaultGotoOptions", {
154
- enumerable: true,
155
- configurable: true,
156
- writable: true,
157
- value: void 0
158
- });
159
153
  Object.defineProperty(this, "preNavigationHooks", {
160
154
  enumerable: true,
161
155
  configurable: true,
@@ -198,18 +192,6 @@ class CheerioCrawler extends basic_1.BasicCrawler {
198
192
  writable: true,
199
193
  value: void 0
200
194
  });
201
- Object.defineProperty(this, "prepareRequestFunction", {
202
- enumerable: true,
203
- configurable: true,
204
- writable: true,
205
- value: void 0
206
- });
207
- Object.defineProperty(this, "postResponseFunction", {
208
- enumerable: true,
209
- configurable: true,
210
- writable: true,
211
- value: void 0
212
- });
213
195
  Object.defineProperty(this, "supportedMimeTypes", {
214
196
  enumerable: true,
215
197
  configurable: true,
@@ -255,8 +237,6 @@ class CheerioCrawler extends basic_1.BasicCrawler {
255
237
  this.ignoreSslErrors = ignoreSslErrors;
256
238
  this.suggestResponseEncoding = suggestResponseEncoding;
257
239
  this.forceResponseEncoding = forceResponseEncoding;
258
- this.prepareRequestFunction = prepareRequestFunction;
259
- this.postResponseFunction = postResponseFunction;
260
240
  this.proxyConfiguration = proxyConfiguration;
261
241
  this.preNavigationHooks = preNavigationHooks;
262
242
  this.postNavigationHooks = [
@@ -301,103 +281,88 @@ class CheerioCrawler extends basic_1.BasicCrawler {
301
281
  const { request, session } = crawlingContext;
302
282
  if (this.proxyConfiguration) {
303
283
  const sessionId = session ? session.id : undefined;
304
- crawlingContext.proxyInfo = this.proxyConfiguration.newProxyInfo(sessionId);
305
- }
306
- await this._handleNavigation(crawlingContext);
307
- (0, timeout_1.tryCancel)();
308
- const { dom, isXml, body, contentType, response } = await this._parseResponse(request, crawlingContext.response);
309
- (0, timeout_1.tryCancel)();
310
- if (this.useSessionPool) {
311
- this._throwOnBlockedRequest(session, response.statusCode);
284
+ crawlingContext.proxyInfo = await this.proxyConfiguration.newProxyInfo(sessionId);
312
285
  }
313
- if (this.persistCookiesPerSession) {
314
- session.setCookiesFromResponse(response);
315
- }
316
- request.loadedUrl = response.url;
317
- const $ = dom
318
- ? cheerio_1.default.load(dom, {
319
- xmlMode: isXml,
320
- // Recent versions of cheerio use parse5 as the HTML parser/serializer. It's more strict than htmlparser2
321
- // and not good for scraping. It also does not have a great streaming interface.
322
- // Here we tell cheerio to use htmlparser2 for serialization, otherwise the conflict produces weird errors.
323
- _useHtmlParser2: true,
324
- })
325
- : null;
326
- crawlingContext.$ = $;
327
- crawlingContext.contentType = contentType;
328
- crawlingContext.response = response;
329
- crawlingContext.enqueueLinks = async (enqueueOptions) => {
330
- return cheerioCrawlerEnqueueLinks({
331
- options: enqueueOptions,
332
- $,
333
- requestQueue: await this.getRequestQueue(),
334
- defaultBaseUrl: new URL(crawlingContext.request.loadedUrl ?? crawlingContext.request.url).origin,
286
+ if (!request.skipNavigation) {
287
+ await this._handleNavigation(crawlingContext);
288
+ (0, timeout_1.tryCancel)();
289
+ const { dom, isXml, body, contentType, response } = await this._parseResponse(request, crawlingContext.response);
290
+ (0, timeout_1.tryCancel)();
291
+ if (this.useSessionPool) {
292
+ this._throwOnBlockedRequest(session, response.statusCode);
293
+ }
294
+ if (this.persistCookiesPerSession) {
295
+ session.setCookiesFromResponse(response);
296
+ }
297
+ request.loadedUrl = response.url;
298
+ const $ = dom
299
+ ? cheerio_1.default.load(dom, {
300
+ xmlMode: isXml,
301
+ // Recent versions of cheerio use parse5 as the HTML parser/serializer. It's more strict than htmlparser2
302
+ // and not good for scraping. It also does not have a great streaming interface.
303
+ // Here we tell cheerio to use htmlparser2 for serialization, otherwise the conflict produces weird errors.
304
+ _useHtmlParser2: true,
305
+ })
306
+ : null;
307
+ crawlingContext.$ = $;
308
+ crawlingContext.contentType = contentType;
309
+ crawlingContext.response = response;
310
+ crawlingContext.enqueueLinks = async (enqueueOptions) => {
311
+ return cheerioCrawlerEnqueueLinks({
312
+ options: enqueueOptions,
313
+ $,
314
+ requestQueue: await this.getRequestQueue(),
315
+ originalRequestUrl: crawlingContext.request.url,
316
+ finalRequestUrl: crawlingContext.request.loadedUrl,
317
+ });
318
+ };
319
+ Object.defineProperty(crawlingContext, 'json', {
320
+ get() {
321
+ if (contentType.type !== APPLICATION_JSON_MIME_TYPE)
322
+ return null;
323
+ const jsonString = body.toString(contentType.encoding);
324
+ return JSON.parse(jsonString);
325
+ },
335
326
  });
336
- };
337
- Object.defineProperty(crawlingContext, 'json', {
338
- get() {
339
- if (contentType.type !== APPLICATION_JSON_MIME_TYPE)
340
- return null;
341
- const jsonString = body.toString(contentType.encoding);
342
- return JSON.parse(jsonString);
343
- },
344
- });
345
- Object.defineProperty(crawlingContext, 'body', {
346
- get() {
347
- // NOTE: For XML/HTML documents, we don't store the original body and only reconstruct it from Cheerio's DOM.
348
- // This is to save memory for high-concurrency crawls. The downside is that changes
349
- // made to DOM are reflected in the HTML, but we can live with that...
350
- if (dom) {
351
- return isXml ? $.xml() : $.html({ decodeEntities: false });
352
- }
353
- return body;
354
- },
355
- });
327
+ Object.defineProperty(crawlingContext, 'body', {
328
+ get() {
329
+ // NOTE: For XML/HTML documents, we don't store the original body and only reconstruct it from Cheerio's DOM.
330
+ // This is to save memory for high-concurrency crawls. The downside is that changes
331
+ // made to DOM are reflected in the HTML, but we can live with that...
332
+ if (dom) {
333
+ return isXml ? $.xml() : $.html({ decodeEntities: false });
334
+ }
335
+ return body;
336
+ },
337
+ });
338
+ }
356
339
  return (0, timeout_1.addTimeoutToPromise)(() => Promise.resolve(this.requestHandler(crawlingContext)), this.userRequestHandlerTimeoutMillis, `requestHandler timed out after ${this.userRequestHandlerTimeoutMillis / 1000} seconds.`);
357
340
  }
358
341
  async _handleNavigation(crawlingContext) {
359
- if (this.prepareRequestFunction) {
360
- this.log.deprecated('Option "prepareRequestFunction" is deprecated. Use "preNavigationHooks" instead.');
361
- await this.prepareRequestFunction(crawlingContext);
362
- (0, timeout_1.tryCancel)();
363
- }
364
342
  const gotOptions = {};
365
- if (this.useSessionPool) {
366
- this._applySessionCookie(crawlingContext, gotOptions);
367
- }
368
343
  const { request, session } = crawlingContext;
369
- const cookieSnapshot = request.headers?.Cookie ?? request.headers?.cookie;
344
+ const preNavigationHooksCookies = this._getCookieHeaderFromRequest(request);
345
+ // Execute pre navigation hooks before applying session pool cookies,
346
+ // as they may also set cookies in the session
370
347
  await this._executeHooks(this.preNavigationHooks, crawlingContext, gotOptions);
371
348
  (0, timeout_1.tryCancel)();
349
+ const postNavigationHooksCookies = this._getCookieHeaderFromRequest(request);
350
+ this._applyCookies(crawlingContext, gotOptions, preNavigationHooksCookies, postNavigationHooksCookies);
372
351
  const proxyUrl = crawlingContext.proxyInfo?.url;
373
- this._mergeRequestCookieDiff(request, cookieSnapshot, gotOptions);
374
352
  crawlingContext.response = await (0, timeout_1.addTimeoutToPromise)(() => this._requestFunction({ request, session, proxyUrl, gotOptions }), this.requestTimeoutMillis, `request timed out after ${this.requestTimeoutMillis / 1000} seconds.`);
375
353
  (0, timeout_1.tryCancel)();
376
354
  await this._executeHooks(this.postNavigationHooks, crawlingContext, gotOptions);
377
355
  (0, timeout_1.tryCancel)();
378
- if (this.postResponseFunction) {
379
- this.log.deprecated('Option "postResponseFunction" is deprecated. Use "postNavigationHooks" instead.');
380
- await this.postResponseFunction(crawlingContext);
381
- (0, timeout_1.tryCancel)();
382
- }
383
356
  }
384
357
  /**
385
- * When users change `request.headers.cookie` inside preNavigationHook, the change would be ignored,
386
- * as `request.headers` are already merged into the `gotOptions`. This method is using
387
- * old `request.headers` snapshot (before hooks are executed), makes a diff with the cookie value
388
- * after hooks are executed, and merges any new cookies back to `gotOptions`.
389
- *
390
- * This way we can still use both `gotOptions` and `context.request` in the hooks (not both).
358
+ * Sets the cookie header to `gotOptions` based on the provided request and session headers, as well as any changes that occurred due to hooks.
391
359
  */
392
- _mergeRequestCookieDiff(request, cookieSnapshot, gotOptions) {
393
- const cookieDiff = (0, core_1.diffCookies)(request.url, cookieSnapshot, request.headers?.Cookie ?? request.headers?.cookie);
394
- if (cookieDiff.length > 0) {
395
- gotOptions.headers ?? (gotOptions.headers = {});
396
- gotOptions.headers.Cookie = (0, core_1.mergeCookies)(request.url, [
397
- gotOptions.headers.Cookie,
398
- cookieDiff,
399
- ]);
400
- }
360
+ _applyCookies({ session, request }, gotOptions, preHookCookies, postHookCookies) {
361
+ const sessionCookie = session?.getCookieString(request.url) ?? '';
362
+ const alteredGotOptionsCookies = (gotOptions.headers?.Cookie ?? gotOptions.headers?.cookie ?? '');
363
+ const mergedCookie = (0, core_1.mergeCookies)(request.url, [sessionCookie, preHookCookies, alteredGotOptionsCookies, postHookCookies]);
364
+ gotOptions.headers ?? (gotOptions.headers = {});
365
+ gotOptions.headers.Cookie = mergedCookie;
401
366
  }
402
367
  /**
403
368
  * Function to make the HTTP request. It performs optimizations
@@ -417,20 +382,6 @@ class CheerioCrawler extends basic_1.BasicCrawler {
417
382
  throw e;
418
383
  }
419
384
  }
420
- /**
421
- * Sets the cookie header to `gotOptions` based on provided session and request. If some cookies were already set,
422
- * the session cookie will be merged with them. User provided cookies on `request` object have precedence.
423
- */
424
- _applySessionCookie({ request, session }, gotOptions) {
425
- const userCookie = request.headers?.Cookie ?? request.headers?.cookie;
426
- const sessionCookie = session.getCookieString(request.url);
427
- const mergedCookies = (0, core_1.mergeCookies)(request.url, [sessionCookie, userCookie]);
428
- // merge cookies from all possible sources
429
- if (mergedCookies) {
430
- gotOptions.headers ?? (gotOptions.headers = {});
431
- gotOptions.headers.Cookie = mergedCookies;
432
- }
433
- }
434
385
  /**
435
386
  * Encodes and parses response according to the provided content type
436
387
  */
@@ -554,15 +505,6 @@ class CheerioCrawler extends basic_1.BasicCrawler {
554
505
  }
555
506
  });
556
507
  }
557
- /**
558
- * Handles blocked request
559
- */
560
- _throwOnBlockedRequest(session, statusCode) {
561
- const isBlocked = session.retireOnBlockedStatusCodes(statusCode);
562
- if (isBlocked) {
563
- throw new Error(`Request blocked - received ${statusCode} status code`);
564
- }
565
- }
566
508
  /**
567
509
  * Handles timeout request
568
510
  */
@@ -598,23 +540,25 @@ Object.defineProperty(CheerioCrawler, "optionsShape", {
598
540
  suggestResponseEncoding: ow_1.default.optional.string,
599
541
  forceResponseEncoding: ow_1.default.optional.string,
600
542
  proxyConfiguration: ow_1.default.optional.object.validate(core_1.validators.proxyConfiguration),
601
- prepareRequestFunction: ow_1.default.optional.function,
602
- postResponseFunction: ow_1.default.optional.function,
603
543
  persistCookiesPerSession: ow_1.default.optional.boolean,
604
544
  preNavigationHooks: ow_1.default.optional.array,
605
545
  postNavigationHooks: ow_1.default.optional.array,
606
546
  }
607
547
  });
608
548
  /** @internal */
609
- async function cheerioCrawlerEnqueueLinks({ options, $, requestQueue, defaultBaseUrl }) {
549
+ async function cheerioCrawlerEnqueueLinks({ options, $, requestQueue, originalRequestUrl, finalRequestUrl }) {
610
550
  if (!$) {
611
551
  throw new Error('Cannot enqueue links because the DOM is not available.');
612
552
  }
613
- const baseUrl = options?.baseUrl ?? defaultBaseUrl;
553
+ const baseUrl = (0, core_1.resolveBaseUrl)({
554
+ enqueueStrategy: options?.strategy,
555
+ finalRequestUrl,
556
+ originalRequestUrl,
557
+ userProvidedBaseUrl: options?.baseUrl,
558
+ });
614
559
  const urls = extractUrlsFromCheerio($, options?.selector ?? 'a', baseUrl);
615
560
  return (0, core_1.enqueueLinks)({
616
- // FIXME this does not make much sense, as the instance would be ignored by any crawler - the argument needs to be required
617
- requestQueue: requestQueue ?? await core_1.RequestQueue.open(),
561
+ requestQueue,
618
562
  urls,
619
563
  baseUrl,
620
564
  ...options,
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cheerio-crawler.js","sourceRoot":"","sources":["../../src/internals/cheerio-crawler.ts"],"names":[],"mappings":"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"}