@crawlee/browser 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
@@ -40,7 +40,6 @@ export const Snapshotter = mod.Snapshotter;
40
40
  export const Statistics = mod.Statistics;
41
41
  export const StorageManager = mod.StorageManager;
42
42
  export const SystemStatus = mod.SystemStatus;
43
- export const basicCrawlerEnqueueLinks = mod.basicCrawlerEnqueueLinks;
44
43
  export const browserCrawlerEnqueueLinks = mod.browserCrawlerEnqueueLinks;
45
44
  export const checkAndSerialize = mod.checkAndSerialize;
46
45
  export const chunkBySize = mod.chunkBySize;
@@ -59,11 +58,9 @@ export const handleRequestTimeout = mod.handleRequestTimeout;
59
58
  export const log = mod.log;
60
59
  export const maybeStringify = mod.maybeStringify;
61
60
  export const mergeCookies = mod.mergeCookies;
62
- export const openDataset = mod.openDataset;
63
- export const pushData = mod.pushData;
61
+ export const resolveBaseUrl = mod.resolveBaseUrl;
64
62
  export const serializeArray = mod.serializeArray;
65
63
  export const storage = mod.storage;
66
- export const throwOnBlockedRequest = mod.throwOnBlockedRequest;
67
64
  export const updateEnqueueLinksPatternCache = mod.updateEnqueueLinksPatternCache;
68
65
  export const validateGlobPattern = mod.validateGlobPattern;
69
66
  export const validators = mod.validators;
@@ -3,7 +3,7 @@ import { BasicCrawler, BasicCrawlerOptions } from '@crawlee/basic';
3
3
  import { Awaitable, Dictionary } from '@crawlee/utils';
4
4
  import { BrowserController, BrowserPlugin, BrowserPool, BrowserPoolHooks, BrowserPoolOptions, CommonPage, InferBrowserPluginArray, LaunchContext } from '@crawlee/browser-pool';
5
5
  import { BrowserLaunchContext } from './browser-launcher';
