@hanivanrizky/nestjs-browser-action 0.16.3 → 0.17.0

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.
@@ -0,0 +1,237 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ const core_1 = require("@nestjs/core");
10
+ const common_1 = require("@nestjs/common");
11
+ const index_1 = require("../index");
12
+ let AppModule = class AppModule {
13
+ };
14
+ AppModule = __decorate([
15
+ (0, common_1.Module)({
16
+ imports: [
17
+ index_1.BrowserActionModule.forRoot({
18
+ launchOptions: { headless: process.env.HEADLESS !== 'false' },
19
+ pool: { min: 1, max: 1 },
20
+ }),
21
+ ],
22
+ })
23
+ ], AppModule);
24
+ async function scrapeWithPipes(service) {
25
+ const data = await service.scrape('https://www.scrapingcourse.com/ecommerce/product/abominable-hoodie/', {
26
+ price: '.product-price',
27
+ title: 'h1.product_title',
28
+ description: '.woocommerce-product-details__short-description p',
29
+ }, {
30
+ pipes: {
31
+ price: {
32
+ trim: true,
33
+ custom: [
34
+ {
35
+ type: index_1.CleansingType.REMOVE_CURRENCY_SYMBOL,
36
+ symbols: ['$', '€', '£', '¥'],
37
+ },
38
+ { type: index_1.CleansingType.REMOVE_SPECIAL_CHARS },
39
+ { type: index_1.CleansingType.TO_NUMBER, decimals: 2 },
40
+ ],
41
+ },
42
+ title: { trim: true, toLowerCase: true },
43
+ description: {
44
+ trim: true,
45
+ custom: [
46
+ { type: index_1.CleansingType.REMOVE_LINE_BREAKS },
47
+ { type: index_1.CleansingType.NORMALIZE_WHITESPACE },
48
+ { type: index_1.CleansingType.SANITIZE_TEXT },
49
+ ],
50
+ },
51
+ },
52
+ });
53
+ console.log('price:', data.price);
54
+ console.log('title:', data.title);
55
+ console.log('description:', data.description);
56
+ }
57
+ async function scrapeAllWithPipes(service) {
58
+ const data = await service.scrapeAll('https://www.scrapingcourse.com/ecommerce/', { prices: 'li[data-products="item"] .product-price' }, {
59
+ pipes: {
60
+ prices: {
61
+ trim: true,
62
+ custom: [
63
+ { type: index_1.CleansingType.REMOVE_CURRENCY_SYMBOL, symbols: ['$'] },
64
+ ],
65
+ },
66
+ },
67
+ });
68
+ console.log('prices:', data.prices);
69
+ }
70
+ async function workflowCleanse(actionHelpers) {
71
+ const result = await actionHelpers.scrapeWithWorkflow('https://www.scrapingcourse.com/ecommerce/product/abominable-hoodie/', {
72
+ version: '1.0',
73
+ actions: [
74
+ {
75
+ id: 'rawPrice',
76
+ action: 'extract',
77
+ target: { type: 'css', value: '.product-price' },
78
+ },
79
+ {
80
+ id: 'price',
81
+ action: 'cleanse',
82
+ value: '${rawPrice}',
83
+ options: {
84
+ pipes: {
85
+ trim: true,
86
+ custom: [
87
+ { type: index_1.CleansingType.REMOVE_CURRENCY_SYMBOL, symbols: ['$'] },
88
+ { type: index_1.CleansingType.TO_NUMBER, decimals: 2 },
89
+ ],
90
+ },
91
+ },
92
+ },
93
+ {
94
+ id: 'rawTitle',
95
+ action: 'extract',
96
+ target: { type: 'css', value: 'h1.product_title' },
97
+ },
98
+ {
99
+ id: 'title',
100
+ action: 'cleanse',
101
+ value: '${rawTitle}',
102
+ options: {
103
+ pipes: { trim: true, toLowerCase: true },
104
+ },
105
+ },
106
+ ],
107
+ });
108
+ console.log('price:', result.data.price);
109
+ console.log('title:', result.data.title);
110
+ }
111
+ async function workflowCleanseArray(actionHelpers) {
112
+ const result = await actionHelpers.scrapeWithWorkflow('https://www.scrapingcourse.com/ecommerce/', {
113
+ version: '1.0',
114
+ actions: [
115
+ {
116
+ id: 'rawTags',
117
+ action: 'evaluate',
118
+ value: "() => [...document.querySelectorAll('.product-name')].map(el => el.textContent)",
119
+ },
120
+ {
121
+ id: 'tags',
122
+ action: 'cleanse',
123
+ value: '${rawTags}',
124
+ options: {
125
+ pipes: { trim: true, toLowerCase: true },
126
+ },
127
+ },
128
+ ],
129
+ });
130
+ console.log('tags:', result.data.tags);
131
+ }
132
+ function pipeEngineDirectUsage() {
133
+ const engine = new index_1.PipeEngine();
134
+ const clean = engine.apply(' HELLO WORLD ', {
135
+ trim: true,
136
+ toLowerCase: true,
137
+ });
138
+ console.log(clean);
139
+ const replaced = engine.apply('foo bar foo', {
140
+ replace: [{ from: 'foo', to: 'baz' }],
141
+ });
142
+ console.log(replaced);
143
+ const price = engine.apply('$29.99', {
144
+ trim: true,
145
+ custom: [{ type: index_1.CleansingType.REMOVE_CURRENCY_SYMBOL, symbols: ['$'] }],
146
+ });
147
+ console.log(price);
148
+ const url = engine.apply('/ecommerce/product/abominable-hoodie/', {
149
+ custom: [{ type: 'parse-as-url' }],
150
+ }, 'https://www.scrapingcourse.com');
151
+ console.log(url);
152
+ }
153
+ function cleansingServiceUsage(cleansingService) {
154
+ const pipes = cleansingService.buildPipes([
155
+ { type: index_1.CleansingType.TRIM },
156
+ { type: index_1.CleansingType.NORMALIZE_WHITESPACE },
157
+ { type: index_1.CleansingType.TO_LOWER_CASE },
158
+ ]);
159
+ const result = cleansingService.cleanse(' HELLO WORLD ', pipes);
160
+ console.log(result);
161
+ }
162
+ function cleansingProfiles(cleansingService) {
163
+ const price = cleansingService.cleanseWithProfile(' $29.99 ', index_1.CleansingProfile.PRICE);
164
+ console.log(price);
165
+ const email = cleansingService.cleanseWithProfile(' User@EXAMPLE.com ', index_1.CleansingProfile.EMAIL);
166
+ console.log(email);
167
+ }
168
+ class ExclamationPipe extends index_1.CleansingPipe {
169
+ type = 'exclaim';
170
+ exec(value) {
171
+ return `${String(value)}!`;
172
+ }
173
+ }
174
+ function registerCustomPipe(cleansingService) {
175
+ cleansingService.registerPipe('exclaim', ExclamationPipe);
176
+ const pipes = cleansingService.buildPipes([{ type: 'exclaim' }]);
177
+ console.log(cleansingService.cleanse('hello', pipes));
178
+ }
179
+ function registerOnPipeEngine() {
180
+ const engine = new index_1.PipeEngine();
181
+ engine.register('exclaim', ExclamationPipe);
182
+ const result = engine.apply('hello', { custom: [{ type: 'exclaim' }] });
183
+ console.log(result);
184
+ }
185
+ function registerViaPipeRegistry() {
186
+ index_1.PIPE_REGISTRY['exclaim'] = ExclamationPipe;
187
+ }
188
+ const priceRules = {
189
+ trim: true,
190
+ custom: [
191
+ {
192
+ type: index_1.CleansingType.REMOVE_CURRENCY_SYMBOL,
193
+ symbols: ['$', '€', '£', '¥'],
194
+ },
195
+ { type: index_1.CleansingType.TO_NUMBER, decimals: 2 },
196
+ ],
197
+ };
198
+ const titleRules = { trim: true, toLowerCase: true };
199
+ async function reuseRules(service) {
200
+ const product = await service.scrape('https://www.scrapingcourse.com/ecommerce/product/abominable-hoodie/', { price: '.product-price', title: 'h1' }, { pipes: { price: priceRules, title: titleRules } });
201
+ console.log(product);
202
+ }
203
+ async function decodeHtmlEntities(service) {
204
+ const data = await service.scrape('https://www.scrapingcourse.com/ecommerce/', { text: 'h1.page-title' }, {
205
+ pipes: {
206
+ text: { decode: true, trim: true },
207
+ },
208
+ });
209
+ console.log(data.text);
210
+ }
211
+ if (require.main === module) {
212
+ void (async () => {
213
+ const app = await core_1.NestFactory.createApplicationContext(AppModule, {
214
+ logger: false,
215
+ });
216
+ const service = await app.resolve(index_1.BrowserActionService);
217
+ const cleansing = app.get(index_1.CleansingService);
218
+ try {
219
+ await scrapeWithPipes(service);
220
+ await scrapeAllWithPipes(service);
221
+ await workflowCleanse(service);
222
+ await workflowCleanseArray(service);
223
+ pipeEngineDirectUsage();
224
+ cleansingServiceUsage(cleansing);
225
+ cleansingProfiles(cleansing);
226
+ registerCustomPipe(cleansing);
227
+ registerOnPipeEngine();
228
+ registerViaPipeRegistry();
229
+ await reuseRules(service);
230
+ await decodeHtmlEntities(service);
231
+ }
232
+ finally {
233
+ await app.close();
234
+ }
235
+ })();
236
+ }
237
+ //# sourceMappingURL=pipes-example.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipes-example.js","sourceRoot":"","sources":["../../src/examples/pipes-example.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,402 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ const core_1 = require("@nestjs/core");
10
+ const common_1 = require("@nestjs/common");
11
+ const index_1 = require("../index");
12
+ let AppModule = class AppModule {
13
+ };
14
+ AppModule = __decorate([
15
+ (0, common_1.Module)({
16
+ imports: [
17
+ index_1.BrowserActionModule.forRoot({
18
+ launchOptions: { headless: process.env.HEADLESS !== 'false' },
19
+ pool: { min: 1, max: 1 },
20
+ }),
21
+ ],
22
+ })
23
+ ], AppModule);
24
+ async function simpleExtraction(actionHelpers) {
25
+ const workflow = {
26
+ version: '1.0',
27
+ actions: [
28
+ {
29
+ action: 'wait',
30
+ value: 2,
31
+ },
32
+ {
33
+ id: 'title',
34
+ action: 'extract',
35
+ target: { type: 'css', value: 'h1' },
36
+ },
37
+ {
38
+ id: 'description',
39
+ action: 'extract',
40
+ target: { type: 'css', value: 'p' },
41
+ },
42
+ ],
43
+ };
44
+ const result = await actionHelpers.scrapeWithWorkflow('https://www.scrapingcourse.com/ecommerce/', workflow);
45
+ console.log('Simple extraction result:', result.data);
46
+ }
47
+ async function formAutomation(actionHelpers) {
48
+ const workflow = {
49
+ version: '1.0',
50
+ actions: [
51
+ {
52
+ action: 'navigate',
53
+ value: '${baseUrl}',
54
+ },
55
+ {
56
+ action: 'wait',
57
+ value: 2,
58
+ },
59
+ {
60
+ action: 'waitFor',
61
+ target: { type: 'css', value: '#search-input' },
62
+ options: { timeout: 10000 },
63
+ },
64
+ {
65
+ action: 'type',
66
+ target: { type: 'css', value: '#search-input' },
67
+ value: '${searchQuery}',
68
+ options: { delay: 50, scrollTo: true },
69
+ },
70
+ {
71
+ action: 'click',
72
+ target: { type: 'css', value: 'button[type="submit"]' },
73
+ options: { scrollTo: true, waitForNavigation: true },
74
+ },
75
+ {
76
+ action: 'waitFor',
77
+ target: { type: 'css', value: '.search-results' },
78
+ options: { timeout: 30000 },
79
+ },
80
+ {
81
+ id: 'firstResult',
82
+ action: 'extract',
83
+ target: { type: 'css', value: '.search-result:first-child h3' },
84
+ },
85
+ ],
86
+ onError: {
87
+ screenshot: true,
88
+ screenshotPath: './error-screenshot.png',
89
+ continue: false,
90
+ },
91
+ };
92
+ const result = await actionHelpers.scrapeWithWorkflow('https://www.scrapingcourse.com/ecommerce/', workflow, {
93
+ baseUrl: 'https://www.scrapingcourse.com/ecommerce/?s=hoodie',
94
+ searchQuery: 'hoodie',
95
+ });
96
+ console.log('Form automation result:', result.data);
97
+ }
98
+ async function conditionalWorkflow(actionHelpers) {
99
+ const workflow = {
100
+ version: '1.0',
101
+ actions: [
102
+ {
103
+ action: 'navigate',
104
+ value: '${baseUrl}',
105
+ },
106
+ {
107
+ action: 'waitFor',
108
+ target: { type: 'css', value: '#cookie-banner' },
109
+ options: { timeout: 5000 },
110
+ },
111
+ {
112
+ action: 'click',
113
+ target: { type: 'css', value: '#accept-cookies' },
114
+ condition: {
115
+ ifExists: { type: 'css', value: '#accept-cookies' },
116
+ },
117
+ onError: 'continue',
118
+ },
119
+ {
120
+ action: 'waitFor',
121
+ target: { type: 'css', value: '.main-content' },
122
+ },
123
+ {
124
+ action: 'scroll',
125
+ target: { type: 'css', value: '.main-content' },
126
+ },
127
+ {
128
+ id: 'mainHeading',
129
+ action: 'extract',
130
+ target: { type: 'css', value: 'h1' },
131
+ },
132
+ {
133
+ id: 'pageContent',
134
+ action: 'extract',
135
+ target: { type: 'css', value: 'article' },
136
+ },
137
+ ],
138
+ };
139
+ const result = await actionHelpers.scrapeWithWorkflow('https://www.scrapingcourse.com/ecommerce/', workflow, {
140
+ baseUrl: 'https://www.scrapingcourse.com/ecommerce/',
141
+ });
142
+ console.log('Conditional workflow result:', result.data);
143
+ }
144
+ async function xpathSelectors(actionHelpers) {
145
+ const workflow = {
146
+ version: '1.0',
147
+ actions: [
148
+ {
149
+ action: 'wait',
150
+ value: 1,
151
+ },
152
+ {
153
+ id: 'titleByXPath',
154
+ action: 'extract',
155
+ target: { type: 'xpath', value: '//h1' },
156
+ },
157
+ {
158
+ id: 'allParagraphs',
159
+ action: 'extract',
160
+ target: { type: 'xpath', value: '//p[1]' },
161
+ },
162
+ ],
163
+ };
164
+ const result = await actionHelpers.scrapeWithWorkflow('https://www.scrapingcourse.com/ecommerce/', workflow);
165
+ console.log('XPath selectors result:', result.data);
166
+ }
167
+ async function javascriptEvaluation(actionHelpers) {
168
+ const workflow = {
169
+ version: '1.0',
170
+ actions: [
171
+ {
172
+ action: 'wait',
173
+ value: 1,
174
+ },
175
+ {
176
+ id: 'pageHeight',
177
+ action: 'evaluate',
178
+ value: '() => document.body.scrollHeight',
179
+ },
180
+ {
181
+ id: 'linkCount',
182
+ action: 'evaluate',
183
+ value: '() => document.querySelectorAll("a").length',
184
+ },
185
+ {
186
+ id: 'currentUrl',
187
+ action: 'evaluate',
188
+ value: '() => window.location.href',
189
+ },
190
+ ],
191
+ };
192
+ const result = await actionHelpers.scrapeWithWorkflow('https://www.scrapingcourse.com/ecommerce/', workflow);
193
+ console.log('JavaScript evaluation result:', result.data);
194
+ }
195
+ async function screenshotDebugging(actionHelpers) {
196
+ const workflow = {
197
+ version: '1.0',
198
+ actions: [
199
+ {
200
+ action: 'navigate',
201
+ value: '${baseUrl}',
202
+ },
203
+ {
204
+ action: 'wait',
205
+ value: 2,
206
+ },
207
+ {
208
+ action: 'screenshot',
209
+ value: './debug-screenshot.png',
210
+ },
211
+ {
212
+ id: 'title',
213
+ action: 'extract',
214
+ target: { type: 'css', value: 'h1' },
215
+ },
216
+ ],
217
+ };
218
+ const result = await actionHelpers.scrapeWithWorkflow('https://www.scrapingcourse.com/ecommerce/', workflow, {
219
+ baseUrl: 'https://www.scrapingcourse.com/ecommerce/',
220
+ });
221
+ console.log('Screenshot debugging result:', result.data);
222
+ }
223
+ async function dropdownSelection(actionHelpers) {
224
+ const workflow = {
225
+ version: '1.0',
226
+ actions: [
227
+ {
228
+ action: 'navigate',
229
+ value: '${baseUrl}',
230
+ },
231
+ {
232
+ action: 'waitFor',
233
+ target: { type: 'css', value: 'select[name="country"]' },
234
+ options: { timeout: 10000 },
235
+ },
236
+ {
237
+ action: 'select',
238
+ target: { type: 'css', value: 'select[name="country"]' },
239
+ value: '${countryCode}',
240
+ options: { scrollTo: true },
241
+ },
242
+ {
243
+ action: 'wait',
244
+ value: 1,
245
+ },
246
+ {
247
+ action: 'screenshot',
248
+ value: './after-selection.png',
249
+ },
250
+ ],
251
+ };
252
+ const result = await actionHelpers.scrapeWithWorkflow('https://www.scrapingcourse.com/ecommerce/', workflow, {
253
+ baseUrl: 'https://www.scrapingcourse.com/ecommerce/',
254
+ countryCode: 'US',
255
+ });
256
+ console.log('Dropdown selection completed:', result.success);
257
+ }
258
+ async function shadowDOMSupport(actionHelpers) {
259
+ const workflow = {
260
+ version: '1.0',
261
+ actions: [
262
+ {
263
+ action: 'navigate',
264
+ value: '${baseUrl}',
265
+ },
266
+ {
267
+ action: 'waitFor',
268
+ target: {
269
+ type: 'css',
270
+ value: 'my-web-component',
271
+ shadowHost: 'my-web-component',
272
+ },
273
+ options: { timeout: 10000 },
274
+ },
275
+ {
276
+ id: 'shadowContent',
277
+ action: 'extract',
278
+ target: {
279
+ type: 'css',
280
+ value: '.shadow-content',
281
+ shadowHost: 'my-web-component',
282
+ },
283
+ },
284
+ ],
285
+ };
286
+ const result = await actionHelpers.scrapeWithWorkflow('https://www.scrapingcourse.com/ecommerce/', workflow, {
287
+ baseUrl: 'https://www.scrapingcourse.com/ecommerce/',
288
+ });
289
+ console.log('Shadow DOM result:', result.data);
290
+ }
291
+ async function errorHandlingWithRetry(actionHelpers) {
292
+ const workflow = {
293
+ version: '1.0',
294
+ actions: [
295
+ {
296
+ action: 'navigate',
297
+ value: '${baseUrl}',
298
+ },
299
+ {
300
+ action: 'waitFor',
301
+ target: { type: 'css', value: '.dynamic-content' },
302
+ options: { timeout: 10000, retry: 3, retryDelay: 2000 },
303
+ },
304
+ {
305
+ id: 'content',
306
+ action: 'extract',
307
+ target: { type: 'css', value: '.dynamic-content' },
308
+ },
309
+ ],
310
+ onError: {
311
+ screenshot: true,
312
+ screenshotPath: './error-retry.png',
313
+ continue: false,
314
+ },
315
+ };
316
+ const result = await actionHelpers.scrapeWithWorkflow('https://www.scrapingcourse.com/ecommerce/', workflow, {
317
+ baseUrl: 'https://www.scrapingcourse.com/ecommerce/',
318
+ });
319
+ if (result.success) {
320
+ console.log('Content extracted:', result.data);
321
+ }
322
+ else {
323
+ console.error('Extraction failed:', result.errors);
324
+ }
325
+ }
326
+ async function ecommercePriceScraping(actionHelpers) {
327
+ const workflow = {
328
+ version: '1.0',
329
+ actions: [
330
+ {
331
+ action: 'navigate',
332
+ value: '${productUrl}',
333
+ },
334
+ {
335
+ action: 'waitFor',
336
+ target: { type: 'css', value: '.product_title' },
337
+ options: { timeout: 15000 },
338
+ },
339
+ {
340
+ action: 'scroll',
341
+ target: { type: 'css', value: '.product_title' },
342
+ },
343
+ {
344
+ id: 'productName',
345
+ action: 'extract',
346
+ target: { type: 'css', value: 'h1.product_title' },
347
+ },
348
+ {
349
+ id: 'price',
350
+ action: 'extract',
351
+ target: { type: 'css', value: '.product-price' },
352
+ },
353
+ {
354
+ id: 'availability',
355
+ action: 'extract',
356
+ target: { type: 'css', value: '.stock' },
357
+ },
358
+ {
359
+ id: 'sku',
360
+ action: 'extract',
361
+ target: { type: 'css', value: '.sku' },
362
+ },
363
+ {
364
+ action: 'screenshot',
365
+ value: './product-screenshot.png',
366
+ },
367
+ ],
368
+ onError: {
369
+ screenshot: true,
370
+ screenshotPath: './product-error.png',
371
+ continue: false,
372
+ },
373
+ };
374
+ const result = await actionHelpers.scrapeWithWorkflow('https://www.scrapingcourse.com/ecommerce/product/abominable-hoodie/', workflow, {
375
+ productUrl: 'https://www.scrapingcourse.com/ecommerce/product/abominable-hoodie/',
376
+ });
377
+ console.log('E-commerce product data:', result.data);
378
+ }
379
+ if (require.main === module) {
380
+ void (async () => {
381
+ const app = await core_1.NestFactory.createApplicationContext(AppModule, {
382
+ logger: false,
383
+ });
384
+ const service = await app.resolve(index_1.BrowserActionService);
385
+ try {
386
+ await simpleExtraction(service);
387
+ await formAutomation(service);
388
+ await conditionalWorkflow(service);
389
+ await xpathSelectors(service);
390
+ await javascriptEvaluation(service);
391
+ await screenshotDebugging(service);
392
+ await dropdownSelection(service);
393
+ await shadowDOMSupport(service);
394
+ await errorHandlingWithRetry(service);
395
+ await ecommercePriceScraping(service);
396
+ }
397
+ finally {
398
+ await app.close();
399
+ }
400
+ })();
401
+ }
402
+ //# sourceMappingURL=workflow-example.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-example.js","sourceRoot":"","sources":["../../src/examples/workflow-example.ts"],"names":[],"mappings":"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"}