brave-real-browser-mcp-server 2.14.8 → 2.14.10
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 +1 -1
- package/dist/handlers/advanced-scraping-handlers.js +58 -0
- package/dist/handlers/advanced-video-media-handlers.js +134 -1246
- package/dist/handlers/ai-powered-handlers.js +83 -184
- package/dist/handlers/data-extraction-handlers.js +0 -98
- package/dist/handlers/data-processing-handlers.js +0 -173
- package/dist/handlers/data-quality-handlers.js +39 -185
- package/dist/handlers/data-transform-handlers.js +66 -0
- package/dist/handlers/dom-handlers.js +206 -0
- package/dist/handlers/dynamic-session-handlers.js +0 -204
- package/dist/handlers/multi-element-handlers.js +0 -55
- package/dist/handlers/network-handlers.js +111 -0
- package/dist/handlers/pagination-handlers.js +0 -191
- package/dist/handlers/search-filter-handlers.js +15 -71
- package/dist/index.js +8 -59
- package/dist/mcp-server.js +135 -8
- package/dist/tool-definitions.js +113 -214
- package/package.json +2 -11
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
// @ts-nocheck
|
|
2
1
|
import { getPageInstance } from '../browser-manager.js';
|
|
3
2
|
/**
|
|
4
3
|
* Keyword Search - Advanced keyword search in page content
|
|
@@ -19,7 +18,7 @@ export async function handleKeywordSearch(args) {
|
|
|
19
18
|
keywordList.forEach(keyword => {
|
|
20
19
|
const flags = caseSens ? 'g' : 'gi';
|
|
21
20
|
const pattern = whole ? `\\b${keyword}\\b` : keyword;
|
|
22
|
-
const regex = new RegExp(pattern, flags);
|
|
21
|
+
//const regex = new RegExp(pattern, flags);
|
|
23
22
|
const walker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT, null);
|
|
24
23
|
let node;
|
|
25
24
|
while (node = walker.nextNode()) {
|
|
@@ -61,7 +60,7 @@ export async function handleKeywordSearch(args) {
|
|
|
61
60
|
matchesByKeyword: grouped,
|
|
62
61
|
allMatches: allMatches.slice(0, 100) // Limit to first 100
|
|
63
62
|
};
|
|
64
|
-
}, keywords, caseSensitive, wholeWord, context);
|
|
63
|
+
}, Array.isArray(keywords) ? keywords : [keywords], caseSensitive, wholeWord, context);
|
|
65
64
|
const resultText = `✅ Keyword Search Results\n\nTotal Matches: ${results.totalMatches}\n\nKeywords searched: ${Array.isArray(keywords) ? keywords.join(', ') : keywords}\n\nMatches by keyword:\n${JSON.stringify(results.matchesByKeyword, null, 2)}\n\nFirst 100 matches:\n${JSON.stringify(results.allMatches, null, 2)}`;
|
|
66
65
|
return {
|
|
67
66
|
content: [
|
|
@@ -74,12 +73,7 @@ export async function handleKeywordSearch(args) {
|
|
|
74
73
|
}
|
|
75
74
|
catch (error) {
|
|
76
75
|
return {
|
|
77
|
-
content: [
|
|
78
|
-
{
|
|
79
|
-
type: 'text',
|
|
80
|
-
text: `❌ Keyword search failed: ${error.message}`,
|
|
81
|
-
},
|
|
82
|
-
],
|
|
76
|
+
content: [{ type: 'text', text: `❌ Keyword search failed: ${error.message}` }],
|
|
83
77
|
isError: true,
|
|
84
78
|
};
|
|
85
79
|
}
|
|
@@ -109,14 +103,16 @@ export async function handleRegexPatternMatcher(args) {
|
|
|
109
103
|
const regex = new RegExp(pat, flgs);
|
|
110
104
|
const matches = [];
|
|
111
105
|
let match;
|
|
112
|
-
|
|
106
|
+
// Safety check for infinite loop
|
|
107
|
+
let count = 0;
|
|
108
|
+
while ((match = regex.exec(content)) !== null && count < 1000) {
|
|
109
|
+
count++;
|
|
113
110
|
matches.push({
|
|
114
111
|
match: match[0],
|
|
115
112
|
index: match.index,
|
|
116
113
|
groups: match.slice(1),
|
|
117
114
|
context: content.substring(Math.max(0, match.index - 50), Math.min(content.length, match.index + match[0].length + 50))
|
|
118
115
|
});
|
|
119
|
-
// Prevent infinite loop for zero-width matches
|
|
120
116
|
if (match.index === regex.lastIndex) {
|
|
121
117
|
regex.lastIndex++;
|
|
122
118
|
}
|
|
@@ -130,24 +126,11 @@ export async function handleRegexPatternMatcher(args) {
|
|
|
130
126
|
}, pattern, flags, selector || '');
|
|
131
127
|
const resultText = `✅ Regex Pattern Matcher Results\n\nPattern: ${results.pattern}\nFlags: ${results.flags}\nTotal Matches: ${results.totalMatches}\n\nMatches (first 100):\n${JSON.stringify(results.matches, null, 2)}`;
|
|
132
128
|
return {
|
|
133
|
-
content: [
|
|
134
|
-
{
|
|
135
|
-
type: 'text',
|
|
136
|
-
text: resultText,
|
|
137
|
-
},
|
|
138
|
-
],
|
|
129
|
+
content: [{ type: 'text', text: resultText }],
|
|
139
130
|
};
|
|
140
131
|
}
|
|
141
132
|
catch (error) {
|
|
142
|
-
return {
|
|
143
|
-
content: [
|
|
144
|
-
{
|
|
145
|
-
type: 'text',
|
|
146
|
-
text: `❌ Regex pattern matcher failed: ${error.message}`,
|
|
147
|
-
},
|
|
148
|
-
],
|
|
149
|
-
isError: true,
|
|
150
|
-
};
|
|
133
|
+
return { content: [{ type: 'text', text: `❌ Regex pattern matcher failed: ${error.message}` }], isError: true };
|
|
151
134
|
}
|
|
152
135
|
}
|
|
153
136
|
/**
|
|
@@ -205,24 +188,11 @@ export async function handleXPathSupport(args) {
|
|
|
205
188
|
}, xpath, returnType);
|
|
206
189
|
const resultText = `✅ XPath Query Results\n\nXPath: ${xpath}\nElements Found: ${results.count}\n\nElements:\n${JSON.stringify(results.elements, null, 2)}`;
|
|
207
190
|
return {
|
|
208
|
-
content: [
|
|
209
|
-
{
|
|
210
|
-
type: 'text',
|
|
211
|
-
text: resultText,
|
|
212
|
-
},
|
|
213
|
-
],
|
|
191
|
+
content: [{ type: 'text', text: resultText }],
|
|
214
192
|
};
|
|
215
193
|
}
|
|
216
194
|
catch (error) {
|
|
217
|
-
return {
|
|
218
|
-
content: [
|
|
219
|
-
{
|
|
220
|
-
type: 'text',
|
|
221
|
-
text: `❌ XPath query failed: ${error.message}`,
|
|
222
|
-
},
|
|
223
|
-
],
|
|
224
|
-
isError: true,
|
|
225
|
-
};
|
|
195
|
+
return { content: [{ type: 'text', text: `❌ XPath query failed: ${error.message}` }], isError: true };
|
|
226
196
|
}
|
|
227
197
|
}
|
|
228
198
|
/**
|
|
@@ -285,24 +255,11 @@ export async function handleAdvancedCSSSelectors(args) {
|
|
|
285
255
|
}, selector, operation, returnType);
|
|
286
256
|
const resultText = `✅ Advanced CSS Selector Results\n\nSelector: ${selector}\nOperation: ${operation}\nElements Found: ${results.count}\n\nElements (first 10):\n${JSON.stringify(results.elements.slice(0, 10), null, 2)}`;
|
|
287
257
|
return {
|
|
288
|
-
content: [
|
|
289
|
-
{
|
|
290
|
-
type: 'text',
|
|
291
|
-
text: resultText,
|
|
292
|
-
},
|
|
293
|
-
],
|
|
258
|
+
content: [{ type: 'text', text: resultText }],
|
|
294
259
|
};
|
|
295
260
|
}
|
|
296
261
|
catch (error) {
|
|
297
|
-
return {
|
|
298
|
-
content: [
|
|
299
|
-
{
|
|
300
|
-
type: 'text',
|
|
301
|
-
text: `❌ CSS selector query failed: ${error.message}`,
|
|
302
|
-
},
|
|
303
|
-
],
|
|
304
|
-
isError: true,
|
|
305
|
-
};
|
|
262
|
+
return { content: [{ type: 'text', text: `❌ CSS selector query failed: ${error.message}` }], isError: true };
|
|
306
263
|
}
|
|
307
264
|
}
|
|
308
265
|
/**
|
|
@@ -419,23 +376,10 @@ export async function handleVisualElementFinder(args) {
|
|
|
419
376
|
}, criteria);
|
|
420
377
|
const resultText = `✅ Visual Element Finder Results\n\nCriteria: ${JSON.stringify(criteria, null, 2)}\nTotal Matches: ${results.totalMatches}\n\nTop Matches:\n${JSON.stringify(results.topMatches, null, 2)}`;
|
|
421
378
|
return {
|
|
422
|
-
content: [
|
|
423
|
-
{
|
|
424
|
-
type: 'text',
|
|
425
|
-
text: resultText,
|
|
426
|
-
},
|
|
427
|
-
],
|
|
379
|
+
content: [{ type: 'text', text: resultText }],
|
|
428
380
|
};
|
|
429
381
|
}
|
|
430
382
|
catch (error) {
|
|
431
|
-
return {
|
|
432
|
-
content: [
|
|
433
|
-
{
|
|
434
|
-
type: 'text',
|
|
435
|
-
text: `❌ Visual element finder failed: ${error.message}`,
|
|
436
|
-
},
|
|
437
|
-
],
|
|
438
|
-
isError: true,
|
|
439
|
-
};
|
|
383
|
+
return { content: [{ type: 'text', text: `❌ Visual element finder failed: ${error.message}` }], isError: true };
|
|
440
384
|
}
|
|
441
385
|
}
|
package/dist/index.js
CHANGED
|
@@ -25,19 +25,19 @@ import { handleClick, handleType, handleSolveCaptcha, handleRandomScroll, } from
|
|
|
25
25
|
import { handleGetContent, handleFindSelector, } from "./handlers/content-handlers.js";
|
|
26
26
|
import { handleSaveContentAsMarkdown } from "./handlers/file-handlers.js";
|
|
27
27
|
// Import new data extraction handlers
|
|
28
|
-
import {
|
|
28
|
+
import { handleExtractList, handleExtractJSON, handleScrapeMetaTags, handleExtractSchema, } from "./handlers/data-extraction-handlers.js";
|
|
29
29
|
// Import multi-element handlers
|
|
30
|
-
import { handleBatchElementScraper, handleNestedDataExtraction, handleAttributeHarvester,
|
|
30
|
+
import { handleBatchElementScraper, handleNestedDataExtraction, handleAttributeHarvester, handleLinkHarvester, handleMediaExtractor, } from "./handlers/multi-element-handlers.js";
|
|
31
31
|
// Import pagination handlers
|
|
32
|
-
import {
|
|
32
|
+
import { handleMultiPageScraper, handleBreadcrumbNavigator, } from "./handlers/pagination-handlers.js";
|
|
33
33
|
// Import data processing handlers
|
|
34
|
-
import {
|
|
34
|
+
import { handleHTMLToText, handleDuplicateRemover, } from "./handlers/data-processing-handlers.js";
|
|
35
35
|
// Import AI-powered handlers
|
|
36
|
-
import { handleSmartSelectorGenerator, handleContentClassification,
|
|
36
|
+
import { handleSmartSelectorGenerator, handleContentClassification, } from "./handlers/ai-powered-handlers.js";
|
|
37
37
|
// Import search & filter handlers
|
|
38
38
|
import { handleKeywordSearch, handleRegexPatternMatcher, handleXPathSupport, handleAdvancedCSSSelectors, handleVisualElementFinder, } from "./handlers/search-filter-handlers.js";
|
|
39
39
|
// Import data quality handlers
|
|
40
|
-
import { handleDataDeduplication,
|
|
40
|
+
import { handleDataDeduplication, handleDataTypeValidator, handleOutlierDetection, } from "./handlers/data-quality-handlers.js";
|
|
41
41
|
// Import captcha handlers
|
|
42
42
|
import { handleOCREngine, handleAudioCaptchaSolver, handlePuzzleCaptchaHandler, } from "./handlers/captcha-handlers.js";
|
|
43
43
|
// Import visual tools handlers
|
|
@@ -45,7 +45,7 @@ import { handleFullPageScreenshot, handleElementScreenshot, handleVideoRecording
|
|
|
45
45
|
// Import smart data extractors
|
|
46
46
|
import { handleHtmlElementsExtractor, handleTagsFinder, handleLinksFinder, handleXpathLinks, handleAjaxExtractor, handleFetchXHR, handleNetworkRecorder, handleRegexPatternFinder, handleIframeExtractor, handleEmbedPageExtractor, handleImageExtractorAdvanced, handleVideoSourceExtractor, handleVideoPlayerExtractor, handleVideoPlayerHosterFinder, handleOriginalVideoHosterFinder, handleUrlRedirectTracer, handleUserAgentExtractor, } from "./handlers/smart-data-extractors.js";
|
|
47
47
|
// Import dynamic session handlers
|
|
48
|
-
import { handleShadowDOMExtractor, handleCookieManager,
|
|
48
|
+
import { handleShadowDOMExtractor, handleCookieManager, handleFormAutoFill, handleAjaxContentWaiter, } from "./handlers/dynamic-session-handlers.js";
|
|
49
49
|
// Import monitoring & reporting handlers
|
|
50
50
|
import { handleProgressTracker, handleDataQualityMetrics, } from "./handlers/monitoring-reporting-handlers.js";
|
|
51
51
|
// Import advanced video & media handlers
|
|
@@ -138,9 +138,6 @@ export async function executeToolByName(name, args) {
|
|
|
138
138
|
result = await handleSaveContentAsMarkdown(args);
|
|
139
139
|
break;
|
|
140
140
|
// Smart Data Extractors
|
|
141
|
-
case TOOL_NAMES.SCRAPE_TABLE:
|
|
142
|
-
result = await handleScrapeTable(args || {});
|
|
143
|
-
break;
|
|
144
141
|
case TOOL_NAMES.EXTRACT_LIST:
|
|
145
142
|
result = await handleExtractList(args || {});
|
|
146
143
|
break;
|
|
@@ -164,9 +161,6 @@ export async function executeToolByName(name, args) {
|
|
|
164
161
|
result = await handleAttributeHarvester(args);
|
|
165
162
|
break;
|
|
166
163
|
// Content Type Specific
|
|
167
|
-
case TOOL_NAMES.IMAGE_SCRAPER:
|
|
168
|
-
result = await handleImageScraper(args || {});
|
|
169
|
-
break;
|
|
170
164
|
case TOOL_NAMES.LINK_HARVESTER:
|
|
171
165
|
result = await handleLinkHarvester(args || {});
|
|
172
166
|
break;
|
|
@@ -174,38 +168,17 @@ export async function executeToolByName(name, args) {
|
|
|
174
168
|
result = await handleMediaExtractor(args || {});
|
|
175
169
|
break;
|
|
176
170
|
// Pagination Tools
|
|
177
|
-
|
|
178
|
-
result = await handleAutoPagination(args || {});
|
|
179
|
-
break;
|
|
180
|
-
case TOOL_NAMES.INFINITE_SCROLL:
|
|
181
|
-
result = await handleInfiniteScroll(args || {});
|
|
182
|
-
break;
|
|
171
|
+
// Pagination Tools
|
|
183
172
|
case TOOL_NAMES.MULTI_PAGE_SCRAPER:
|
|
184
173
|
result = await handleMultiPageScraper(args);
|
|
185
174
|
break;
|
|
186
|
-
case TOOL_NAMES.SITEMAP_PARSER:
|
|
187
|
-
result = await handleSitemapParser(args || {});
|
|
188
|
-
break;
|
|
189
175
|
case TOOL_NAMES.BREADCRUMB_NAVIGATOR:
|
|
190
176
|
result = await handleBreadcrumbNavigator(args || {});
|
|
191
177
|
break;
|
|
192
178
|
// Data Processing Tools
|
|
193
|
-
case TOOL_NAMES.SMART_TEXT_CLEANER:
|
|
194
|
-
result = await handleSmartTextCleaner(args);
|
|
195
|
-
break;
|
|
196
179
|
case TOOL_NAMES.HTML_TO_TEXT:
|
|
197
180
|
result = await handleHTMLToText(args);
|
|
198
181
|
break;
|
|
199
|
-
case TOOL_NAMES.CONTACT_EXTRACTOR:
|
|
200
|
-
result = await handleContactExtractor(args);
|
|
201
|
-
break;
|
|
202
|
-
// Data Validation Tools
|
|
203
|
-
case TOOL_NAMES.SCHEMA_VALIDATOR:
|
|
204
|
-
result = await handleSchemaValidator(args);
|
|
205
|
-
break;
|
|
206
|
-
case TOOL_NAMES.REQUIRED_FIELDS_CHECKER:
|
|
207
|
-
result = await handleRequiredFieldsChecker(args);
|
|
208
|
-
break;
|
|
209
182
|
case TOOL_NAMES.DUPLICATE_REMOVER:
|
|
210
183
|
result = await handleDuplicateRemover(args);
|
|
211
184
|
break;
|
|
@@ -216,15 +189,6 @@ export async function executeToolByName(name, args) {
|
|
|
216
189
|
case TOOL_NAMES.CONTENT_CLASSIFICATION:
|
|
217
190
|
result = await handleContentClassification(args);
|
|
218
191
|
break;
|
|
219
|
-
case TOOL_NAMES.SENTIMENT_ANALYSIS:
|
|
220
|
-
result = await handleSentimentAnalysis(args);
|
|
221
|
-
break;
|
|
222
|
-
case TOOL_NAMES.SUMMARY_GENERATOR:
|
|
223
|
-
result = await handleSummaryGenerator(args);
|
|
224
|
-
break;
|
|
225
|
-
case TOOL_NAMES.TRANSLATION_SUPPORT:
|
|
226
|
-
result = await handleTranslationSupport(args);
|
|
227
|
-
break;
|
|
228
192
|
// Search & Filter Tools
|
|
229
193
|
case TOOL_NAMES.KEYWORD_SEARCH:
|
|
230
194
|
result = await handleKeywordSearch(args);
|
|
@@ -245,18 +209,12 @@ export async function executeToolByName(name, args) {
|
|
|
245
209
|
case TOOL_NAMES.DATA_DEDUPLICATION:
|
|
246
210
|
result = await handleDataDeduplication(args);
|
|
247
211
|
break;
|
|
248
|
-
case TOOL_NAMES.MISSING_DATA_HANDLER:
|
|
249
|
-
result = await handleMissingDataHandler(args);
|
|
250
|
-
break;
|
|
251
212
|
case TOOL_NAMES.DATA_TYPE_VALIDATOR:
|
|
252
213
|
result = await handleDataTypeValidator(args);
|
|
253
214
|
break;
|
|
254
215
|
case TOOL_NAMES.OUTLIER_DETECTION:
|
|
255
216
|
result = await handleOutlierDetection(args);
|
|
256
217
|
break;
|
|
257
|
-
case TOOL_NAMES.CONSISTENCY_CHECKER:
|
|
258
|
-
result = await handleConsistencyChecker(args);
|
|
259
|
-
break;
|
|
260
218
|
// Advanced Captcha Handling
|
|
261
219
|
case TOOL_NAMES.OCR_ENGINE:
|
|
262
220
|
result = await handleOCREngine(args);
|
|
@@ -339,21 +297,12 @@ export async function executeToolByName(name, args) {
|
|
|
339
297
|
case "cookie_manager":
|
|
340
298
|
result = await handleCookieManager(args);
|
|
341
299
|
break;
|
|
342
|
-
case "session_persistence":
|
|
343
|
-
result = await handleSessionPersistence(args);
|
|
344
|
-
break;
|
|
345
300
|
case "form_auto_fill":
|
|
346
301
|
result = await handleFormAutoFill(args);
|
|
347
302
|
break;
|
|
348
303
|
case "ajax_content_waiter":
|
|
349
304
|
result = await handleAjaxContentWaiter(args);
|
|
350
305
|
break;
|
|
351
|
-
case "modal_popup_handler":
|
|
352
|
-
result = await handleModalPopupHandler(args);
|
|
353
|
-
break;
|
|
354
|
-
case "login_session_manager":
|
|
355
|
-
result = await handleLoginSessionManager(args);
|
|
356
|
-
break;
|
|
357
306
|
// Monitoring & Reporting
|
|
358
307
|
case "progress_tracker":
|
|
359
308
|
result = await handleProgressTracker(args || {});
|
package/dist/mcp-server.js
CHANGED
|
@@ -8,8 +8,18 @@ import { handleNavigate, handleWait } from './handlers/navigation-handlers.js';
|
|
|
8
8
|
import { handleClick, handleType, handlePressKey, handleSolveCaptcha, handleRandomScroll } from './handlers/interaction-handlers.js';
|
|
9
9
|
import { handleGetContent, handleFindSelector } from './handlers/content-handlers.js';
|
|
10
10
|
import { handleSaveContentAsMarkdown } from './handlers/file-handlers.js';
|
|
11
|
-
import {
|
|
12
|
-
import { handleBatchElementScraper, handleNestedDataExtraction, handleAttributeHarvester,
|
|
11
|
+
import { handleExtractList, handleExtractJSON, handleScrapeMetaTags, handleExtractSchema } from './handlers/data-extraction-handlers.js';
|
|
12
|
+
import { handleBatchElementScraper, handleNestedDataExtraction, handleAttributeHarvester, handleLinkHarvester, handleMediaExtractor, } from './handlers/multi-element-handlers.js';
|
|
13
|
+
import { handleMultiPageScraper, handleBreadcrumbNavigator } from './handlers/advanced-scraping-handlers.js';
|
|
14
|
+
import { handleHtmlElementsExtractor, handleTagsFinder, handleLinksFinder, handleXpathLinks, handleShadowDomExtractor, handleIframeExtractor, handleEmbedPageExtractor } from './handlers/dom-handlers.js';
|
|
15
|
+
import { handleNetworkRecorder, handleAjaxExtractor, handleFetchXhr, handleApiFinder } from './handlers/network-handlers.js';
|
|
16
|
+
import { handleHtmlToText, handleDuplicateRemover } from './handlers/data-transform-handlers.js';
|
|
17
|
+
import { handleConsistencyChecker } from './handlers/data-quality-handlers.js';
|
|
18
|
+
import { handleSmartSelectorGenerator, handleContentClassification, handleSentimentAnalysis, handleSummaryGenerator, handleTranslationSupport } from './handlers/ai-powered-handlers.js';
|
|
19
|
+
import { handleKeywordSearch, handleRegexPatternMatcher, handleXPathSupport, handleAdvancedCSSSelectors, handleVisualElementFinder } from './handlers/search-filter-handlers.js';
|
|
20
|
+
import { handleVideoSourceExtractor, handleVideoPlayerFinder, handleStreamDetector, handleRedirectTracer, handleVideoDownloadLinkFinder } from './handlers/advanced-video-media-handlers.js';
|
|
21
|
+
import { handleOCREngine, handleAudioCaptchaSolver, handlePuzzleCaptchaHandler } from './handlers/captcha-handlers.js';
|
|
22
|
+
import { handleAdvancedVideoExtraction, handleDeobfuscateJS, handleMultiLayerRedirectTrace, handleAdProtectionDetector } from './handlers/advanced-extraction-handlers.js';
|
|
13
23
|
export async function createMcpServer() {
|
|
14
24
|
const server = new Server(SERVER_INFO, { capabilities: CAPABILITIES });
|
|
15
25
|
// Register initialize handler
|
|
@@ -76,9 +86,6 @@ export async function createMcpServer() {
|
|
|
76
86
|
result = await handleSaveContentAsMarkdown(args);
|
|
77
87
|
break;
|
|
78
88
|
// Smart Data Extractors
|
|
79
|
-
case TOOL_NAMES.SCRAPE_TABLE:
|
|
80
|
-
result = await handleScrapeTable(args || {});
|
|
81
|
-
break;
|
|
82
89
|
case TOOL_NAMES.EXTRACT_LIST:
|
|
83
90
|
result = await handleExtractList(args || {});
|
|
84
91
|
break;
|
|
@@ -102,15 +109,135 @@ export async function createMcpServer() {
|
|
|
102
109
|
result = await handleAttributeHarvester(args);
|
|
103
110
|
break;
|
|
104
111
|
// Content Type Specific
|
|
105
|
-
case TOOL_NAMES.IMAGE_SCRAPER:
|
|
106
|
-
result = await handleImageScraper(args || {});
|
|
107
|
-
break;
|
|
108
112
|
case TOOL_NAMES.LINK_HARVESTER:
|
|
109
113
|
result = await handleLinkHarvester(args || {});
|
|
110
114
|
break;
|
|
111
115
|
case TOOL_NAMES.MEDIA_EXTRACTOR:
|
|
112
116
|
result = await handleMediaExtractor(args || {});
|
|
113
117
|
break;
|
|
118
|
+
// Phase 1: Pagination & Navigation
|
|
119
|
+
case TOOL_NAMES.MULTI_PAGE_SCRAPER:
|
|
120
|
+
result = await handleMultiPageScraper(args);
|
|
121
|
+
break;
|
|
122
|
+
case TOOL_NAMES.BREADCRUMB_NAVIGATOR:
|
|
123
|
+
result = await handleBreadcrumbNavigator(args);
|
|
124
|
+
break;
|
|
125
|
+
// Phase 1: DOM & HTML
|
|
126
|
+
case TOOL_NAMES.HTML_ELEMENTS_EXTRACTOR:
|
|
127
|
+
result = await handleHtmlElementsExtractor(args);
|
|
128
|
+
break;
|
|
129
|
+
case TOOL_NAMES.TAGS_FINDER:
|
|
130
|
+
result = await handleTagsFinder(args);
|
|
131
|
+
break;
|
|
132
|
+
case TOOL_NAMES.LINKS_FINDER:
|
|
133
|
+
result = await handleLinksFinder(args);
|
|
134
|
+
break;
|
|
135
|
+
case TOOL_NAMES.XPATH_LINKS:
|
|
136
|
+
result = await handleXpathLinks(args);
|
|
137
|
+
break;
|
|
138
|
+
case TOOL_NAMES.SHADOW_DOM_EXTRACTOR:
|
|
139
|
+
result = await handleShadowDomExtractor(args);
|
|
140
|
+
break;
|
|
141
|
+
case TOOL_NAMES.IFRAME_EXTRACTOR:
|
|
142
|
+
result = await handleIframeExtractor();
|
|
143
|
+
break;
|
|
144
|
+
case TOOL_NAMES.EMBED_PAGE_EXTRACTOR:
|
|
145
|
+
result = await handleEmbedPageExtractor();
|
|
146
|
+
break;
|
|
147
|
+
// Phase 1: Network Tools
|
|
148
|
+
case TOOL_NAMES.NETWORK_RECORDER:
|
|
149
|
+
result = await handleNetworkRecorder(args);
|
|
150
|
+
break;
|
|
151
|
+
case TOOL_NAMES.AJAX_EXTRACTOR:
|
|
152
|
+
result = await handleAjaxExtractor(args);
|
|
153
|
+
break;
|
|
154
|
+
case TOOL_NAMES.FETCH_XHR:
|
|
155
|
+
result = await handleFetchXhr(args);
|
|
156
|
+
break;
|
|
157
|
+
case TOOL_NAMES.API_FINDER:
|
|
158
|
+
result = await handleApiFinder(args);
|
|
159
|
+
break;
|
|
160
|
+
// Phase 1: Data Transform
|
|
161
|
+
case TOOL_NAMES.HTML_TO_TEXT:
|
|
162
|
+
result = await handleHtmlToText(args);
|
|
163
|
+
break;
|
|
164
|
+
case TOOL_NAMES.DUPLICATE_REMOVER:
|
|
165
|
+
result = await handleDuplicateRemover(args);
|
|
166
|
+
break;
|
|
167
|
+
// Phase 2: AI & Smart Features
|
|
168
|
+
case TOOL_NAMES.SMART_SELECTOR_GENERATOR:
|
|
169
|
+
result = await handleSmartSelectorGenerator(args);
|
|
170
|
+
break;
|
|
171
|
+
case TOOL_NAMES.CONTENT_CLASSIFICATION:
|
|
172
|
+
result = await handleContentClassification(args);
|
|
173
|
+
break;
|
|
174
|
+
case TOOL_NAMES.SENTIMENT_ANALYSIS:
|
|
175
|
+
result = await handleSentimentAnalysis(args);
|
|
176
|
+
break;
|
|
177
|
+
case TOOL_NAMES.SUMMARY_GENERATOR:
|
|
178
|
+
result = await handleSummaryGenerator(args);
|
|
179
|
+
break;
|
|
180
|
+
case TOOL_NAMES.TRANSLATION_SUPPORT:
|
|
181
|
+
result = await handleTranslationSupport(args);
|
|
182
|
+
break;
|
|
183
|
+
// Phase 2: Search & Filter
|
|
184
|
+
case TOOL_NAMES.KEYWORD_SEARCH:
|
|
185
|
+
result = await handleKeywordSearch(args);
|
|
186
|
+
break;
|
|
187
|
+
case TOOL_NAMES.REGEX_PATTERN_MATCHER:
|
|
188
|
+
result = await handleRegexPatternMatcher(args);
|
|
189
|
+
break;
|
|
190
|
+
case TOOL_NAMES.XPATH_SUPPORT:
|
|
191
|
+
result = await handleXPathSupport(args);
|
|
192
|
+
break;
|
|
193
|
+
case TOOL_NAMES.ADVANCED_CSS_SELECTORS:
|
|
194
|
+
result = await handleAdvancedCSSSelectors(args);
|
|
195
|
+
break;
|
|
196
|
+
case TOOL_NAMES.VISUAL_ELEMENT_FINDER:
|
|
197
|
+
result = await handleVisualElementFinder(args);
|
|
198
|
+
break;
|
|
199
|
+
// Phase 3: Media & Video
|
|
200
|
+
case TOOL_NAMES.VIDEO_SOURCE_EXTRACTOR:
|
|
201
|
+
result = await handleVideoSourceExtractor(args);
|
|
202
|
+
break;
|
|
203
|
+
case TOOL_NAMES.VIDEO_PLAYER_FINDER:
|
|
204
|
+
result = await handleVideoPlayerFinder(args);
|
|
205
|
+
break;
|
|
206
|
+
case TOOL_NAMES.STREAM_DETECTOR:
|
|
207
|
+
result = await handleStreamDetector(args);
|
|
208
|
+
break;
|
|
209
|
+
case TOOL_NAMES.REDIRECT_TRACER:
|
|
210
|
+
result = await handleRedirectTracer(args);
|
|
211
|
+
break;
|
|
212
|
+
case TOOL_NAMES.VIDEO_DOWNLOAD_LINK_FINDER:
|
|
213
|
+
result = await handleVideoDownloadLinkFinder(args);
|
|
214
|
+
break;
|
|
215
|
+
// Phase 4: Captcha & Security
|
|
216
|
+
case TOOL_NAMES.OCR_ENGINE:
|
|
217
|
+
result = await handleOCREngine(args);
|
|
218
|
+
break;
|
|
219
|
+
case TOOL_NAMES.AUDIO_CAPTCHA_SOLVER:
|
|
220
|
+
result = await handleAudioCaptchaSolver(args);
|
|
221
|
+
break;
|
|
222
|
+
case TOOL_NAMES.PUZZLE_CAPTCHA_HANDLER:
|
|
223
|
+
result = await handlePuzzleCaptchaHandler(args);
|
|
224
|
+
break;
|
|
225
|
+
// Advanced Extraction (Security/Bypass)
|
|
226
|
+
case "advanced_video_extraction":
|
|
227
|
+
result = await handleAdvancedVideoExtraction(args);
|
|
228
|
+
break;
|
|
229
|
+
case "deobfuscate_js":
|
|
230
|
+
result = await handleDeobfuscateJS(args);
|
|
231
|
+
break;
|
|
232
|
+
case "multi_layer_redirect_trace":
|
|
233
|
+
result = await handleMultiLayerRedirectTrace(args);
|
|
234
|
+
break;
|
|
235
|
+
case "ad_protection_detector":
|
|
236
|
+
result = await handleAdProtectionDetector(args);
|
|
237
|
+
break;
|
|
238
|
+
case "consistency_checker":
|
|
239
|
+
result = await handleConsistencyChecker(args);
|
|
240
|
+
break;
|
|
114
241
|
default:
|
|
115
242
|
throw new Error(`Unknown tool: ${name}`);
|
|
116
243
|
}
|