6
- export interface BrowserCrawlingContext<Page extends CommonPage = CommonPage, Response = Dictionary<any>, ProvidedController = BrowserController> extends CrawlingContext {
6
+ export interface BrowserCrawlingContext<Page extends CommonPage = CommonPage, Response = Dictionary, ProvidedController = BrowserController> extends CrawlingContext {
7
7
  browserController: ProvidedController;
8
8
  page: Page;
9
9
  response?: Response;
@@ -17,8 +17,8 @@ export declare type BrowserCrawlerHandleFailedRequest = (inputs: BrowserCrawlerH
17
17
  export declare type BrowserCrawlerHandleRequest<Context extends BrowserCrawlingContext = BrowserCrawlingContext> = (inputs: Context) => Awaitable<void>;
18
18
  export declare type BrowserCrawlerEnqueueLinksOptions = Omit<EnqueueLinksOptions, 'requestQueue' | 'urls'>;
19
19
  export declare type BrowserHook<Context = BrowserCrawlingContext, GoToOptions extends Record<PropertyKey, any> | undefined = Dictionary> = (crawlingContext: Context, gotoOptions: GoToOptions) => Awaitable<void>;
20
- export declare type GotoFunction<Context = BrowserCrawlingContext, GoToOptions extends Record<PropertyKey, any> | undefined = Dictionary> = (context: Context, gotoOptions?: GoToOptions) => Awaitable<any>;
21
- export interface BrowserCrawlerOptions<Context extends BrowserCrawlingContext = BrowserCrawlingContext, GoToOptions extends Record<PropertyKey, any> | undefined = Dictionary, InternalBrowserPoolOptions extends BrowserPoolOptions = BrowserPoolOptions, __BrowserPlugins extends BrowserPlugin[] = InferBrowserPluginArray<InternalBrowserPoolOptions['browserPlugins']>, __BrowserControllerReturn extends BrowserController = ReturnType<__BrowserPlugins[number]['createController']>, __LaunchContextReturn extends LaunchContext = ReturnType<__BrowserPlugins[number]['createLaunchContext']>> extends Omit<BasicCrawlerOptions, 'requestHandler' | 'handleRequestFunction' | 'failedRequestHandler' | 'handleFailedRequestFunction'> {
20
+ export interface BrowserCrawlerOptions<Context extends BrowserCrawlingContext = BrowserCrawlingContext, InternalBrowserPoolOptions extends BrowserPoolOptions = BrowserPoolOptions, __BrowserPlugins extends BrowserPlugin[] = InferBrowserPluginArray<InternalBrowserPoolOptions['browserPlugins']>, __BrowserControllerReturn extends BrowserController = ReturnType<__BrowserPlugins[number]['createController']>, __LaunchContextReturn extends LaunchContext = ReturnType<__BrowserPlugins[number]['createLaunchContext']>> extends Omit<BasicCrawlerOptions, 'requestHandler' | 'handleRequestFunction' | 'failedRequestHandler' | 'handleFailedRequestFunction'> {
21
+ launchContext?: BrowserLaunchContext<any, any>;
22
22
  /**
23
23
  * Function that is called to process each request.
24
24
  * It is passed an object with the following fields:
@@ -101,10 +101,6 @@ export interface BrowserCrawlerOptions<Context extends BrowserCrawlingContext =
101
101
  * @deprecated `handlePageFunction` has been renamed to `requestHandler` and will be removed in a future version.
102
102
  */
103
103
  handlePageFunction?: BrowserCrawlerHandleRequest<Context>;
104
- /**
105
- * Navigation function for corresponding library. `page.goto(url)` is supported by both `playwright` and `puppeteer`.
106
- */
107
- gotoFunction?: GotoFunction<Context, GoToOptions>;
108
104
  /**
109
105
  * A function to handle requests that failed more than `option.maxRequestRetries` times.
110
106
  *
@@ -194,10 +190,6 @@ export interface BrowserCrawlerOptions<Context extends BrowserCrawlingContext =
194
190
  * Timeout in which page navigation needs to finish, in seconds.
195
191
  */
196
192
  navigationTimeoutSecs?: number;
197
- /**
198
- * @deprecated Use `navigationTimeoutSecs` instead
199
- */
200
- gotoTimeoutSecs?: number;
201
193
  /**
202
194
  * If cookies should be persisted between sessions.
203
195
  * This can only be used when `useSessionPool` is set to `true`.
@@ -256,18 +248,15 @@ export declare abstract class BrowserCrawler<InternalBrowserPoolOptions extends
256
248
  launchContext?: BrowserLaunchContext<LaunchOptions, unknown>;
257
249
  protected userProvidedRequestHandler: BrowserCrawlerHandleRequest<Context>;
258
250
  protected navigationTimeoutMillis: number;
259
- protected gotoFunction?: GotoFunction<Context, GoToOptions>;
260
- protected defaultGotoOptions: GoToOptions;
261
251
  protected preNavigationHooks: BrowserHook<Context>[];
262
252
  protected postNavigationHooks: BrowserHook<Context>[];
263
253
  protected persistCookiesPerSession: boolean;
264
254
  protected static optionsShape: {
265
255
  handlePageFunction: import("ow").Predicate<Function> & import("ow").BasePredicate<Function | undefined>;
266
- gotoFunction: import("ow").Predicate<Function> & import("ow").BasePredicate<Function | undefined>;
267
- gotoTimeoutSecs: import("ow").NumberPredicate & import("ow").BasePredicate<number | undefined>;
268
256
  navigationTimeoutSecs: import("ow").NumberPredicate & import("ow").BasePredicate<number | undefined>;
269
257
  preNavigationHooks: import("ow").ArrayPredicate<unknown> & import("ow").BasePredicate<unknown[] | undefined>;
270
258
  postNavigationHooks: import("ow").ArrayPredicate<unknown> & import("ow").BasePredicate<unknown[] | undefined>;
259
+ launchContext: import("ow").ObjectPredicate<object> & import("ow").BasePredicate<object | undefined>;
271
260
  browserPoolOptions: import("ow").ObjectPredicate<object>;
272
261
  sessionPoolOptions: import("ow").ObjectPredicate<object> & import("ow").BasePredicate<object | undefined>;
273
262
  persistCookiesPerSession: import("ow").BooleanPredicate & import("ow").BasePredicate<boolean | undefined>;
@@ -291,18 +280,19 @@ export declare abstract class BrowserCrawler<InternalBrowserPoolOptions extends
291
280
  /**
292
281
  * All `BrowserCrawler` parameters are passed via an options object.
293
282
  */
294
- protected constructor(options: BrowserCrawlerOptions<Context, GoToOptions>);
283
+ protected constructor(options: BrowserCrawlerOptions<Context>);
295
284
  /**
296
285
  * Wrapper around handlePageFunction that opens and closes pages etc.
297
286
  */
298
287
  protected _runRequestHandler(crawlingContext: Context): Promise<void>;
299
288
  protected _enhanceCrawlingContextWithPageInfo(crawlingContext: Context, page: CommonPage, useIncognitoPages?: boolean): void;
300
289
  protected _handleNavigation(crawlingContext: Context): Promise<void>;
290
+ protected _applyCookies({ session, request, page, browserController }: Context, preHooksCookies: string, postHooksCookies: string): Promise<void>;
301
291
  /**
302
292
  * Marks session bad in case of navigation timeout.
303
293
  */
304
294
  protected _handleNavigationTimeout(crawlingContext: Context, error: Error): void;
305
- protected _navigationHandler(crawlingContext: Context, gotoOptions: GoToOptions): Promise<any>;
295
+ protected abstract _navigationHandler(crawlingContext: Context, gotoOptions: GoToOptions): Promise<Context['response'] | null | undefined>;
306
296
  /**
307
297
  * Should be overridden in case of different automation library that does not support this response API.
308
298
  * @todo: This can be also done as a postNavigation hook except the loadedUrl marking.
@@ -320,10 +310,11 @@ export declare abstract class BrowserCrawler<InternalBrowserPoolOptions extends
320
310
  interface EnqueueLinksInternalOptions {
321
311
  options?: BrowserCrawlerEnqueueLinksOptions;
322
312
  page: CommonPage;
323
- requestQueue?: RequestQueue;
324
- defaultBaseUrl?: string;
313
+ requestQueue: RequestQueue;
314
+ originalRequestUrl: string;
315
+ finalRequestUrl?: string;
325
316
  }
326
317
  /** @internal */
327
- export declare function browserCrawlerEnqueueLinks({ options, page, requestQueue, defaultBaseUrl }: EnqueueLinksInternalOptions): Promise<storage.BatchAddRequestsResult>;
318
+ export declare function browserCrawlerEnqueueLinks({ options, page, requestQueue, originalRequestUrl, finalRequestUrl, }: EnqueueLinksInternalOptions): Promise<storage.BatchAddRequestsResult>;
328
319
  export {};
329
320
  //# sourceMappingURL=browser-crawler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-crawler.d.ts","sourceRoot":"","sources":["../../src/internals/browser-crawler.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,7 @@ const core_1 = require("@crawlee/core");
7
7
  const basic_1 = require("@crawlee/basic");
8
8
  const browser_pool_1 = require("@crawlee/browser-pool");
9
9
  const ow_1 = tslib_1.__importDefault(require("ow"));
10
+ const tough_cookie_1 = require("tough-cookie");
10
11
  /**
11
12
  * Provides a simple framework for parallel crawling of web pages
12
13
  * using headless browsers with [Puppeteer](https://github.com/puppeteer/puppeteer)
@@ -50,9 +51,7 @@ class BrowserCrawler extends basic_1.BasicCrawler {
50
51
  */
51
52
  constructor(options) {
52
53
  (0, ow_1.default)(options, 'BrowserCrawlerOptions', ow_1.default.object.exactShape(BrowserCrawler.optionsShape));
53
- const { navigationTimeoutSecs = 60, requestHandlerTimeoutSecs = 60, gotoFunction, // deprecated
54
- gotoTimeoutSecs, // deprecated
55
- persistCookiesPerSession, proxyConfiguration, browserPoolOptions, preNavigationHooks = [], postNavigationHooks = [],
54
+ const { navigationTimeoutSecs = 60, requestHandlerTimeoutSecs = 60, persistCookiesPerSession, proxyConfiguration, launchContext, browserPoolOptions, preNavigationHooks = [], postNavigationHooks = [],
56
55
  // Ignored
57
56
  handleRequestFunction, requestHandler: userProvidedRequestHandler, handlePageFunction, failedRequestHandler, handleFailedRequestFunction, ...basicCrawlerOptions } = options;
58
57
  super({
@@ -99,18 +98,6 @@ class BrowserCrawler extends basic_1.BasicCrawler {
99
98
  writable: true,
100
99
  value: void 0
101
100
  });
102
- Object.defineProperty(this, "gotoFunction", {
103
- enumerable: true,
104
- configurable: true,
105
- writable: true,
106
- value: void 0
107
- });
108
- Object.defineProperty(this, "defaultGotoOptions", {
109
- enumerable: true,
110
- configurable: true,
111
- writable: true,
112
- value: void 0
113
- });
114
101
  Object.defineProperty(this, "preNavigationHooks", {
115
102
  enumerable: true,
116
103
  configurable: true,
@@ -148,14 +135,8 @@ class BrowserCrawler extends basic_1.BasicCrawler {
148
135
  if (!this.useSessionPool && persistCookiesPerSession) {
149
136
  throw new Error('You cannot use "persistCookiesPerSession" without "useSessionPool" set to true.');
150
137
  }
151
- if (gotoTimeoutSecs) {
152
- this.log.deprecated('Option "gotoTimeoutSecs" is deprecated. Use "navigationTimeoutSecs" instead.');
153
- }
154
- this.navigationTimeoutMillis = (gotoTimeoutSecs || navigationTimeoutSecs) * 1000;
155
- this.gotoFunction = gotoFunction;
156
- this.defaultGotoOptions = {
157
- timeout: this.navigationTimeoutMillis,
158
- };
138
+ this.launchContext = launchContext;
139
+ this.navigationTimeoutMillis = navigationTimeoutSecs * 1000;
159
140
  this.proxyConfiguration = proxyConfiguration;
160
141
  this.preNavigationHooks = preNavigationHooks;
161
142
  this.postNavigationHooks = postNavigationHooks;
@@ -165,6 +146,10 @@ class BrowserCrawler extends basic_1.BasicCrawler {
165
146
  else {
166
147
  this.persistCookiesPerSession = false;
167
148
  }
149
+ if (launchContext?.userAgent) {
150
+ browserPoolOptions.useFingerprints = false;
151
+ this.log.info('Disabling automatic fingerprint injection because custom user agent has been provided.');
152
+ }
168
153
  const { preLaunchHooks = [], postLaunchHooks = [], ...rest } = browserPoolOptions;
169
154
  this.browserPool = new browser_pool_1.BrowserPool({
170
155
  ...rest,
@@ -188,7 +173,7 @@ class BrowserCrawler extends basic_1.BasicCrawler {
188
173
  const useIncognitoPages = this.launchContext?.useIncognitoPages;
189
174
  if (this.proxyConfiguration && useIncognitoPages) {
190
175
  const { session } = crawlingContext;
191
- const proxyInfo = this.proxyConfiguration.newProxyInfo(session?.id);
176
+ const proxyInfo = await this.proxyConfiguration.newProxyInfo(session?.id);
192
177
  crawlingContext.proxyInfo = proxyInfo;
193
178
  newPageOptions.proxyUrl = proxyInfo.url;
194
179
  if (this.proxyConfiguration.isManInTheMiddle) {
@@ -209,24 +194,19 @@ class BrowserCrawler extends basic_1.BasicCrawler {
209
194
  // For example, `sessionPoolOptions.sessionOptions.maxUsageCount` can be `1`.
210
195
  // So we must not save the session prior to making sure it was used only once, otherwise we would use it twice.
211
196
  const { request, session } = crawlingContext;
212
- if (this.useSessionPool) {
213
- const sessionCookies = session.getPuppeteerCookies(request.url);
214
- if (sessionCookies.length) {
215
- await crawlingContext.browserController.setCookies(page, sessionCookies);
216
- (0, timeout_1.tryCancel)();
217
- }
218
- }
219
197
  try {
220
- await this._handleNavigation(crawlingContext);
221
- (0, timeout_1.tryCancel)();
222
- await this._responseHandler(crawlingContext);
223
- (0, timeout_1.tryCancel)();
224
- // save cookies
225
- // TODO: Should we save the cookies also after/only the handle page?
226
- if (this.persistCookiesPerSession) {
227
- const cookies = await crawlingContext.browserController.getCookies(page);
198
+ if (!request.skipNavigation) {
199
+ await this._handleNavigation(crawlingContext);
228
200
  (0, timeout_1.tryCancel)();
229
- session?.setPuppeteerCookies(cookies, request.loadedUrl);
201
+ await this._responseHandler(crawlingContext);
202
+ (0, timeout_1.tryCancel)();
203
+ // save cookies
204
+ // TODO: Should we save the cookies also after/only the handle page?
205
+ if (this.persistCookiesPerSession) {
206
+ const cookies = await crawlingContext.browserController.getCookies(page);
207
+ (0, timeout_1.tryCancel)();
208
+ session?.setPuppeteerCookies(cookies, request.loadedUrl);
209
+ }
230
210
  }
231
211
  await (0, timeout_1.addTimeoutToPromise)(() => Promise.resolve(this.userProvidedRequestHandler(crawlingContext)), this.requestHandlerTimeoutMillis, `requestHandler timed out after ${this.requestHandlerTimeoutMillis / 1000} seconds.`);
232
212
  (0, timeout_1.tryCancel)();
@@ -256,16 +236,20 @@ class BrowserCrawler extends basic_1.BasicCrawler {
256
236
  options: enqueueOptions,
257
237
  page,
258
238
  requestQueue: await this.getRequestQueue(),
259
- defaultBaseUrl: new URL(crawlingContext.request.loadedUrl ?? crawlingContext.request.url).origin,
239
+ originalRequestUrl: new URL(crawlingContext.request.url).origin,
240
+ finalRequestUrl: new URL(crawlingContext.request.loadedUrl ?? crawlingContext.request.url).origin,
260
241
  });
261
242
  };
262
243
  }
263
244
  async _handleNavigation(crawlingContext) {
264
- const gotoOptions = { ...this.defaultGotoOptions };
245
+ const gotoOptions = { timeout: this.navigationTimeoutMillis };
246
+ const preNavigationHooksCookies = this._getCookieHeaderFromRequest(crawlingContext.request);
265
247
  await this._executeHooks(this.preNavigationHooks, crawlingContext, gotoOptions);
266
248
  (0, timeout_1.tryCancel)();
249
+ const postNavigationHooksCookies = this._getCookieHeaderFromRequest(crawlingContext.request);
250
+ await this._applyCookies(crawlingContext, preNavigationHooksCookies, postNavigationHooksCookies);
267
251
  try {
268
- crawlingContext.response = await this._navigationHandler(crawlingContext, gotoOptions);
252
+ crawlingContext.response = await this._navigationHandler(crawlingContext, gotoOptions) ?? undefined;
269
253
  }
270
254
  catch (error) {
271
255
  this._handleNavigationTimeout(crawlingContext, error);
@@ -274,6 +258,16 @@ class BrowserCrawler extends basic_1.BasicCrawler {
274
258
  (0, timeout_1.tryCancel)();
275
259
  await this._executeHooks(this.postNavigationHooks, crawlingContext, gotoOptions);
276
260
  }
261
+ async _applyCookies({ session, request, page, browserController }, preHooksCookies, postHooksCookies) {
262
+ const sessionCookie = session?.getPuppeteerCookies(request.url) ?? [];
263
+ const parsedPreHooksCookies = preHooksCookies.split(/ *; */).map((c) => tough_cookie_1.Cookie.parse(c)?.toJSON());
264
+ const parsedPostHooksCookies = postHooksCookies.split(/ *; */).map((c) => tough_cookie_1.Cookie.parse(c)?.toJSON());
265
+ await browserController.setCookies(page, [
266
+ ...sessionCookie,
267
+ ...parsedPreHooksCookies,
268
+ ...parsedPostHooksCookies,
269
+ ].filter((c) => typeof c !== 'undefined'));
270
+ }
277
271
  /**
278
272
  * Marks session bad in case of navigation timeout.
279
273
  */
@@ -283,14 +277,6 @@ class BrowserCrawler extends basic_1.BasicCrawler {
283
277
  (0, core_1.handleRequestTimeout)({ session, errorMessage: error.message });
284
278
  }
285
279
  }
286
- async _navigationHandler(crawlingContext, gotoOptions) {
287
- if (!this.gotoFunction) {
288
- // @TODO: although it is optional in the validation,
289
- // because when you make automation library specific you can override this handler.
290
- throw new Error('BrowserCrawler: You must specify a gotoFunction!');
291
- }
292
- return this.gotoFunction(crawlingContext, gotoOptions);
293
- }
294
280
  /**
295
281
  * Should be overridden in case of different automation library that does not support this response API.
296
282
  * @todo: This can be also done as a postNavigation hook except the loadedUrl marking.
@@ -299,7 +285,7 @@ class BrowserCrawler extends basic_1.BasicCrawler {
299
285
  const { response, session, request, page } = crawlingContext;
300
286
  if (this.sessionPool && response && session) {
301
287
  if (typeof response === 'object' && typeof response.status === 'function') {
302
- (0, core_1.throwOnBlockedRequest)(session, response.status());
288
+ this._throwOnBlockedRequest(session, response.status());
303
289
  }
304
290
  else {
305
291
  this.log.debug('Got a malformed Browser response.', { request, response });
@@ -313,7 +299,7 @@ class BrowserCrawler extends basic_1.BasicCrawler {
313
299
  launchContextExtends.session = await this.sessionPool.getSession();
314
300
  }
315
301
  if (this.proxyConfiguration) {
316
- const proxyInfo = this.proxyConfiguration.newProxyInfo(launchContextExtends.session && launchContextExtends.session.id);
302
+ const proxyInfo = await this.proxyConfiguration.newProxyInfo(launchContextExtends.session?.id);
317
303
  launchContext.proxyUrl = proxyInfo.url;
318
304
  launchContextExtends.proxyInfo = proxyInfo;
319
305
  // Disable SSL verification for MITM proxies
@@ -358,11 +344,10 @@ Object.defineProperty(BrowserCrawler, "optionsShape", {
358
344
  value: {
359
345
  ...basic_1.BasicCrawler.optionsShape,
360
346
  handlePageFunction: ow_1.default.optional.function,
361
- gotoFunction: ow_1.default.optional.function,
362
- gotoTimeoutSecs: ow_1.default.optional.number.greaterThan(0),
363
347
  navigationTimeoutSecs: ow_1.default.optional.number.greaterThan(0),
364
348
  preNavigationHooks: ow_1.default.optional.array,
365
349
  postNavigationHooks: ow_1.default.optional.array,
350
+ launchContext: ow_1.default.optional.object,
366
351
  browserPoolOptions: ow_1.default.object,
367
352
  sessionPoolOptions: ow_1.default.optional.object,
368
353
  persistCookiesPerSession: ow_1.default.optional.boolean,
@@ -371,12 +356,16 @@ Object.defineProperty(BrowserCrawler, "optionsShape", {
371
356
  }
372
357
  });
373
358
  /** @internal */
374
- async function browserCrawlerEnqueueLinks({ options, page, requestQueue, defaultBaseUrl }) {
375
- const baseUrl = options?.baseUrl ?? defaultBaseUrl;
359
+ async function browserCrawlerEnqueueLinks({ options, page, requestQueue, originalRequestUrl, finalRequestUrl, }) {
360
+ const baseUrl = (0, core_1.resolveBaseUrl)({
361
+ enqueueStrategy: options?.strategy,
362
+ finalRequestUrl,
363
+ originalRequestUrl,
364
+ userProvidedBaseUrl: options?.baseUrl,
365
+ });
376
366
  const urls = await extractUrlsFromPage(page, options?.selector ?? 'a', baseUrl);
377
367
  return (0, core_1.enqueueLinks)({
378
- // FIXME this does not make much sense, as the instance would be ignored by any crawler - the argument needs to be required
379
- requestQueue: requestQueue ?? await core_1.RequestQueue.open(),
368
+ requestQueue,
380
369
  urls,
381
370
  baseUrl,
382
371
  ...options,
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-crawler.js","sourceRoot":"","sources":["../../src/internals/browser-crawler.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,13 @@
1
1
  import { Dictionary, Constructor } from '@crawlee/utils';
2
2
  import { BrowserPlugin, BrowserPluginOptions } from '@crawlee/browser-pool';
3
3
  export interface BrowserLaunchContext<TOptions, Launcher> extends BrowserPluginOptions<TOptions> {
4
+ /**
5
+ * URL to a HTTP proxy server. It must define the port number,
6
+ * and it may also contain proxy username and password.
7
+ *
8
+ * Example: `http://bob:pass123@proxy.example.com:1234`.
9
+ */
10
+ proxyUrl?: string;
4
11
  /**
5
12
  * If `true` and `executablePath` is not set,
6
13
  * the launcher will launch full Google Chrome browser available on the machine
@@ -11,6 +18,24 @@ export interface BrowserLaunchContext<TOptions, Launcher> extends BrowserPluginO
11
18
  * @default false
12
19
  */
13
20
  useChrome?: boolean;
21
+ /**
22
+ * With this option selected, all pages will be opened in a new incognito browser context.
23
+ * This means they will not share cookies nor cache and their resources will not be throttled by one another.
24
+ * @default false
25
+ */
26
+ useIncognitoPages?: boolean;
27
+ /**
28
+ * Sets the [User Data Directory](https://chromium.googlesource.com/chromium/src/+/master/docs/user_data_dir.md) path.
29
+ * The user data directory contains profile data such as history, bookmarks, and cookies, as well as other per-installation local state.
30
+ * If not specified, a temporary directory is used instead.
31
+ */
32
+ userDataDir?: string;
33
+ /**
34
+ * The `User-Agent` HTTP header used by the browser.
35
+ * If not provided, the function sets `User-Agent` to a reasonable default
36
+ * to reduce the chance of detection of the crawler.
37
+ */
38
+ userAgent?: string;
14
39
  launcher?: Launcher;
15
40
  }
16
41
  /**
@@ -31,6 +56,7 @@ export declare abstract class BrowserLauncher<Plugin extends BrowserPlugin, Laun
31
56
  useIncognitoPages: import("ow").BooleanPredicate & import("ow").BasePredicate<boolean | undefined>;
32
57
  userDataDir: import("ow").StringPredicate & import("ow").BasePredicate<string | undefined>;
33
58
  launchOptions: import("ow").ObjectPredicate<object> & import("ow").BasePredicate<object | undefined>;
59
+ userAgent: import("ow").StringPredicate & import("ow").BasePredicate<string | undefined>;
34
60
  };
35
61
  static requireLauncherOrThrow<T>(launcher: string, apifyImageName: string): T;
36
62
  /**
@@ -46,9 +72,7 @@ export declare abstract class BrowserLauncher<Plugin extends BrowserPlugin, Laun
46
72
  * @returns Browser instance.
47
73
  */
48
74
  launch(): LaunchResult;
49
- createLaunchOptions(): {
50
- args?: string[];
51
- } & Dictionary;
75
+ createLaunchOptions(): Dictionary;
52
76
  protected _getDefaultHeadlessOption(): boolean;
53
77
  protected _getChromeExecutablePath(): string;
54
78
  /**
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-launcher.d.ts","sourceRoot":"","sources":["../../src/internals/browser-launcher.ts"],"names":[],"mappings":"AAIA,OAAO,EACH,UAAU,EACV,WAAW,EACd,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACH,aAAa,EACb,oBAAoB,EACvB,MAAM,uBAAuB,CAAC;AAO/B,MAAM,WAAW,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,CAAE,SAAQ,oBAAoB,CAAC,QAAQ,CAAC;IAC5F;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;;MAIE;IACF,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B;;;;MAIE;IACF,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACvB;AAED;;;GAGG;AACH,8BAAsB,eAAe,CACjC,MAAM,SAAS,aAAa,EAC5B,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,EAC5B,CAAC,SAAS,WAAW,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,EACnD,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACxD,YAAY,SAAS,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAEhF,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,UAAU,CAAC;IAC1B,uBAAuB,EAAE,UAAU,CAAC;IAEpC,MAAM,EAAG,CAAC,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,SAAS,CAAC,MAAM,CAAC,YAAY;;;;;;;MAO3B;IAEF,MAAM,CAAC,sBAAsB,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,CAAC;IAkB7E;;OAEG;gBACS,aAAa,EAAE,oBAAoB,CAAC,aAAa,EAAE,QAAQ,CAAC;IAqBxE;;OAEG;IACH,mBAAmB,IAAI,MAAM;IAQ7B;;;OAGG;IACH,MAAM,IAAI,YAAY;IAOtB,mBAAmB,IAAI,UAAU;IA2BjC,SAAS,CAAC,yBAAyB,IAAI,OAAO;IAI9C,SAAS,CAAC,wBAAwB,IAAI,MAAM;IAI5C;;OAEG;IACH,SAAS,CAAC,+BAA+B,IAAI,MAAM;IA8BnD,SAAS,CAAC,yBAAyB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;CAe/D"}
@@ -6,6 +6,10 @@ const os_1 = tslib_1.__importDefault(require("os"));
6
6
  const fs_1 = tslib_1.__importDefault(require("fs"));
7
7
  const ow_1 = tslib_1.__importDefault(require("ow"));
8
8
  const consts_1 = require("@apify/consts");
9
+ const DEFAULT_VIEWPORT = {
10
+ width: 1366,
11
+ height: 768,
12
+ };
9
13
  /**
10
14
  * Abstract class for creating browser launchers, such as `PlaywrightLauncher` and `PuppeteerLauncher`.
11
15
  * @ignore
@@ -58,12 +62,13 @@ class BrowserLauncher {
58
62
  writable: true,
59
63
  value: void 0
60
64
  });
61
- const { launcher, proxyUrl, useChrome, launchOptions = {}, ...otherLaunchContextProps } = launchContext;
65
+ const { launcher, proxyUrl, useChrome, userAgent, launchOptions = {}, ...otherLaunchContextProps } = launchContext;
62
66
  this._validateProxyUrlProtocol(proxyUrl);
63
67
  // those need to be reassigned otherwise they are {} in types
64
68
  this.launcher = launcher;
65
69
  this.proxyUrl = proxyUrl;
66
70
  this.useChrome = useChrome;
71
+ this.userAgent = userAgent;
67
72
  this.launchOptions = launchOptions;
68
73
  this.otherLaunchContextProps = otherLaunchContextProps;
69
74
  }
@@ -76,16 +81,10 @@ class BrowserLauncher {
76
81
  if (e.code === 'MODULE_NOT_FOUND') {
77
82
  const msg = `Cannot find module '${launcher}'. Did you you install the '${launcher}' package?\n`
78
83
  + `Make sure you have '${launcher}' in your package.json dependencies and in your package-lock.json, if you use it.`;
79
- try {
80
- // eslint-disable-next-line global-require, @typescript-eslint/no-var-requires
81
- const apify = require('apify');
82
- // TODO: this might be doable better to know if its used on apify or not...
83
- if (apify.isAtHome()) {
84
- e.message = `${msg}\nOn the Apify platform, '${launcher}' can only be used with the ${apifyImageName} Docker image.`;
85
- }
86
- // eslint-disable-next-line no-empty
84
+ // TODO we should not depend on apify env vars here ideally
85
+ if (process.env.APIFY_IS_AT_HOME) {
86
+ e.message = `${msg}\nOn the Apify platform, '${launcher}' can only be used with the ${apifyImageName} Docker image.`;
87
87
  }
88
- catch { }
89
88
  }
90
89
  throw err;
91
90
  }
@@ -111,8 +110,17 @@ class BrowserLauncher {
111
110
  }
112
111
  createLaunchOptions() {
113
112
  const launchOptions = {
113
+ args: [],
114
+ defaultViewport: DEFAULT_VIEWPORT,
114
115
  ...this.launchOptions,
115
116
  };
117
+ // TODO is this needed? should be controlled via public options preferably
118
+ if (process.env.APIFY_IS_AT_HOME) {
119
+ launchOptions.args.push('--no-sandbox');
120
+ }
121
+ if (this.userAgent) {
122
+ launchOptions.args.push(`--user-agent=${this.userAgent}`);
123
+ }
116
124
  if (launchOptions.headless == null) {
117
125
  launchOptions.headless = this._getDefaultHeadlessOption();
118
126
  }
@@ -184,6 +192,7 @@ Object.defineProperty(BrowserLauncher, "optionsShape", {
184
192
  useIncognitoPages: ow_1.default.optional.boolean,
185
193
  userDataDir: ow_1.default.optional.string,
186
194
  launchOptions: ow_1.default.optional.object,
195
+ userAgent: ow_1.default.optional.string,
187
196
  }
188
197
  });
189
198
  //# sourceMappingURL=browser-launcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-launcher.js","sourceRoot":"","sources":["../../src/internals/browser-launcher.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "@crawlee/browser",
3
- "version": "3.0.0-alpha.3",
3
+ "version": "3.0.0-alpha.30",
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"
7
7
  },
8
- "types": "dist/index.d.ts",
8
+ "types": "index.d.ts",
9
9
  "exports": {
10
10
  ".": {
11
- "import": "./dist/index.mjs",
12
- "require": "./dist/index.js"
11
+ "import": "./index.mjs",
12
+ "require": "./index.js"
13
13
  }
14
14
  },
15
15
  "keywords": [
@@ -39,20 +39,17 @@
39
39
  "url": "https://github.com/apify/apify-js/issues"
40
40
  },
41
41
  "homepage": "https://sdk.apify.com/",
42
- "files": [
43
- "dist"
44
- ],
45
42
  "scripts": {
46
43
  "build": "npm run clean && npm run compile && npm run copy",
47
44
  "clean": "rimraf ./dist",
48
- "compile": "tsc -p tsconfig.build.json && gen-esm-wrapper ./dist/index.js ./dist/index.mjs",
45
+ "compile": "tsc -p tsconfig.build.json && gen-esm-wrapper ./index.js ./index.mjs",
49
46
  "copy": "ts-node -T ../../scripts/copy.ts"
50
47
  },
51
48
  "publishConfig": {
52
49
  "access": "public"
53
50
  },
54
51
  "dependencies": {
55
- "@crawlee/basic": "^3.0.0-alpha.3"
56
- },
57
- "gitHead": "548b65585f29cd3c662acddbb30abfb79d0579e6"
52
+ "@crawlee/basic": "^3.0.0-alpha.30",
53
+ "tough-cookie": "^4.0.0"
54
+ }
58
55
  }