@crawlee/playwright 4.0.0-beta.4 → 4.0.0-beta.40
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 +9 -5
- package/internals/adaptive-playwright-crawler.d.ts +48 -56
- package/internals/adaptive-playwright-crawler.d.ts.map +1 -1
- package/internals/adaptive-playwright-crawler.js +309 -205
- package/internals/adaptive-playwright-crawler.js.map +1 -1
- package/internals/enqueue-links/click-elements.d.ts +29 -10
- package/internals/enqueue-links/click-elements.d.ts.map +1 -1
- package/internals/enqueue-links/click-elements.js +38 -15
- package/internals/enqueue-links/click-elements.js.map +1 -1
- package/internals/playwright-crawler.d.ts +53 -49
- package/internals/playwright-crawler.d.ts.map +1 -1
- package/internals/playwright-crawler.js +52 -13
- package/internals/playwright-crawler.js.map +1 -1
- package/internals/playwright-launcher.d.ts +2 -0
- package/internals/playwright-launcher.d.ts.map +1 -1
- package/internals/utils/playwright-utils.d.ts +19 -6
- package/internals/utils/playwright-utils.d.ts.map +1 -1
- package/internals/utils/playwright-utils.js +103 -94
- package/internals/utils/playwright-utils.js.map +1 -1
- package/internals/utils/rendering-type-prediction.d.ts +9 -5
- package/internals/utils/rendering-type-prediction.d.ts.map +1 -1
- package/internals/utils/rendering-type-prediction.js +58 -23
- package/internals/utils/rendering-type-prediction.js.map +1 -1
- package/package.json +12 -8
- package/tsconfig.build.tsbuildinfo +0 -1
|
@@ -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 {
|
|
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,27 @@ const proxyLogMethods = [
|
|
|
80
81
|
*
|
|
81
82
|
* @experimental
|
|
82
83
|
*/
|
|
83
|
-
export class AdaptivePlaywrightCrawler extends
|
|
84
|
-
config;
|
|
85
|
-
adaptiveRequestHandler;
|
|
84
|
+
export class AdaptivePlaywrightCrawler extends BasicCrawler {
|
|
86
85
|
renderingTypePredictor;
|
|
87
86
|
resultChecker;
|
|
88
87
|
resultComparator;
|
|
89
88
|
preventDirectStorageAccess;
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
constructor(options = {}
|
|
97
|
-
const { requestHandler, renderingTypeDetectionRatio = 0.1, renderingTypePredictor, resultChecker, resultComparator, statisticsOptions, preventDirectStorageAccess = true, ...rest } = options;
|
|
98
|
-
super(
|
|
99
|
-
|
|
100
|
-
|
|
89
|
+
staticContextPipeline;
|
|
90
|
+
browserContextPipeline;
|
|
91
|
+
individualRequestHandlerTimeoutMillis;
|
|
92
|
+
resultObjects = new WeakMap();
|
|
93
|
+
inFlightRenderingTypeDetections = 0;
|
|
94
|
+
teardownHooks = [];
|
|
95
|
+
constructor(options = {}) {
|
|
96
|
+
const { requestHandler, renderingTypeDetectionRatio = 0.1, renderingTypePredictor, resultChecker, resultComparator, statisticsOptions, preventDirectStorageAccess = true, requestHandlerTimeoutSecs = 60, errorHandler, failedRequestHandler, preNavigationHooks, postNavigationHooks, extendContext, contextPipelineBuilder, ...rest } = options;
|
|
97
|
+
super({
|
|
98
|
+
...rest,
|
|
99
|
+
errorHandler,
|
|
100
|
+
failedRequestHandler,
|
|
101
|
+
requestHandler,
|
|
102
|
+
contextPipelineBuilder: contextPipelineBuilder ?? (() => this.buildContextPipeline()),
|
|
103
|
+
});
|
|
104
|
+
this.individualRequestHandlerTimeoutMillis = requestHandlerTimeoutSecs * 1000;
|
|
101
105
|
this.renderingTypePredictor =
|
|
102
106
|
renderingTypePredictor ?? new RenderingTypePredictor({ detectionRatio: renderingTypeDetectionRatio });
|
|
103
107
|
this.resultChecker = resultChecker ?? (() => true);
|
|
@@ -112,72 +116,289 @@ export class AdaptivePlaywrightCrawler extends PlaywrightCrawler {
|
|
|
112
116
|
return (resultA.datasetItems.length === resultB.datasetItems.length &&
|
|
113
117
|
resultA.datasetItems.every((itemA, i) => {
|
|
114
118
|
const itemB = resultB.datasetItems[i];
|
|
115
|
-
return
|
|
119
|
+
return isDeepStrictEqual(itemA, itemB);
|
|
116
120
|
}));
|
|
117
121
|
};
|
|
118
122
|
}
|
|
123
|
+
const staticCrawler = new CheerioCrawler({
|
|
124
|
+
...rest,
|
|
125
|
+
statisticsOptions: {
|
|
126
|
+
persistenceOptions: { enable: false },
|
|
127
|
+
},
|
|
128
|
+
preNavigationHooks: [
|
|
129
|
+
async (context) => {
|
|
130
|
+
for (const hook of preNavigationHooks ?? []) {
|
|
131
|
+
await hook(context, undefined);
|
|
132
|
+
}
|
|
133
|
+
},
|
|
134
|
+
],
|
|
135
|
+
postNavigationHooks: [
|
|
136
|
+
async (context) => {
|
|
137
|
+
for (const hook of postNavigationHooks ?? []) {
|
|
138
|
+
await hook(context, undefined);
|
|
139
|
+
}
|
|
140
|
+
},
|
|
141
|
+
],
|
|
142
|
+
});
|
|
143
|
+
const browserCrawler = new PlaywrightCrawler({
|
|
144
|
+
...rest,
|
|
145
|
+
statisticsOptions: {
|
|
146
|
+
persistenceOptions: { enable: false },
|
|
147
|
+
},
|
|
148
|
+
preNavigationHooks: [
|
|
149
|
+
async (context, gotoOptions) => {
|
|
150
|
+
for (const hook of preNavigationHooks ?? []) {
|
|
151
|
+
await hook(context, gotoOptions);
|
|
152
|
+
}
|
|
153
|
+
},
|
|
154
|
+
],
|
|
155
|
+
postNavigationHooks: [
|
|
156
|
+
async (context, gotoOptions) => {
|
|
157
|
+
for (const hook of postNavigationHooks ?? []) {
|
|
158
|
+
await hook(context, gotoOptions);
|
|
159
|
+
}
|
|
160
|
+
},
|
|
161
|
+
],
|
|
162
|
+
});
|
|
163
|
+
this.teardownHooks.push(browserCrawler.teardown.bind(browserCrawler));
|
|
164
|
+
this.staticContextPipeline = staticCrawler.contextPipeline
|
|
165
|
+
.compose({
|
|
166
|
+
action: this.adaptCheerioContext.bind(this),
|
|
167
|
+
})
|
|
168
|
+
.compose({
|
|
169
|
+
action: async (context) => extendContext ? await extendContext(context) : context,
|
|
170
|
+
});
|
|
171
|
+
this.browserContextPipeline = browserCrawler.contextPipeline
|
|
172
|
+
.compose({
|
|
173
|
+
action: this.adaptPlaywrightContext.bind(this),
|
|
174
|
+
})
|
|
175
|
+
.compose({
|
|
176
|
+
action: async (context) => extendContext ? await extendContext(context) : context,
|
|
177
|
+
});
|
|
119
178
|
this.stats = new AdaptivePlaywrightCrawlerStatistics({
|
|
120
179
|
logMessage: `${this.log.getOptions().prefix} request statistics:`,
|
|
121
|
-
config,
|
|
122
180
|
...statisticsOptions,
|
|
123
181
|
});
|
|
124
182
|
this.preventDirectStorageAccess = preventDirectStorageAccess;
|
|
125
183
|
}
|
|
126
|
-
async
|
|
184
|
+
async _init() {
|
|
185
|
+
await this.renderingTypePredictor.initialize();
|
|
186
|
+
return await super._init();
|
|
187
|
+
}
|
|
188
|
+
buildContextPipeline() {
|
|
189
|
+
const errorMessage = (prop) => `The \`${prop}\` property is not available on the outer context pipeline of AdaptivePlaywrightCrawler - it is provided by the inner (static/browser) pipelines`;
|
|
190
|
+
return super.buildContextPipeline().compose({
|
|
191
|
+
action: async ({ request }) => ({
|
|
192
|
+
get request() {
|
|
193
|
+
return request;
|
|
194
|
+
},
|
|
195
|
+
get response() {
|
|
196
|
+
throw new Error(errorMessage('response'));
|
|
197
|
+
},
|
|
198
|
+
get page() {
|
|
199
|
+
throw new Error(errorMessage('page'));
|
|
200
|
+
},
|
|
201
|
+
get querySelector() {
|
|
202
|
+
throw new Error(errorMessage('querySelector'));
|
|
203
|
+
},
|
|
204
|
+
get waitForSelector() {
|
|
205
|
+
throw new Error(errorMessage('waitForSelector'));
|
|
206
|
+
},
|
|
207
|
+
get parseWithCheerio() {
|
|
208
|
+
throw new Error(errorMessage('parseWithCheerio'));
|
|
209
|
+
},
|
|
210
|
+
}),
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
async adaptCheerioContext(cheerioContext) {
|
|
214
|
+
// Capture the original response to avoid infinite recursion when the getter is copied to the context
|
|
215
|
+
const result = this.resultObjects.get(cheerioContext);
|
|
216
|
+
if (result === undefined) {
|
|
217
|
+
throw new Error('Logical error - `this.resultObjects` does not contain the result object');
|
|
218
|
+
}
|
|
219
|
+
return {
|
|
220
|
+
get page() {
|
|
221
|
+
throw new Error('Page object was used in HTTP-only request handler');
|
|
222
|
+
},
|
|
223
|
+
async querySelector(selector) {
|
|
224
|
+
return cheerioContext.$(selector);
|
|
225
|
+
},
|
|
226
|
+
enqueueLinks: async (options = {}) => {
|
|
227
|
+
const urls = options.urls ??
|
|
228
|
+
extractUrlsFromCheerio(cheerioContext.$, options.selector, options.baseUrl ?? cheerioContext.request.loadedUrl);
|
|
229
|
+
return (await this.enqueueLinks({ ...options, urls }, cheerioContext.request, result));
|
|
230
|
+
},
|
|
231
|
+
response: cheerioContext.response,
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
async adaptPlaywrightContext(playwrightContext) {
|
|
235
|
+
const originalResponse = playwrightContext.response;
|
|
236
|
+
const result = this.resultObjects.get(playwrightContext);
|
|
237
|
+
if (result === undefined) {
|
|
238
|
+
throw new Error('Logical error - `this.resultObjects` does not contain the result object');
|
|
239
|
+
}
|
|
240
|
+
return {
|
|
241
|
+
response: new Response(Uint8Array.from(await originalResponse.body()), {
|
|
242
|
+
headers: originalResponse.headers(),
|
|
243
|
+
status: originalResponse.status(),
|
|
244
|
+
statusText: originalResponse.statusText(),
|
|
245
|
+
}),
|
|
246
|
+
async querySelector(selector, timeoutMs = 5000) {
|
|
247
|
+
const locator = playwrightContext.page.locator(selector).first();
|
|
248
|
+
await locator.waitFor({ timeout: timeoutMs, state: 'attached' });
|
|
249
|
+
const $ = await playwrightContext.parseWithCheerio();
|
|
250
|
+
return $(selector);
|
|
251
|
+
},
|
|
252
|
+
enqueueLinks: async (options = {}, timeoutMs = 5000) => {
|
|
253
|
+
// TODO consider using `context.parseWithCheerio` to make this universal and avoid code duplication
|
|
254
|
+
let urls;
|
|
255
|
+
if (options.urls === undefined) {
|
|
256
|
+
const selector = options.selector ?? 'a';
|
|
257
|
+
const locator = playwrightContext.page.locator(selector).first();
|
|
258
|
+
await locator.waitFor({ timeout: timeoutMs, state: 'attached' });
|
|
259
|
+
urls =
|
|
260
|
+
options.urls ??
|
|
261
|
+
(await extractUrlsFromPage(playwrightContext.page, selector, options.baseUrl ?? playwrightContext.request.loadedUrl));
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
urls = options.urls;
|
|
265
|
+
}
|
|
266
|
+
return (await this.enqueueLinks({ ...options, urls }, playwrightContext.request, result));
|
|
267
|
+
},
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
async crawlOne(renderingType, context, useStateFunction) {
|
|
271
|
+
const result = new RequestHandlerResult(serviceLocator.getConfiguration(), AdaptivePlaywrightCrawler.CRAWLEE_STATE_KEY);
|
|
272
|
+
const logs = [];
|
|
273
|
+
const deferredCleanup = [];
|
|
274
|
+
const resultBoundContextHelpers = {
|
|
275
|
+
addRequests: result.addRequests,
|
|
276
|
+
pushData: result.pushData,
|
|
277
|
+
useState: this.allowStorageAccess(useStateFunction),
|
|
278
|
+
getKeyValueStore: this.allowStorageAccess(result.getKeyValueStore),
|
|
279
|
+
log: this.createLogProxy(context.log, logs),
|
|
280
|
+
registerDeferredCleanup: (cleanup) => deferredCleanup.push(cleanup),
|
|
281
|
+
};
|
|
282
|
+
const subCrawlerContext = Object.defineProperties({}, Object.getOwnPropertyDescriptors(context));
|
|
283
|
+
// Mark result-bound helpers as non-configurable so they survive the sub-crawler context pipeline
|
|
284
|
+
// (which would otherwise override them with the sub-crawler's own versions, losing the result binding).
|
|
285
|
+
for (const [key, descriptor] of Object.entries(Object.getOwnPropertyDescriptors(resultBoundContextHelpers))) {
|
|
286
|
+
Object.defineProperty(subCrawlerContext, key, { ...descriptor, configurable: false });
|
|
287
|
+
}
|
|
288
|
+
this.resultObjects.set(subCrawlerContext, result);
|
|
289
|
+
try {
|
|
290
|
+
const callAdaptiveRequestHandler = async () => {
|
|
291
|
+
if (renderingType === 'static') {
|
|
292
|
+
await this.staticContextPipeline.call(subCrawlerContext, this.requestHandler.bind(this));
|
|
293
|
+
}
|
|
294
|
+
else if (renderingType === 'clientOnly') {
|
|
295
|
+
await this.browserContextPipeline.call(subCrawlerContext, this.requestHandler.bind(this));
|
|
296
|
+
}
|
|
297
|
+
};
|
|
298
|
+
await addTimeoutToPromise(async () => withCheckedStorageAccess(() => {
|
|
299
|
+
if (this.preventDirectStorageAccess) {
|
|
300
|
+
throw new Error('Directly accessing storage in a request handler is not allowed in AdaptivePlaywrightCrawler');
|
|
301
|
+
}
|
|
302
|
+
}, callAdaptiveRequestHandler), this.individualRequestHandlerTimeoutMillis, 'Request handler timed out');
|
|
303
|
+
return { result, ok: true, logs };
|
|
304
|
+
}
|
|
305
|
+
catch (error) {
|
|
306
|
+
return { error, ok: false, logs };
|
|
307
|
+
}
|
|
308
|
+
finally {
|
|
309
|
+
await Promise.all(deferredCleanup.map((cleanup) => cleanup()));
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
async runRequestHandler(crawlingContext) {
|
|
127
313
|
const renderingTypePrediction = this.renderingTypePredictor.predict(crawlingContext.request);
|
|
128
314
|
const shouldDetectRenderingType = Math.random() < renderingTypePrediction.detectionProbabilityRecommendation;
|
|
129
315
|
if (!shouldDetectRenderingType) {
|
|
130
316
|
crawlingContext.log.debug(`Predicted rendering type ${renderingTypePrediction.renderingType} for ${crawlingContext.request.url}`);
|
|
131
317
|
}
|
|
132
|
-
if (renderingTypePrediction.renderingType === 'static' && !shouldDetectRenderingType) {
|
|
133
|
-
crawlingContext.log.debug(`Running HTTP-only request handler for ${crawlingContext.request.url}`);
|
|
134
|
-
this.stats.trackHttpOnlyRequestHandlerRun();
|
|
135
|
-
const plainHTTPRun = await this.runRequestHandlerWithPlainHTTP(crawlingContext);
|
|
136
|
-
if (plainHTTPRun.ok && this.resultChecker(plainHTTPRun.result)) {
|
|
137
|
-
crawlingContext.log.debug(`HTTP-only request handler succeeded for ${crawlingContext.request.url}`);
|
|
138
|
-
plainHTTPRun.logs?.forEach(([log, method, ...args]) => log[method](...args));
|
|
139
|
-
await this.commitResult(crawlingContext, plainHTTPRun.result);
|
|
140
|
-
return;
|
|
141
|
-
}
|
|
142
|
-
if (!plainHTTPRun.ok) {
|
|
143
|
-
crawlingContext.log.exception(plainHTTPRun.error, `HTTP-only request handler failed for ${crawlingContext.request.url}`);
|
|
144
|
-
}
|
|
145
|
-
else {
|
|
146
|
-
crawlingContext.log.warning(`HTTP-only request handler returned a suspicious result for ${crawlingContext.request.url}`);
|
|
147
|
-
this.stats.trackRenderingTypeMisprediction();
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
crawlingContext.log.debug(`Running browser request handler for ${crawlingContext.request.url}`);
|
|
151
|
-
this.stats.trackBrowserRequestHandlerRun();
|
|
152
|
-
// Run the request handler in a browser. The copy of the crawler state is kept so that we can perform
|
|
153
|
-
// a rendering type detection if necessary. Without this measure, the HTTP request handler would run
|
|
154
|
-
// under different conditions, which could change its behavior. Changes done to the crawler state by
|
|
155
|
-
// the HTTP request handler will not be committed to the actual storage.
|
|
156
|
-
const { result: browserRun, initialStateCopy } = await this.runRequestHandlerInBrowser(crawlingContext);
|
|
157
|
-
if (!browserRun.ok) {
|
|
158
|
-
throw browserRun.error;
|
|
159
|
-
}
|
|
160
|
-
await this.commitResult(crawlingContext, browserRun.result);
|
|
161
318
|
if (shouldDetectRenderingType) {
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
319
|
+
this.inFlightRenderingTypeDetections += 1;
|
|
320
|
+
}
|
|
321
|
+
try {
|
|
322
|
+
if (renderingTypePrediction.renderingType === 'static' && !shouldDetectRenderingType) {
|
|
323
|
+
crawlingContext.log.debug(`Running HTTP-only request handler for ${crawlingContext.request.url}`);
|
|
324
|
+
this.stats.trackHttpOnlyRequestHandlerRun();
|
|
325
|
+
const plainHTTPRun = await this.crawlOne('static', crawlingContext, crawlingContext.useState);
|
|
326
|
+
if (plainHTTPRun.ok && this.resultChecker(plainHTTPRun.result)) {
|
|
327
|
+
crawlingContext.log.debug(`HTTP-only request handler succeeded for ${crawlingContext.request.url}`);
|
|
328
|
+
plainHTTPRun.logs?.forEach(([log, method, ...args]) => log[method](...args));
|
|
329
|
+
await this.commitResult(crawlingContext, plainHTTPRun.result);
|
|
330
|
+
return;
|
|
331
|
+
}
|
|
332
|
+
// Execution will "fall through" and try running the request handler in a browser
|
|
165
333
|
if (!plainHTTPRun.ok) {
|
|
166
|
-
|
|
334
|
+
const actualError = plainHTTPRun.error instanceof RequestHandlerError
|
|
335
|
+
? plainHTTPRun.error.cause
|
|
336
|
+
: plainHTTPRun.error;
|
|
337
|
+
crawlingContext.log.exception(actualError, `HTTP-only request handler failed for ${crawlingContext.request.url}`);
|
|
338
|
+
}
|
|
339
|
+
else {
|
|
340
|
+
crawlingContext.log.warning(`HTTP-only request handler returned a suspicious result for ${crawlingContext.request.url}`);
|
|
341
|
+
this.stats.trackRenderingTypeMisprediction();
|
|
167
342
|
}
|
|
168
|
-
|
|
169
|
-
|
|
343
|
+
}
|
|
344
|
+
crawlingContext.log.debug(`Running browser request handler for ${crawlingContext.request.url}`);
|
|
345
|
+
this.stats.trackBrowserRequestHandlerRun();
|
|
346
|
+
// Run the request handler in a browser. The copy of the crawler state is kept so that we can perform
|
|
347
|
+
// a rendering type detection if necessary. Without this measure, the HTTP request handler would run
|
|
348
|
+
// under different conditions, which could change its behavior. Changes done to the crawler state by
|
|
349
|
+
// the HTTP request handler will not be committed to the actual storage.
|
|
350
|
+
const stateTracker = {
|
|
351
|
+
stateCopy: null,
|
|
352
|
+
async getLiveState(defaultValue = {}) {
|
|
353
|
+
const state = await crawlingContext.useState(defaultValue);
|
|
354
|
+
if (this.stateCopy === null) {
|
|
355
|
+
this.stateCopy = JSON.parse(JSON.stringify(state));
|
|
356
|
+
}
|
|
357
|
+
return state;
|
|
358
|
+
},
|
|
359
|
+
async getStateCopy(defaultValue = {}) {
|
|
360
|
+
if (this.stateCopy === null) {
|
|
361
|
+
return defaultValue;
|
|
362
|
+
}
|
|
363
|
+
return this.stateCopy;
|
|
364
|
+
},
|
|
365
|
+
};
|
|
366
|
+
const browserRun = await this.crawlOne('clientOnly', crawlingContext, stateTracker.getLiveState.bind(stateTracker));
|
|
367
|
+
if (!browserRun.ok) {
|
|
368
|
+
throw browserRun.error;
|
|
369
|
+
}
|
|
370
|
+
await this.commitResult(crawlingContext, browserRun.result);
|
|
371
|
+
if (shouldDetectRenderingType) {
|
|
372
|
+
crawlingContext.log.debug(`Detecting rendering type for ${crawlingContext.request.url}`);
|
|
373
|
+
const plainHTTPRun = await this.crawlOne('static', crawlingContext, stateTracker.getStateCopy.bind(stateTracker));
|
|
374
|
+
const detectionResult = (() => {
|
|
375
|
+
if (!plainHTTPRun.ok) {
|
|
376
|
+
return 'clientOnly';
|
|
377
|
+
}
|
|
378
|
+
const comparisonResult = this.resultComparator(plainHTTPRun.result, browserRun.result);
|
|
379
|
+
if (comparisonResult === true || comparisonResult === 'equal') {
|
|
380
|
+
return 'static';
|
|
381
|
+
}
|
|
382
|
+
if (comparisonResult === false || comparisonResult === 'different') {
|
|
383
|
+
return 'clientOnly';
|
|
384
|
+
}
|
|
385
|
+
return undefined;
|
|
386
|
+
})();
|
|
387
|
+
crawlingContext.log.debug(`Detected rendering type ${detectionResult} for ${crawlingContext.request.url}`);
|
|
388
|
+
if (detectionResult !== undefined) {
|
|
389
|
+
this.renderingTypePredictor.storeResult(crawlingContext.request, detectionResult);
|
|
170
390
|
}
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
finally {
|
|
394
|
+
if (shouldDetectRenderingType) {
|
|
395
|
+
this.inFlightRenderingTypeDetections -= 1;
|
|
396
|
+
}
|
|
175
397
|
}
|
|
176
398
|
}
|
|
177
399
|
async commitResult(crawlingContext, { calls, keyValueStoreChanges }) {
|
|
178
400
|
await Promise.all([
|
|
179
401
|
...calls.pushData.map(async (params) => crawlingContext.pushData(...params)),
|
|
180
|
-
...calls.enqueueLinks.map(async (params) => await crawlingContext.enqueueLinks(...params)),
|
|
181
402
|
...calls.addRequests.map(async (params) => crawlingContext.addRequests(...params)),
|
|
182
403
|
...Object.entries(keyValueStoreChanges).map(async ([storeIdOrName, changes]) => {
|
|
183
404
|
const store = await crawlingContext.getKeyValueStore(storeIdOrName);
|
|
@@ -188,151 +409,28 @@ export class AdaptivePlaywrightCrawler extends PlaywrightCrawler {
|
|
|
188
409
|
allowStorageAccess(func) {
|
|
189
410
|
return async (...args) => withCheckedStorageAccess(() => { }, async () => func(...args));
|
|
190
411
|
}
|
|
191
|
-
async
|
|
192
|
-
const
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
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
|
-
}
|
|
412
|
+
async enqueueLinks(options, request, result) {
|
|
413
|
+
const baseUrl = resolveBaseUrlForEnqueueLinksFiltering({
|
|
414
|
+
enqueueStrategy: options?.strategy,
|
|
415
|
+
finalRequestUrl: request.loadedUrl,
|
|
416
|
+
originalRequestUrl: request.url,
|
|
417
|
+
userProvidedBaseUrl: options?.baseUrl,
|
|
418
|
+
});
|
|
419
|
+
const addRequestsBatched = async (requests) => {
|
|
420
|
+
await result.addRequests(requests);
|
|
421
|
+
return {
|
|
422
|
+
addedRequests: requests.map(({ uniqueKey, id }) => ({
|
|
423
|
+
uniqueKey,
|
|
424
|
+
requestId: id ?? '',
|
|
425
|
+
wasAlreadyPresent: false,
|
|
426
|
+
wasAlreadyHandled: false,
|
|
427
|
+
})),
|
|
428
|
+
waitForAllRequestsToBeAdded: Promise.resolve([]),
|
|
429
|
+
};
|
|
430
|
+
};
|
|
431
|
+
// We need to use a mock request queue implementation, in order to add the requests into our result object
|
|
432
|
+
const mockRequestQueue = { addRequestsBatched };
|
|
433
|
+
return await this.enqueueLinksWithCrawlDepth({ ...options, baseUrl }, request, mockRequestQueue);
|
|
336
434
|
}
|
|
337
435
|
createLogProxy(log, logs) {
|
|
338
436
|
return new Proxy(log, {
|
|
@@ -346,6 +444,12 @@ export class AdaptivePlaywrightCrawler extends PlaywrightCrawler {
|
|
|
346
444
|
},
|
|
347
445
|
});
|
|
348
446
|
}
|
|
447
|
+
async teardown() {
|
|
448
|
+
await super.teardown();
|
|
449
|
+
for (const hook of this.teardownHooks) {
|
|
450
|
+
await hook();
|
|
451
|
+
}
|
|
452
|
+
}
|
|
349
453
|
}
|
|
350
454
|
export function createAdaptivePlaywrightRouter(routes) {
|
|
351
455
|
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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"}
|