@crawlee/puppeteer 4.0.0-beta.7 → 4.0.0-beta.70
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 +17 -13
- package/internals/enqueue-links/click-elements.d.ts +32 -13
- package/internals/enqueue-links/click-elements.d.ts.map +1 -1
- package/internals/enqueue-links/click-elements.js +46 -20
- package/internals/enqueue-links/click-elements.js.map +1 -1
- package/internals/puppeteer-crawler.d.ts +74 -42
- package/internals/puppeteer-crawler.d.ts.map +1 -1
- package/internals/puppeteer-crawler.js +58 -19
- package/internals/puppeteer-crawler.js.map +1 -1
- package/internals/puppeteer-launcher.d.ts +2 -0
- package/internals/puppeteer-launcher.d.ts.map +1 -1
- package/internals/utils/puppeteer_request_interception.d.ts.map +1 -1
- package/internals/utils/puppeteer_request_interception.js +2 -2
- package/internals/utils/puppeteer_request_interception.js.map +1 -1
- package/internals/utils/puppeteer_utils.d.ts +10 -27
- package/internals/utils/puppeteer_utils.d.ts.map +1 -1
- package/internals/utils/puppeteer_utils.js +51 -52
- package/internals/utils/puppeteer_utils.js.map +1 -1
- package/package.json +13 -9
- package/tsconfig.build.tsbuildinfo +0 -1
package/README.md
CHANGED
|
@@ -1,19 +1,23 @@
|
|
|
1
1
|
<h1 align="center">
|
|
2
2
|
<a href="https://crawlee.dev">
|
|
3
3
|
<picture>
|
|
4
|
-
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/apify/crawlee/master/website/static/img/crawlee-dark.svg?sanitize=true"
|
|
5
|
-
<img alt="Crawlee" src="https://raw.githubusercontent.com/apify/crawlee/master/website/static/img/crawlee-light.svg?sanitize=true" width="500"
|
|
4
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/apify/crawlee/master/website/static/img/crawlee-dark.svg?sanitize=true" />
|
|
5
|
+
<img alt="Crawlee" src="https://raw.githubusercontent.com/apify/crawlee/master/website/static/img/crawlee-light.svg?sanitize=true" width="500" />
|
|
6
6
|
</picture>
|
|
7
7
|
</a>
|
|
8
|
-
<br
|
|
8
|
+
<br />
|
|
9
9
|
<small>A web scraping and browser automation library</small>
|
|
10
10
|
</h1>
|
|
11
11
|
|
|
12
|
-
<p align=center>
|
|
13
|
-
<a href="https://
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
12
|
+
<p align="center">
|
|
13
|
+
<a href="https://trendshift.io/repositories/5179" target="_blank"><img src="https://trendshift.io/api/badge/repositories/5179" alt="apify%2Fcrawlee | Trendshift" width="250" height="55"/></a>
|
|
14
|
+
</p>
|
|
15
|
+
|
|
16
|
+
<p align="center">
|
|
17
|
+
<a href="https://www.npmjs.com/package/@crawlee/core" rel="nofollow"><img src="https://img.shields.io/npm/v/@crawlee/core.svg" alt="NPM latest version" data-canonical-src="https://img.shields.io/npm/v/@crawlee/core/next.svg" /></a>
|
|
18
|
+
<a href="https://www.npmjs.com/package/@crawlee/core" rel="nofollow"><img src="https://img.shields.io/npm/dm/@crawlee/core.svg" alt="Downloads" data-canonical-src="https://img.shields.io/npm/dm/@crawlee/core.svg" /></a>
|
|
19
|
+
<a href="https://discord.gg/jyEM2PRvMU" rel="nofollow"><img src="https://img.shields.io/discord/801163717915574323?label=discord" alt="Chat on discord" data-canonical-src="https://img.shields.io/discord/801163717915574323?label=discord" /></a>
|
|
20
|
+
<a href="https://github.com/apify/crawlee/actions/workflows/test-ci.yml"><img src="https://github.com/apify/crawlee/actions/workflows/test-ci.yml/badge.svg?branch=master" alt="Build Status" /></a>
|
|
17
21
|
</p>
|
|
18
22
|
|
|
19
23
|
Crawlee covers your crawling and scraping end-to-end and **helps you build reliable scrapers. Fast.**
|
|
@@ -24,7 +28,7 @@ Crawlee is available as the [`crawlee`](https://www.npmjs.com/package/crawlee) N
|
|
|
24
28
|
|
|
25
29
|
> 👉 **View full documentation, guides and examples on the [Crawlee project website](https://crawlee.dev)** 👈
|
|
26
30
|
|
|
27
|
-
>
|
|
31
|
+
> Do you prefer 🐍 Python instead of JavaScript? [👉 Checkout Crawlee for Python 👈](https://github.com/apify/crawlee-python).
|
|
28
32
|
|
|
29
33
|
## Installation
|
|
30
34
|
|
|
@@ -85,7 +89,7 @@ By default, Crawlee stores data to `./storage` in the current working directory.
|
|
|
85
89
|
We provide automated beta builds for every merged code change in Crawlee. You can find them in the npm [list of releases](https://www.npmjs.com/package/crawlee?activeTab=versions). If you want to test new features or bug fixes before we release them, feel free to install a beta build like this:
|
|
86
90
|
|
|
87
91
|
```bash
|
|
88
|
-
npm install crawlee@
|
|
92
|
+
npm install crawlee@next
|
|
89
93
|
```
|
|
90
94
|
|
|
91
95
|
If you also use the [Apify SDK](https://github.com/apify/apify-sdk-js), you need to specify dependency overrides in your `package.json` file so that you don't end up with multiple versions of Crawlee installed:
|
|
@@ -94,9 +98,9 @@ If you also use the [Apify SDK](https://github.com/apify/apify-sdk-js), you need
|
|
|
94
98
|
{
|
|
95
99
|
"overrides": {
|
|
96
100
|
"apify": {
|
|
97
|
-
"@crawlee/core": "
|
|
98
|
-
"@crawlee/types": "
|
|
99
|
-
"@crawlee/utils": "
|
|
101
|
+
"@crawlee/core": "$crawlee",
|
|
102
|
+
"@crawlee/types": "$crawlee",
|
|
103
|
+
"@crawlee/utils": "$crawlee"
|
|
100
104
|
}
|
|
101
105
|
}
|
|
102
106
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { GlobInput, PseudoUrlInput, RegExpInput,
|
|
1
|
+
import type { GlobInput, IRequestManager, PseudoUrlInput, RegExpInput, RequestTransform, SkippedRequestCallback } from '@crawlee/browser';
|
|
2
2
|
import type { BatchAddRequestsResult, Dictionary } from '@crawlee/types';
|
|
3
3
|
// @ts-ignore optional peer dependency or compatibility with es2022
|
|
4
4
|
import type { ClickOptions, Page, Target } from 'puppeteer';
|
|
@@ -8,9 +8,9 @@ export interface EnqueueLinksByClickingElementsOptions {
|
|
|
8
8
|
*/
|
|
9
9
|
page: Page;
|
|
10
10
|
/**
|
|
11
|
-
* A request
|
|
11
|
+
* * A request manager to which the URLs will be enqueued.
|
|
12
12
|
*/
|
|
13
|
-
|
|
13
|
+
requestManager: IRequestManager;
|
|
14
14
|
/**
|
|
15
15
|
* A CSS selector matching elements to be clicked on. Unlike in {@link enqueueLinks}, there is no default
|
|
16
16
|
* value. This is to prevent suboptimal use of this function by using it too broadly.
|
|
@@ -39,6 +39,16 @@ export interface EnqueueLinksByClickingElementsOptions {
|
|
|
39
39
|
* after clicking on elements matching the provided CSS selector.
|
|
40
40
|
*/
|
|
41
41
|
globs?: GlobInput[];
|
|
42
|
+
/**
|
|
43
|
+
* An array of glob pattern strings, regexp patterns or plain objects
|
|
44
|
+
* containing patterns matching URLs that will **never** be enqueued.
|
|
45
|
+
*
|
|
46
|
+
* The plain objects must include either the `glob` property or the `regexp` property.
|
|
47
|
+
*
|
|
48
|
+
* Glob matching is always case-insensitive.
|
|
49
|
+
* If you need case-sensitive matching, provide a regexp.
|
|
50
|
+
*/
|
|
51
|
+
exclude?: readonly (GlobInput | RegExpInput)[];
|
|
42
52
|
/**
|
|
43
53
|
* An array of regular expressions or plain objects
|
|
44
54
|
* containing regular expressions matching the URLs to be enqueued.
|
|
@@ -72,25 +82,28 @@ export interface EnqueueLinksByClickingElementsOptions {
|
|
|
72
82
|
*/
|
|
73
83
|
pseudoUrls?: PseudoUrlInput[];
|
|
74
84
|
/**
|
|
75
|
-
*
|
|
76
|
-
* to remove
|
|
77
|
-
* when you need to enqueue multiple `Requests` to the queue that share the same URL,
|
|
78
|
-
* or to dynamically update or create `userData`.
|
|
79
|
-
*
|
|
80
|
-
* For example: by adding `useExtendedUniqueKey: true` to the `request` object, `uniqueKey` will be computed from
|
|
81
|
-
* a combination of `url`, `method` and `payload` which enables crawling of websites that navigate using form submits
|
|
82
|
-
* (POST requests).
|
|
85
|
+
* After {@link Request} objects are constructed and filtered by URL patterns (`globs`, `regexps`, `pseudoUrls`),
|
|
86
|
+
* this function can be used to remove them or modify their contents such as `userData`, `payload` or, most importantly
|
|
87
|
+
* `uniqueKey`. This is useful when you need to enqueue multiple `Requests` to the queue that share the same URL,
|
|
88
|
+
* but differ in methods or payloads, or to dynamically update or create `userData`.
|
|
83
89
|
*
|
|
84
90
|
* **Example:**
|
|
85
91
|
* ```javascript
|
|
86
92
|
* {
|
|
87
93
|
* transformRequestFunction: (request) => {
|
|
88
94
|
* request.userData.foo = 'bar';
|
|
89
|
-
* request.useExtendedUniqueKey = true;
|
|
90
95
|
* return request;
|
|
91
96
|
* }
|
|
92
97
|
* }
|
|
93
98
|
* ```
|
|
99
|
+
*
|
|
100
|
+
* Note that `transformRequestFunction` has the highest priority and can overwrite request options
|
|
101
|
+
* specified in `globs`, `regexps`, or `pseudoUrls` objects, as well as the global `label` option.
|
|
102
|
+
*
|
|
103
|
+
* The function receives a {@link RequestOptions} object and can return either:
|
|
104
|
+
* - The modified {@link RequestOptions} object
|
|
105
|
+
* - `'unchanged'` to keep the original options as-is
|
|
106
|
+
* - A falsy value or `'skip'` to exclude the request from the queue
|
|
94
107
|
*/
|
|
95
108
|
transformRequestFunction?: RequestTransform;
|
|
96
109
|
/**
|
|
@@ -130,6 +143,12 @@ export interface EnqueueLinksByClickingElementsOptions {
|
|
|
130
143
|
* @default false
|
|
131
144
|
*/
|
|
132
145
|
skipNavigation?: boolean;
|
|
146
|
+
/**
|
|
147
|
+
* When a request is skipped for some reason, you can use this callback to act on it.
|
|
148
|
+
* This is fired for requests skipped because they don't match enqueueLinks filters
|
|
149
|
+
* or because they were removed by `transformRequestFunction`.
|
|
150
|
+
*/
|
|
151
|
+
onSkippedRequest?: SkippedRequestCallback;
|
|
133
152
|
}
|
|
134
153
|
/**
|
|
135
154
|
* The function finds elements matching a specific CSS selector in a Puppeteer page,
|
|
@@ -161,7 +180,7 @@ export interface EnqueueLinksByClickingElementsOptions {
|
|
|
161
180
|
* ```javascript
|
|
162
181
|
* await utils.puppeteer.enqueueLinksByClickingElements({
|
|
163
182
|
* page,
|
|
164
|
-
*
|
|
183
|
+
* requestManager,
|
|
165
184
|
* selector: 'a.product-detail',
|
|
166
185
|
* pseudoUrls: [
|
|
167
186
|
* 'https://www.example.com/handbags/[.*]'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"click-elements.d.ts","sourceRoot":"","sources":["../../../src/internals/enqueue-links/click-elements.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACR,SAAS,EACT,cAAc,EACd,WAAW,EAEX,
|
|
1
|
+
{"version":3,"file":"click-elements.d.ts","sourceRoot":"","sources":["../../../src/internals/enqueue-links/click-elements.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACR,SAAS,EACT,eAAe,EACf,cAAc,EACd,WAAW,EAEX,gBAAgB,EAChB,sBAAsB,EAEzB,MAAM,kBAAkB,CAAC;AAW1B,OAAO,KAAK,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEzE,OAAO,KAAK,EAAE,YAAY,EAA0C,IAAI,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAOpG,MAAM,WAAW,qCAAqC;IAClD;;OAEG;IACH,IAAI,EAAE,IAAI,CAAC;IAEX;;OAEG;IACH,cAAc,EAAE,eAAe,CAAC;IAEhC;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,UAAU,CAAC;IAEtB,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,YAAY,CAAC,EAAE,YAAY,CAAC;IAE5B;;;;;;;;;;;;;OAaG;IACH,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC;IAEpB;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC,SAAS,GAAG,WAAW,CAAC,EAAE,CAAC;IAE/C;;;;;;;;;;OAUG;IACH,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;IAExB;;;;;;;;;;;;;;;;;;OAkBG;IACH,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;IAE9B;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,wBAAwB,CAAC,EAAE,gBAAgB,CAAC;IAE5C;;;;;;;;;;;;;;OAcG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B;;;;;OAKG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAEhC;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;CAC7C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,wBAAsB,8BAA8B,CAChD,OAAO,EAAE,qCAAqC,GAC/C,OAAO,CAAC,sBAAsB,CAAC,CA2GjC;AAED,UAAU,sBAAsB;IAC5B,IAAI,EAAE,IAAI,CAAC;IACX,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACrC;AAED,UAAU,kDAAmD,SAAQ,sBAAsB;IACvF,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,YAAY,CAAC;CAC/B;AAED;;;;;GAKG;AACH,wBAAsB,2CAA2C,CAC7D,OAAO,EAAE,kDAAkD,GAC5D,OAAO,CAAC,UAAU,EAAE,CAAC,CA2BvB;AA0DD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAGpE;AAiDD;;;;;;;GAOG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA2B5G"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { URL } from 'node:url';
|
|
2
|
-
import { constructGlobObjectsFromGlobs, constructRegExpObjectsFromPseudoUrls, constructRegExpObjectsFromRegExps, createRequestOptions,
|
|
2
|
+
import { applyRequestTransform, constructGlobObjectsFromGlobs, constructRegExpObjectsFromPseudoUrls, constructRegExpObjectsFromRegExps, createRequestOptions, filterRequestOptionsByPatterns, Request, serviceLocator, } from '@crawlee/browser';
|
|
3
3
|
import ow from 'ow';
|
|
4
|
-
import log_ from '@apify/log';
|
|
5
4
|
import { addInterceptRequestHandler, removeInterceptRequestHandler } from '../utils/puppeteer_request_interception.js';
|
|
6
5
|
const STARTING_Z_INDEX = 2147400000;
|
|
7
|
-
const
|
|
6
|
+
const getLog = () => serviceLocator.getChildLog('Puppeteer Click Elements');
|
|
8
7
|
/**
|
|
9
8
|
* The function finds elements matching a specific CSS selector in a Puppeteer page,
|
|
10
9
|
* clicks all those elements using a mouse move and a left mouse button click and intercepts
|
|
@@ -35,7 +34,7 @@ const log = log_.child({ prefix: 'Puppeteer Click Elements' });
|
|
|
35
34
|
* ```javascript
|
|
36
35
|
* await utils.puppeteer.enqueueLinksByClickingElements({
|
|
37
36
|
* page,
|
|
38
|
-
*
|
|
37
|
+
* requestManager,
|
|
39
38
|
* selector: 'a.product-detail',
|
|
40
39
|
* pseudoUrls: [
|
|
41
40
|
* 'https://www.example.com/handbags/[.*]'
|
|
@@ -49,26 +48,41 @@ const log = log_.child({ prefix: 'Puppeteer Click Elements' });
|
|
|
49
48
|
export async function enqueueLinksByClickingElements(options) {
|
|
50
49
|
ow(options, ow.object.exactShape({
|
|
51
50
|
page: ow.object.hasKeys('goto', 'evaluate'),
|
|
52
|
-
|
|
51
|
+
requestManager: ow.object.hasKeys('fetchNextRequest', 'addRequestsBatched'),
|
|
53
52
|
selector: ow.string,
|
|
54
53
|
userData: ow.optional.object,
|
|
55
54
|
clickOptions: ow.optional.object.hasKeys('clickCount', 'delay'),
|
|
56
55
|
pseudoUrls: ow.optional.array.ofType(ow.any(ow.string, ow.object.hasKeys('purl'))),
|
|
57
56
|
globs: ow.optional.array.ofType(ow.any(ow.string, ow.object.hasKeys('glob'))),
|
|
58
57
|
regexps: ow.optional.array.ofType(ow.any(ow.regExp, ow.object.hasKeys('regexp'))),
|
|
58
|
+
exclude: ow.optional.array.ofType(ow.any(ow.string, ow.regExp, ow.object.hasKeys('glob'), ow.object.hasKeys('regexp'))),
|
|
59
59
|
transformRequestFunction: ow.optional.function,
|
|
60
60
|
waitForPageIdleSecs: ow.optional.number,
|
|
61
61
|
maxWaitForPageIdleSecs: ow.optional.number,
|
|
62
62
|
label: ow.optional.string,
|
|
63
63
|
forefront: ow.optional.boolean,
|
|
64
64
|
skipNavigation: ow.optional.boolean,
|
|
65
|
+
onSkippedRequest: ow.optional.function,
|
|
65
66
|
}));
|
|
66
|
-
const { page,
|
|
67
|
+
const { page, requestManager, selector, clickOptions,
|
|
68
|
+
// oxlint-disable-next-line typescript/no-deprecated -- still accepted for backwards compat
|
|
69
|
+
pseudoUrls, globs, regexps, transformRequestFunction, waitForPageIdleSecs = 1, maxWaitForPageIdleSecs = 5, forefront, exclude, onSkippedRequest, } = options;
|
|
67
70
|
const waitForPageIdleMillis = waitForPageIdleSecs * 1000;
|
|
68
71
|
const maxWaitForPageIdleMillis = maxWaitForPageIdleSecs * 1000;
|
|
72
|
+
const urlExcludePatternObjects = [];
|
|
69
73
|
const urlPatternObjects = [];
|
|
74
|
+
if (exclude?.length) {
|
|
75
|
+
for (const excl of exclude) {
|
|
76
|
+
if (typeof excl === 'string' || 'glob' in excl) {
|
|
77
|
+
urlExcludePatternObjects.push(...constructGlobObjectsFromGlobs([excl]));
|
|
78
|
+
}
|
|
79
|
+
else if (excl instanceof RegExp || 'regexp' in excl) {
|
|
80
|
+
urlExcludePatternObjects.push(...constructRegExpObjectsFromRegExps([excl]));
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
70
84
|
if (pseudoUrls?.length) {
|
|
71
|
-
|
|
85
|
+
getLog().deprecated('`pseudoUrls` option is deprecated, use `globs` or `regexps` instead');
|
|
72
86
|
urlPatternObjects.push(...constructRegExpObjectsFromPseudoUrls(pseudoUrls));
|
|
73
87
|
}
|
|
74
88
|
if (globs?.length) {
|
|
@@ -84,12 +98,21 @@ export async function enqueueLinksByClickingElements(options) {
|
|
|
84
98
|
maxWaitForPageIdleMillis,
|
|
85
99
|
clickOptions,
|
|
86
100
|
});
|
|
87
|
-
|
|
101
|
+
const requestOptions = createRequestOptions(interceptedRequests, options);
|
|
102
|
+
const skippedByFilters = [];
|
|
103
|
+
let filteredOptions = filterRequestOptionsByPatterns(requestOptions, urlPatternObjects.length > 0 ? urlPatternObjects : undefined, urlExcludePatternObjects, undefined, (url) => skippedByFilters.push(url));
|
|
104
|
+
if (onSkippedRequest && skippedByFilters.length > 0) {
|
|
105
|
+
await Promise.all(skippedByFilters.map(async (url) => onSkippedRequest({ url, reason: 'filters' })));
|
|
106
|
+
}
|
|
88
107
|
if (transformRequestFunction) {
|
|
89
|
-
|
|
108
|
+
const skippedByTransform = [];
|
|
109
|
+
filteredOptions = applyRequestTransform(filteredOptions, transformRequestFunction, (r) => skippedByTransform.push(r));
|
|
110
|
+
if (onSkippedRequest && skippedByTransform.length > 0) {
|
|
111
|
+
await Promise.all(skippedByTransform.map(async (r) => onSkippedRequest({ url: r.url, reason: 'transform' })));
|
|
112
|
+
}
|
|
90
113
|
}
|
|
91
|
-
const requests =
|
|
92
|
-
const { addedRequests } = await
|
|
114
|
+
const requests = filteredOptions.map((opts) => new Request(opts));
|
|
115
|
+
const { addedRequests } = await requestManager.addRequestsBatched(requests, { forefront });
|
|
93
116
|
return { processedRequests: addedRequests, unprocessedRequests: [] };
|
|
94
117
|
}
|
|
95
118
|
/**
|
|
@@ -130,6 +153,7 @@ function createInterceptRequestHandler(page, requests) {
|
|
|
130
153
|
url,
|
|
131
154
|
headers: req.headers(),
|
|
132
155
|
method: req.method(),
|
|
156
|
+
// oxlint-disable-next-line typescript/no-deprecated -- fetchPostData() is async and adds a CDP roundtrip per request; keep the sync page-cached read
|
|
133
157
|
payload: req.postData(),
|
|
134
158
|
}));
|
|
135
159
|
if (req.redirectChain().length) {
|
|
@@ -163,7 +187,9 @@ function createTargetCreatedHandler(page, requests) {
|
|
|
163
187
|
await createdPage.close();
|
|
164
188
|
}
|
|
165
189
|
catch (err) {
|
|
166
|
-
|
|
190
|
+
getLog().debug('enqueueLinksByClickingElements: Could not close spawned page.', {
|
|
191
|
+
error: err.stack,
|
|
192
|
+
});
|
|
167
193
|
}
|
|
168
194
|
};
|
|
169
195
|
}
|
|
@@ -172,6 +198,7 @@ function createTargetCreatedHandler(page, requests) {
|
|
|
172
198
|
* There will generally be a lot of other targets being created in the browser.
|
|
173
199
|
*/
|
|
174
200
|
export function isTargetRelevant(page, target) {
|
|
201
|
+
// oxlint-disable-next-line typescript/no-deprecated -- the non-deprecated replacement (opener.page()) is async and would force every call site to await, including EventEmitter callbacks
|
|
175
202
|
return target.type() === 'page' && page.target() === target.opener();
|
|
176
203
|
}
|
|
177
204
|
/**
|
|
@@ -219,7 +246,7 @@ async function preventHistoryNavigation(page) {
|
|
|
219
246
|
*/
|
|
220
247
|
export async function clickElements(page, selector, clickOptions) {
|
|
221
248
|
const elementHandles = await page.$$(selector);
|
|
222
|
-
|
|
249
|
+
getLog().debug(`enqueueLinksByClickingElements: There are ${elementHandles.length} elements to click.`);
|
|
223
250
|
let clickedElementsCount = 0;
|
|
224
251
|
let zIndex = STARTING_Z_INDEX;
|
|
225
252
|
let shouldLogWarning = true;
|
|
@@ -232,15 +259,15 @@ export async function clickElements(page, selector, clickOptions) {
|
|
|
232
259
|
catch (err) {
|
|
233
260
|
const e = err;
|
|
234
261
|
if (shouldLogWarning && e.stack.includes('is detached from document')) {
|
|
235
|
-
|
|
262
|
+
getLog().warning(`An element with selector ${selector} that you're trying to click has been removed from the page. ` +
|
|
236
263
|
'This was probably caused by an earlier click which triggered some JavaScript on the page that caused it to change. ' +
|
|
237
264
|
'If you\'re trying to enqueue pagination links, we suggest using the "next" button, if available and going one by one.');
|
|
238
265
|
shouldLogWarning = false;
|
|
239
266
|
}
|
|
240
|
-
|
|
267
|
+
getLog().debug('enqueueLinksByClickingElements: Click failed.', { stack: e.stack });
|
|
241
268
|
}
|
|
242
269
|
}
|
|
243
|
-
|
|
270
|
+
getLog().debug(`enqueueLinksByClickingElements: Successfully clicked ${clickedElementsCount} elements out of ${elementHandles.length}`);
|
|
244
271
|
}
|
|
245
272
|
/* istanbul ignore next */
|
|
246
273
|
/**
|
|
@@ -277,7 +304,6 @@ function updateElementCssToEnableMouseClick(el, zIndex) {
|
|
|
277
304
|
async function waitForPageIdle({ page, waitForPageIdleMillis, maxWaitForPageIdleMillis, }) {
|
|
278
305
|
return new Promise((resolve) => {
|
|
279
306
|
let timeout;
|
|
280
|
-
let maxTimeout;
|
|
281
307
|
const context = page.browserContext();
|
|
282
308
|
function newTabTracker(target) {
|
|
283
309
|
if (isTargetRelevant(page, target))
|
|
@@ -291,7 +317,7 @@ async function waitForPageIdle({ page, waitForPageIdleMillis, maxWaitForPageIdle
|
|
|
291
317
|
}, waitForPageIdleMillis);
|
|
292
318
|
}
|
|
293
319
|
function maxTimeoutHandler() {
|
|
294
|
-
|
|
320
|
+
getLog().debug(`enqueueLinksByClickingElements: Page still showed activity after ${maxWaitForPageIdleMillis}ms. ` +
|
|
295
321
|
'This is probably due to the website itself dispatching requests, but some links may also have been missed.');
|
|
296
322
|
finish();
|
|
297
323
|
}
|
|
@@ -301,7 +327,7 @@ async function waitForPageIdle({ page, waitForPageIdleMillis, maxWaitForPageIdle
|
|
|
301
327
|
context.off('targetcreated', newTabTracker);
|
|
302
328
|
resolve();
|
|
303
329
|
}
|
|
304
|
-
maxTimeout = setTimeout(maxTimeoutHandler, maxWaitForPageIdleMillis);
|
|
330
|
+
const maxTimeout = setTimeout(maxTimeoutHandler, maxWaitForPageIdleMillis);
|
|
305
331
|
activityHandler(); // We call this once manually in case there would be no requests at all.
|
|
306
332
|
page.on('request', activityHandler);
|
|
307
333
|
page.on('framenavigated', activityHandler);
|
|
@@ -325,7 +351,7 @@ async function restoreHistoryNavigationAndSaveCapturedUrls(page, requests) {
|
|
|
325
351
|
requests.add(JSON.stringify({ url }));
|
|
326
352
|
}
|
|
327
353
|
catch (err) {
|
|
328
|
-
|
|
354
|
+
getLog().debug('enqueueLinksByClickingElements: Failed to ', { error: err.stack });
|
|
329
355
|
}
|
|
330
356
|
});
|
|
331
357
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"click-elements.js","sourceRoot":"","sources":["../../../src/internals/enqueue-links/click-elements.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"click-elements.js","sourceRoot":"","sources":["../../../src/internals/enqueue-links/click-elements.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import type { BrowserCrawlerOptions, BrowserCrawlingContext, BrowserHook,
|
|
2
|
-
import { BrowserCrawler
|
|
3
|
-
import type {
|
|
1
|
+
import type { BrowserCrawlerOptions, BrowserCrawlingContext, BrowserHook, GetUserDataFromRequest, RouterRoutes } from '@crawlee/browser';
|
|
2
|
+
import { BrowserCrawler } from '@crawlee/browser';
|
|
3
|
+
import type { PuppeteerPlugin } from '@crawlee/browser-pool';
|
|
4
4
|
import type { Dictionary } from '@crawlee/types';
|
|
5
5
|
// @ts-ignore optional peer dependency or compatibility with es2022
|
|
6
6
|
import type { HTTPResponse, LaunchOptions, Page } from 'puppeteer';
|
|
7
|
+
import type { EnqueueLinksByClickingElementsOptions } from './enqueue-links/click-elements.js';
|
|
7
8
|
import type { PuppeteerLaunchContext } from './puppeteer-launcher.js';
|
|
8
|
-
import type {
|
|
9
|
-
|
|
9
|
+
import type { InterceptHandler } from './utils/puppeteer_request_interception.js';
|
|
10
|
+
import type { BlockRequestsOptions, DirectNavigationOptions, InfiniteScrollOptions, InjectFileOptions, PuppeteerContextUtils, SaveSnapshotOptions } from './utils/puppeteer_utils.js';
|
|
11
|
+
export type PuppeteerGoToOptions = NonNullable<Parameters<Page['goto']>[1]>;
|
|
12
|
+
export interface PuppeteerCrawlingContext<UserData extends Dictionary = Dictionary> extends BrowserCrawlingContext<Page, HTTPResponse, UserData, PuppeteerGoToOptions>, PuppeteerContextUtils {
|
|
10
13
|
}
|
|
11
14
|
// @ts-ignore optional peer dependency or compatibility with es2022
|
|
12
|
-
export interface PuppeteerHook extends BrowserHook<PuppeteerCrawlingContext
|
|
15
|
+
export interface PuppeteerHook extends BrowserHook<PuppeteerCrawlingContext> {
|
|
13
16
|
}
|
|
14
|
-
export interface
|
|
15
|
-
}
|
|
16
|
-
export type PuppeteerGoToOptions = Parameters<Page['goto']>[1];
|
|
17
|
-
export interface PuppeteerCrawlerOptions extends BrowserCrawlerOptions<PuppeteerCrawlingContext, {
|
|
17
|
+
export interface PuppeteerCrawlerOptions<ContextExtension = Dictionary<never>, ExtendedContext extends PuppeteerCrawlingContext = PuppeteerCrawlingContext & ContextExtension> extends BrowserCrawlerOptions<Page, HTTPResponse, PuppeteerCrawlingContext, ContextExtension, ExtendedContext, {
|
|
18
18
|
browserPlugins: [PuppeteerPlugin];
|
|
19
19
|
}> {
|
|
20
20
|
/**
|
|
@@ -23,25 +23,25 @@ export interface PuppeteerCrawlerOptions extends BrowserCrawlerOptions<Puppeteer
|
|
|
23
23
|
launchContext?: PuppeteerLaunchContext;
|
|
24
24
|
/**
|
|
25
25
|
* Async functions that are sequentially evaluated before the navigation. Good for setting additional cookies
|
|
26
|
-
* or browser properties before navigation. The function
|
|
27
|
-
*
|
|
26
|
+
* or browser properties before navigation. The function receives the `crawlingContext`; the options object
|
|
27
|
+
* forwarded to `page.goto()` is available as `crawlingContext.gotoOptions` and can be mutated in place.
|
|
28
|
+
* A hook may optionally return a partial object whose properties are merged into the crawling context
|
|
29
|
+
* (e.g. to override context members for subsequent hooks and pipeline stages).
|
|
28
30
|
* Example:
|
|
29
31
|
* ```
|
|
30
32
|
* preNavigationHooks: [
|
|
31
|
-
* async (
|
|
32
|
-
* const { page } = crawlingContext;
|
|
33
|
+
* async ({ page, gotoOptions }) => {
|
|
33
34
|
* await page.evaluate((attr) => { window.foo = attr; }, 'bar');
|
|
35
|
+
* gotoOptions.timeout = 60_000;
|
|
34
36
|
* },
|
|
35
37
|
* ]
|
|
36
38
|
* ```
|
|
37
|
-
*
|
|
38
|
-
* Modyfing `pageOptions` is supported only in Playwright incognito.
|
|
39
|
-
* See {@link PrePageCreateHook}
|
|
40
39
|
*/
|
|
41
40
|
preNavigationHooks?: PuppeteerHook[];
|
|
42
41
|
/**
|
|
43
42
|
* Async functions that are sequentially evaluated after the navigation. Good for checking if the navigation was successful.
|
|
44
|
-
* The function accepts `crawlingContext` as the only parameter.
|
|
43
|
+
* The function accepts `crawlingContext` as the only parameter. A hook may optionally return a partial object
|
|
44
|
+
* whose properties are merged into the crawling context (e.g. to override `response` after solving a challenge).
|
|
45
45
|
* Example:
|
|
46
46
|
* ```
|
|
47
47
|
* postNavigationHooks: [
|
|
@@ -67,13 +67,15 @@ export interface PuppeteerCrawlerOptions extends BrowserCrawlerOptions<Puppeteer
|
|
|
67
67
|
* If the target website doesn't need JavaScript, consider using {@link CheerioCrawler},
|
|
68
68
|
* which downloads the pages using raw HTTP requests and is about 10x faster.
|
|
69
69
|
*
|
|
70
|
-
* The source URLs are represented using {@link Request} objects that are fed from
|
|
71
|
-
* {@link
|
|
72
|
-
*
|
|
70
|
+
* The source URLs are represented using {@link Request} objects that are fed from the
|
|
71
|
+
* {@link IRequestManager|request manager} provided via the {@link PuppeteerCrawlerOptions.requestManager|`requestManager`}
|
|
72
|
+
* constructor option (a {@link RequestQueue} is itself a request manager). To read from a read-only source such
|
|
73
|
+
* as a {@link RequestList} while still being able to enqueue new requests, combine it with a queue into a
|
|
74
|
+
* {@link RequestManagerTandem} via {@link IRequestLoader.toTandem|`requestLoader.toTandem()`} and pass the
|
|
75
|
+
* result as `requestManager`.
|
|
73
76
|
*
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
* to {@link RequestQueue} before it starts their processing. This ensures that a single URL is not crawled multiple times.
|
|
77
|
+
* > The {@link PuppeteerCrawlerOptions.requestList|`requestList`} and {@link PuppeteerCrawlerOptions.requestQueue|`requestQueue`}
|
|
78
|
+
* > options are deprecated; they are still accepted and folded into a single `requestManager` for back-compat.
|
|
77
79
|
*
|
|
78
80
|
* The crawler finishes when there are no more {@link Request} objects to crawl.
|
|
79
81
|
*
|
|
@@ -119,11 +121,9 @@ export interface PuppeteerCrawlerOptions extends BrowserCrawlerOptions<Puppeteer
|
|
|
119
121
|
* ```
|
|
120
122
|
* @category Crawlers
|
|
121
123
|
*/
|
|
122
|
-
export declare class PuppeteerCrawler extends BrowserCrawler<{
|
|
124
|
+
export declare class PuppeteerCrawler<ContextExtension = Dictionary<never>, ExtendedContext extends PuppeteerCrawlingContext = PuppeteerCrawlingContext & ContextExtension> extends BrowserCrawler<Page, HTTPResponse, {
|
|
123
125
|
browserPlugins: [PuppeteerPlugin];
|
|
124
|
-
}, LaunchOptions, PuppeteerCrawlingContext> {
|
|
125
|
-
private readonly options;
|
|
126
|
-
readonly config: Configuration;
|
|
126
|
+
}, LaunchOptions, PuppeteerCrawlingContext, ContextExtension, ExtendedContext> {
|
|
127
127
|
protected static optionsShape: {
|
|
128
128
|
// @ts-ignore optional peer dependency or compatibility with es2022
|
|
129
129
|
browserPoolOptions: import("ow").ObjectPredicate<object> & import("ow").BasePredicate<object | undefined>;
|
|
@@ -138,17 +138,17 @@ export declare class PuppeteerCrawler extends BrowserCrawler<{
|
|
|
138
138
|
// @ts-ignore optional peer dependency or compatibility with es2022
|
|
139
139
|
headless: import("ow").AnyPredicate<string | boolean>;
|
|
140
140
|
// @ts-ignore optional peer dependency or compatibility with es2022
|
|
141
|
-
|
|
141
|
+
browserPool: import("ow").ObjectPredicate<object> & import("ow").BasePredicate<object | undefined>;
|
|
142
142
|
// @ts-ignore optional peer dependency or compatibility with es2022
|
|
143
|
-
|
|
143
|
+
remoteBrowser: import("ow").ObjectPredicate<object> & import("ow").BasePredicate<object | undefined>;
|
|
144
144
|
// @ts-ignore optional peer dependency or compatibility with es2022
|
|
145
|
-
|
|
145
|
+
saveResponseCookies: import("ow").BooleanPredicate & import("ow").BasePredicate<boolean | undefined>;
|
|
146
146
|
// @ts-ignore optional peer dependency or compatibility with es2022
|
|
147
147
|
proxyConfiguration: import("ow").ObjectPredicate<object> & import("ow").BasePredicate<object | undefined>;
|
|
148
148
|
// @ts-ignore optional peer dependency or compatibility with es2022
|
|
149
|
-
|
|
149
|
+
contextPipelineBuilder: import("ow").ObjectPredicate<object> & import("ow").BasePredicate<object | undefined>;
|
|
150
150
|
// @ts-ignore optional peer dependency or compatibility with es2022
|
|
151
|
-
|
|
151
|
+
extendContext: import("ow").Predicate<Function> & import("ow").BasePredicate<Function | undefined>;
|
|
152
152
|
// @ts-ignore optional peer dependency or compatibility with es2022
|
|
153
153
|
requestList: import("ow").ObjectPredicate<object> & import("ow").BasePredicate<object | undefined>;
|
|
154
154
|
// @ts-ignore optional peer dependency or compatibility with es2022
|
|
@@ -165,24 +165,40 @@ export declare class PuppeteerCrawler extends BrowserCrawler<{
|
|
|
165
165
|
maxRequestRetries: import("ow").NumberPredicate & import("ow").BasePredicate<number | undefined>;
|
|
166
166
|
// @ts-ignore optional peer dependency or compatibility with es2022
|
|
167
167
|
sameDomainDelaySecs: import("ow").NumberPredicate & import("ow").BasePredicate<number | undefined>;
|
|
168
|
-
// @ts-ignore optional peer dependency or compatibility with es2022
|
|
169
|
-
maxSessionRotations: import("ow").NumberPredicate & import("ow").BasePredicate<number | undefined>;
|
|
170
168
|
// @ts-ignore optional peer dependency or compatibility with es2022
|
|
171
169
|
maxRequestsPerCrawl: import("ow").NumberPredicate & import("ow").BasePredicate<number | undefined>;
|
|
170
|
+
// @ts-ignore optional peer dependency or compatibility with es2022
|
|
171
|
+
maxCrawlDepth: import("ow").NumberPredicate & import("ow").BasePredicate<number | undefined>;
|
|
172
172
|
// @ts-ignore optional peer dependency or compatibility with es2022
|
|
173
173
|
autoscaledPoolOptions: import("ow").ObjectPredicate<object> & import("ow").BasePredicate<object | undefined>;
|
|
174
|
+
// @ts-ignore optional peer dependency or compatibility with es2022
|
|
175
|
+
sessionPool: import("ow").ObjectPredicate<object> & import("ow").BasePredicate<object | undefined>;
|
|
174
176
|
// @ts-ignore optional peer dependency or compatibility with es2022
|
|
175
177
|
statusMessageLoggingInterval: import("ow").NumberPredicate & import("ow").BasePredicate<number | undefined>;
|
|
176
178
|
// @ts-ignore optional peer dependency or compatibility with es2022
|
|
177
179
|
statusMessageCallback: import("ow").Predicate<Function> & import("ow").BasePredicate<Function | undefined>;
|
|
180
|
+
// @ts-ignore optional peer dependency or compatibility with es2022
|
|
181
|
+
additionalHttpErrorStatusCodes: import("ow").ArrayPredicate<number>;
|
|
182
|
+
// @ts-ignore optional peer dependency or compatibility with es2022
|
|
183
|
+
ignoreHttpErrorStatusCodes: import("ow").ArrayPredicate<number>;
|
|
184
|
+
// @ts-ignore optional peer dependency or compatibility with es2022
|
|
185
|
+
blockedStatusCodes: import("ow").ArrayPredicate<number>;
|
|
178
186
|
// @ts-ignore optional peer dependency or compatibility with es2022
|
|
179
187
|
retryOnBlocked: import("ow").BooleanPredicate & import("ow").BasePredicate<boolean | undefined>;
|
|
180
188
|
// @ts-ignore optional peer dependency or compatibility with es2022
|
|
181
|
-
respectRobotsTxtFile: import("ow").
|
|
189
|
+
respectRobotsTxtFile: import("ow").AnyPredicate<boolean | object>;
|
|
182
190
|
// @ts-ignore optional peer dependency or compatibility with es2022
|
|
183
191
|
onSkippedRequest: import("ow").Predicate<Function> & import("ow").BasePredicate<Function | undefined>;
|
|
184
192
|
// @ts-ignore optional peer dependency or compatibility with es2022
|
|
185
193
|
httpClient: import("ow").ObjectPredicate<object> & import("ow").BasePredicate<object | undefined>;
|
|
194
|
+
// @ts-ignore optional peer dependency or compatibility with es2022
|
|
195
|
+
configuration: import("ow").ObjectPredicate<object> & import("ow").BasePredicate<object | undefined>;
|
|
196
|
+
// @ts-ignore optional peer dependency or compatibility with es2022
|
|
197
|
+
storageBackend: import("ow").ObjectPredicate<object> & import("ow").BasePredicate<object | undefined>;
|
|
198
|
+
// @ts-ignore optional peer dependency or compatibility with es2022
|
|
199
|
+
eventManager: import("ow").ObjectPredicate<object> & import("ow").BasePredicate<object | undefined>;
|
|
200
|
+
// @ts-ignore optional peer dependency or compatibility with es2022
|
|
201
|
+
logger: import("ow").ObjectPredicate<object> & import("ow").BasePredicate<object | undefined>;
|
|
186
202
|
// @ts-ignore optional peer dependency or compatibility with es2022
|
|
187
203
|
minConcurrency: import("ow").NumberPredicate & import("ow").BasePredicate<number | undefined>;
|
|
188
204
|
// @ts-ignore optional peer dependency or compatibility with es2022
|
|
@@ -191,18 +207,34 @@ export declare class PuppeteerCrawler extends BrowserCrawler<{
|
|
|
191
207
|
maxRequestsPerMinute: import("ow").NumberPredicate & import("ow").BasePredicate<number | undefined>;
|
|
192
208
|
// @ts-ignore optional peer dependency or compatibility with es2022
|
|
193
209
|
keepAlive: import("ow").BooleanPredicate & import("ow").BasePredicate<boolean | undefined>;
|
|
194
|
-
// @ts-ignore optional peer dependency or compatibility with es2022
|
|
195
|
-
log: import("ow").ObjectPredicate<object> & import("ow").BasePredicate<object | undefined>;
|
|
196
|
-
// @ts-ignore optional peer dependency or compatibility with es2022
|
|
197
|
-
experiments: import("ow").ObjectPredicate<object> & import("ow").BasePredicate<object | undefined>;
|
|
198
210
|
// @ts-ignore optional peer dependency or compatibility with es2022
|
|
199
211
|
statisticsOptions: import("ow").ObjectPredicate<object> & import("ow").BasePredicate<object | undefined>;
|
|
212
|
+
// @ts-ignore optional peer dependency or compatibility with es2022
|
|
213
|
+
id: import("ow").StringPredicate & import("ow").BasePredicate<string | undefined>;
|
|
200
214
|
};
|
|
201
215
|
/**
|
|
202
216
|
* All `PuppeteerCrawler` parameters are passed via an options object.
|
|
203
217
|
*/
|
|
204
|
-
constructor(options?: PuppeteerCrawlerOptions,
|
|
205
|
-
|
|
218
|
+
constructor(options?: PuppeteerCrawlerOptions<ContextExtension, ExtendedContext>);
|
|
219
|
+
// @ts-ignore optional peer dependency or compatibility with es2022
|
|
220
|
+
protected buildContextPipeline(): import("@crawlee/browser").ContextPipeline<import("@crawlee/browser").CrawlingContext<Dictionary>, BrowserCrawlingContext<Page, HTTPResponse, Dictionary, Dictionary> & {
|
|
221
|
+
injectFile: (filePath: string, options?: InjectFileOptions) => Promise<unknown>;
|
|
222
|
+
injectJQuery: () => Promise<void>;
|
|
223
|
+
waitForSelector: (selector: string, timeoutMs?: number) => Promise<void>;
|
|
224
|
+
// @ts-ignore optional peer dependency or compatibility with es2022
|
|
225
|
+
parseWithCheerio: (selector?: string, timeoutMs?: number) => Promise<import("@crawlee/browser").CheerioAPI>;
|
|
226
|
+
// @ts-ignore optional peer dependency or compatibility with es2022
|
|
227
|
+
enqueueLinksByClickingElements: (options: Omit<EnqueueLinksByClickingElementsOptions, "page" | "requestManager">) => Promise<import("@crawlee/types").BatchAddRequestsResult>;
|
|
228
|
+
blockRequests: (options?: BlockRequestsOptions) => Promise<void>;
|
|
229
|
+
// @ts-ignore optional peer dependency or compatibility with es2022
|
|
230
|
+
compileScript: (scriptString: string, ctx?: Dictionary) => import("./utils/puppeteer_utils.js").CompiledScriptFunction;
|
|
231
|
+
addInterceptRequestHandler: (handler: InterceptHandler) => Promise<void>;
|
|
232
|
+
removeInterceptRequestHandler: (handler: InterceptHandler) => Promise<void>;
|
|
233
|
+
infiniteScroll: (options?: InfiniteScrollOptions) => Promise<void>;
|
|
234
|
+
saveSnapshot: (options?: SaveSnapshotOptions) => Promise<void>;
|
|
235
|
+
closeCookieModals: () => Promise<void>;
|
|
236
|
+
}>;
|
|
237
|
+
private enhanceContext;
|
|
206
238
|
protected _navigationHandler(crawlingContext: PuppeteerCrawlingContext, gotoOptions: DirectNavigationOptions): Promise<HTTPResponse | null>;
|
|
207
239
|
}
|
|
208
240
|
/**
|