@nahisaho/katashiro-collector 0.2.2 → 0.2.5
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/dist/browser/ActionExecutor.d.ts +85 -0
- package/dist/browser/ActionExecutor.d.ts.map +1 -0
- package/dist/browser/ActionExecutor.js +171 -0
- package/dist/browser/ActionExecutor.js.map +1 -0
- package/dist/browser/BrowserAutomation.d.ts +147 -0
- package/dist/browser/BrowserAutomation.d.ts.map +1 -0
- package/dist/browser/BrowserAutomation.js +463 -0
- package/dist/browser/BrowserAutomation.js.map +1 -0
- package/dist/browser/ContentExtractor.d.ts +54 -0
- package/dist/browser/ContentExtractor.d.ts.map +1 -0
- package/dist/browser/ContentExtractor.js +159 -0
- package/dist/browser/ContentExtractor.js.map +1 -0
- package/dist/browser/SessionManager.d.ts +67 -0
- package/dist/browser/SessionManager.d.ts.map +1 -0
- package/dist/browser/SessionManager.js +173 -0
- package/dist/browser/SessionManager.js.map +1 -0
- package/dist/browser/index.d.ts +17 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +17 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/types.d.ts +361 -0
- package/dist/browser/types.d.ts.map +1 -0
- package/dist/browser/types.js +23 -0
- package/dist/browser/types.js.map +1 -0
- package/dist/document/DocumentParser.d.ts +91 -0
- package/dist/document/DocumentParser.d.ts.map +1 -0
- package/dist/document/DocumentParser.js +234 -0
- package/dist/document/DocumentParser.js.map +1 -0
- package/dist/document/index.d.ts +11 -0
- package/dist/document/index.d.ts.map +1 -0
- package/dist/document/index.js +10 -0
- package/dist/document/index.js.map +1 -0
- package/dist/document/parsers/DOCXParser.d.ts +63 -0
- package/dist/document/parsers/DOCXParser.d.ts.map +1 -0
- package/dist/document/parsers/DOCXParser.js +362 -0
- package/dist/document/parsers/DOCXParser.js.map +1 -0
- package/dist/document/parsers/PDFParser.d.ts +60 -0
- package/dist/document/parsers/PDFParser.d.ts.map +1 -0
- package/dist/document/parsers/PDFParser.js +338 -0
- package/dist/document/parsers/PDFParser.js.map +1 -0
- package/dist/document/parsers/XLSXParser.d.ts +55 -0
- package/dist/document/parsers/XLSXParser.d.ts.map +1 -0
- package/dist/document/parsers/XLSXParser.js +314 -0
- package/dist/document/parsers/XLSXParser.js.map +1 -0
- package/dist/document/parsers/index.d.ts +10 -0
- package/dist/document/parsers/index.d.ts.map +1 -0
- package/dist/document/parsers/index.js +10 -0
- package/dist/document/parsers/index.js.map +1 -0
- package/dist/document/types.d.ts +251 -0
- package/dist/document/types.d.ts.map +1 -0
- package/dist/document/types.js +13 -0
- package/dist/document/types.js.map +1 -0
- package/dist/index.d.ts +7 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -2
- package/dist/index.js.map +1 -1
- package/dist/research/CoverageAnalyzer.d.ts +50 -0
- package/dist/research/CoverageAnalyzer.d.ts.map +1 -0
- package/dist/research/CoverageAnalyzer.js +169 -0
- package/dist/research/CoverageAnalyzer.js.map +1 -0
- package/dist/research/QueryPlanner.d.ts +57 -0
- package/dist/research/QueryPlanner.d.ts.map +1 -0
- package/dist/research/QueryPlanner.js +102 -0
- package/dist/research/QueryPlanner.js.map +1 -0
- package/dist/research/ResultAggregator.d.ts +39 -0
- package/dist/research/ResultAggregator.d.ts.map +1 -0
- package/dist/research/ResultAggregator.js +85 -0
- package/dist/research/ResultAggregator.js.map +1 -0
- package/dist/research/WideResearchEngine.d.ts +110 -0
- package/dist/research/WideResearchEngine.d.ts.map +1 -0
- package/dist/research/WideResearchEngine.js +330 -0
- package/dist/research/WideResearchEngine.js.map +1 -0
- package/dist/research/agents/AcademicSearchAgent.d.ts +57 -0
- package/dist/research/agents/AcademicSearchAgent.d.ts.map +1 -0
- package/dist/research/agents/AcademicSearchAgent.js +180 -0
- package/dist/research/agents/AcademicSearchAgent.js.map +1 -0
- package/dist/research/agents/EncyclopediaAgent.d.ts +49 -0
- package/dist/research/agents/EncyclopediaAgent.d.ts.map +1 -0
- package/dist/research/agents/EncyclopediaAgent.js +153 -0
- package/dist/research/agents/EncyclopediaAgent.js.map +1 -0
- package/dist/research/agents/NewsSearchAgent.d.ts +38 -0
- package/dist/research/agents/NewsSearchAgent.d.ts.map +1 -0
- package/dist/research/agents/NewsSearchAgent.js +146 -0
- package/dist/research/agents/NewsSearchAgent.js.map +1 -0
- package/dist/research/agents/WebSearchAgent.d.ts +45 -0
- package/dist/research/agents/WebSearchAgent.d.ts.map +1 -0
- package/dist/research/agents/WebSearchAgent.js +135 -0
- package/dist/research/agents/WebSearchAgent.js.map +1 -0
- package/dist/research/agents/index.d.ts +13 -0
- package/dist/research/agents/index.d.ts.map +1 -0
- package/dist/research/agents/index.js +12 -0
- package/dist/research/agents/index.js.map +1 -0
- package/dist/research/agents/types.d.ts +60 -0
- package/dist/research/agents/types.d.ts.map +1 -0
- package/dist/research/agents/types.js +9 -0
- package/dist/research/agents/types.js.map +1 -0
- package/dist/research/index.d.ts +16 -0
- package/dist/research/index.d.ts.map +1 -0
- package/dist/research/index.js +17 -0
- package/dist/research/index.js.map +1 -0
- package/dist/research/types.d.ts +206 -0
- package/dist/research/types.d.ts.map +1 -0
- package/dist/research/types.js +33 -0
- package/dist/research/types.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ActionExecutor - ブラウザアクションを実行
|
|
3
|
+
*
|
|
4
|
+
* @requirement REQ-COLLECT-009
|
|
5
|
+
* @design DES-COLLECT-009-BrowserAutomation
|
|
6
|
+
*/
|
|
7
|
+
import type { BrowserAction, ActionResult } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Puppeteer Page インターフェース(抽象化)
|
|
10
|
+
*/
|
|
11
|
+
export interface BrowserPage {
|
|
12
|
+
goto(url: string, options?: unknown): Promise<unknown>;
|
|
13
|
+
click(selector: string, options?: unknown): Promise<void>;
|
|
14
|
+
type(selector: string, text: string, options?: unknown): Promise<void>;
|
|
15
|
+
select(selector: string, ...values: string[]): Promise<string[]>;
|
|
16
|
+
hover(selector: string): Promise<void>;
|
|
17
|
+
screenshot(options?: unknown): Promise<Buffer | string>;
|
|
18
|
+
pdf(options?: unknown): Promise<Buffer>;
|
|
19
|
+
evaluate<T>(fn: string | ((...args: unknown[]) => T), ...args: unknown[]): Promise<T>;
|
|
20
|
+
waitForSelector(selector: string, options?: unknown): Promise<unknown>;
|
|
21
|
+
$eval<T>(selector: string, fn: (el: any, ...args: any[]) => T, ...args: any[]): Promise<T>;
|
|
22
|
+
$$eval<T>(selector: string, fn: (els: any[], ...args: any[]) => T, ...args: any[]): Promise<T>;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* ブラウザアクションを実行
|
|
26
|
+
*/
|
|
27
|
+
export declare class ActionExecutor {
|
|
28
|
+
/**
|
|
29
|
+
* アクションを実行
|
|
30
|
+
*/
|
|
31
|
+
execute(page: BrowserPage, action: BrowserAction): Promise<ActionResult>;
|
|
32
|
+
/**
|
|
33
|
+
* アクションを内部実行
|
|
34
|
+
*/
|
|
35
|
+
private executeAction;
|
|
36
|
+
/**
|
|
37
|
+
* navigate アクション
|
|
38
|
+
*/
|
|
39
|
+
private executeNavigate;
|
|
40
|
+
/**
|
|
41
|
+
* click アクション
|
|
42
|
+
*/
|
|
43
|
+
private executeClick;
|
|
44
|
+
/**
|
|
45
|
+
* type アクション
|
|
46
|
+
*/
|
|
47
|
+
private executeType;
|
|
48
|
+
/**
|
|
49
|
+
* wait アクション
|
|
50
|
+
*/
|
|
51
|
+
private executeWait;
|
|
52
|
+
/**
|
|
53
|
+
* scroll アクション
|
|
54
|
+
*/
|
|
55
|
+
private executeScroll;
|
|
56
|
+
/**
|
|
57
|
+
* select アクション
|
|
58
|
+
*/
|
|
59
|
+
private executeSelect;
|
|
60
|
+
/**
|
|
61
|
+
* hover アクション
|
|
62
|
+
*/
|
|
63
|
+
private executeHover;
|
|
64
|
+
/**
|
|
65
|
+
* screenshot アクション
|
|
66
|
+
*/
|
|
67
|
+
private executeScreenshot;
|
|
68
|
+
/**
|
|
69
|
+
* pdf アクション
|
|
70
|
+
*/
|
|
71
|
+
private executePdf;
|
|
72
|
+
/**
|
|
73
|
+
* evaluate アクション
|
|
74
|
+
*/
|
|
75
|
+
private executeEvaluate;
|
|
76
|
+
/**
|
|
77
|
+
* waitForSelector アクション
|
|
78
|
+
*/
|
|
79
|
+
private executeWaitForSelector;
|
|
80
|
+
/**
|
|
81
|
+
* extract アクション
|
|
82
|
+
*/
|
|
83
|
+
private executeExtract;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=ActionExecutor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ActionExecutor.d.ts","sourceRoot":"","sources":["../../src/browser/ActionExecutor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EAab,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACvD,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACjE,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,UAAU,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IACxD,GAAG,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACtF,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACvE,KAAK,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3F,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAChG;AAED;;GAEG;AACH,qBAAa,cAAc;IACzB;;OAEG;IACG,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAqB9E;;OAEG;YACW,aAAa;IAkC3B;;OAEG;YACW,eAAe;IAQ7B;;OAEG;YACW,YAAY;IAQ1B;;OAEG;YACW,WAAW;IAazB;;OAEG;YACW,WAAW;IAKzB;;OAEG;YACW,aAAa;IAc3B;;OAEG;YACW,aAAa;IAQ3B;;OAEG;YACW,YAAY;IAQ1B;;OAEG;YACW,iBAAiB;IAQ/B;;OAEG;YACW,UAAU;IAQxB;;OAEG;YACW,eAAe;IAQ7B;;OAEG;YACW,sBAAsB;IAQpC;;OAEG;YACW,cAAc;CA0B7B"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ActionExecutor - ブラウザアクションを実行
|
|
3
|
+
*
|
|
4
|
+
* @requirement REQ-COLLECT-009
|
|
5
|
+
* @design DES-COLLECT-009-BrowserAutomation
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* ブラウザアクションを実行
|
|
9
|
+
*/
|
|
10
|
+
export class ActionExecutor {
|
|
11
|
+
/**
|
|
12
|
+
* アクションを実行
|
|
13
|
+
*/
|
|
14
|
+
async execute(page, action) {
|
|
15
|
+
const startTime = Date.now();
|
|
16
|
+
try {
|
|
17
|
+
const result = await this.executeAction(page, action);
|
|
18
|
+
return {
|
|
19
|
+
actionType: action.type,
|
|
20
|
+
success: true,
|
|
21
|
+
duration: Date.now() - startTime,
|
|
22
|
+
...result,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
return {
|
|
27
|
+
actionType: action.type,
|
|
28
|
+
success: false,
|
|
29
|
+
error: error instanceof Error ? error.message : String(error),
|
|
30
|
+
duration: Date.now() - startTime,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* アクションを内部実行
|
|
36
|
+
*/
|
|
37
|
+
async executeAction(page, action) {
|
|
38
|
+
switch (action.type) {
|
|
39
|
+
case 'navigate':
|
|
40
|
+
return this.executeNavigate(page, action);
|
|
41
|
+
case 'click':
|
|
42
|
+
return this.executeClick(page, action);
|
|
43
|
+
case 'type':
|
|
44
|
+
return this.executeType(page, action);
|
|
45
|
+
case 'wait':
|
|
46
|
+
return this.executeWait(action);
|
|
47
|
+
case 'scroll':
|
|
48
|
+
return this.executeScroll(page, action);
|
|
49
|
+
case 'select':
|
|
50
|
+
return this.executeSelect(page, action);
|
|
51
|
+
case 'hover':
|
|
52
|
+
return this.executeHover(page, action);
|
|
53
|
+
case 'screenshot':
|
|
54
|
+
return this.executeScreenshot(page, action);
|
|
55
|
+
case 'pdf':
|
|
56
|
+
return this.executePdf(page, action);
|
|
57
|
+
case 'evaluate':
|
|
58
|
+
return this.executeEvaluate(page, action);
|
|
59
|
+
case 'waitForSelector':
|
|
60
|
+
return this.executeWaitForSelector(page, action);
|
|
61
|
+
case 'extract':
|
|
62
|
+
return this.executeExtract(page, action);
|
|
63
|
+
default:
|
|
64
|
+
throw new Error(`Unknown action type: ${action.type}`);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* navigate アクション
|
|
69
|
+
*/
|
|
70
|
+
async executeNavigate(page, action) {
|
|
71
|
+
await page.goto(action.url, action.options);
|
|
72
|
+
return {};
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* click アクション
|
|
76
|
+
*/
|
|
77
|
+
async executeClick(page, action) {
|
|
78
|
+
await page.click(action.selector, action.options);
|
|
79
|
+
return {};
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* type アクション
|
|
83
|
+
*/
|
|
84
|
+
async executeType(page, action) {
|
|
85
|
+
if (action.options?.clear) {
|
|
86
|
+
await page.click(action.selector, { clickCount: 3 });
|
|
87
|
+
}
|
|
88
|
+
await page.type(action.selector, action.text, {
|
|
89
|
+
delay: action.options?.delay,
|
|
90
|
+
});
|
|
91
|
+
return {};
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* wait アクション
|
|
95
|
+
*/
|
|
96
|
+
async executeWait(action) {
|
|
97
|
+
await new Promise(resolve => setTimeout(resolve, action.duration));
|
|
98
|
+
return {};
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* scroll アクション
|
|
102
|
+
*/
|
|
103
|
+
async executeScroll(page, action) {
|
|
104
|
+
if (typeof action.target === 'string') {
|
|
105
|
+
await page.evaluate(`document.querySelector('${action.target}')?.scrollIntoView()`);
|
|
106
|
+
}
|
|
107
|
+
else if (action.target) {
|
|
108
|
+
await page.evaluate(`window.scrollTo(${action.target.x}, ${action.target.y})`);
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
await page.evaluate('window.scrollTo(0, document.body.scrollHeight)');
|
|
112
|
+
}
|
|
113
|
+
return {};
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* select アクション
|
|
117
|
+
*/
|
|
118
|
+
async executeSelect(page, action) {
|
|
119
|
+
const selected = await page.select(action.selector, ...action.values);
|
|
120
|
+
return { data: selected };
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* hover アクション
|
|
124
|
+
*/
|
|
125
|
+
async executeHover(page, action) {
|
|
126
|
+
await page.hover(action.selector);
|
|
127
|
+
return {};
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* screenshot アクション
|
|
131
|
+
*/
|
|
132
|
+
async executeScreenshot(page, action) {
|
|
133
|
+
const screenshot = await page.screenshot(action.options);
|
|
134
|
+
return { screenshot: screenshot };
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* pdf アクション
|
|
138
|
+
*/
|
|
139
|
+
async executePdf(page, action) {
|
|
140
|
+
const pdf = await page.pdf(action.options);
|
|
141
|
+
return { pdf };
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* evaluate アクション
|
|
145
|
+
*/
|
|
146
|
+
async executeEvaluate(page, action) {
|
|
147
|
+
const data = await page.evaluate(action.script, ...(action.args || []));
|
|
148
|
+
return { data };
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* waitForSelector アクション
|
|
152
|
+
*/
|
|
153
|
+
async executeWaitForSelector(page, action) {
|
|
154
|
+
await page.waitForSelector(action.selector, action.options);
|
|
155
|
+
return {};
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* extract アクション
|
|
159
|
+
*/
|
|
160
|
+
async executeExtract(page, action) {
|
|
161
|
+
let extractedText;
|
|
162
|
+
if (action.multiple) {
|
|
163
|
+
extractedText = await page.$$eval(action.selector, (els, attr) => els.map((el) => attr ? el.getAttribute(attr) || '' : el.textContent || ''), action.attribute);
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
extractedText = await page.$eval(action.selector, (el, attr) => attr ? el.getAttribute(attr) || '' : el.textContent || '', action.attribute);
|
|
167
|
+
}
|
|
168
|
+
return { extractedText };
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=ActionExecutor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ActionExecutor.js","sourceRoot":"","sources":["../../src/browser/ActionExecutor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAoCH;;GAEG;AACH,MAAM,OAAO,cAAc;IACzB;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,IAAiB,EAAE,MAAqB;QACpD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACtD,OAAO;gBACL,UAAU,EAAE,MAAM,CAAC,IAAI;gBACvB,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;gBAChC,GAAG,MAAM;aACV,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,UAAU,EAAE,MAAM,CAAC,IAAI;gBACvB,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC7D,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACjC,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,aAAa,CACzB,IAAiB,EACjB,MAAqB;QAErB,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,KAAK,UAAU;gBACb,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC5C,KAAK,OAAO;gBACV,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACzC,KAAK,MAAM;gBACT,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACxC,KAAK,MAAM;gBACT,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAClC,KAAK,QAAQ;gBACX,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC1C,KAAK,QAAQ;gBACX,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC1C,KAAK,OAAO;gBACV,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACzC,KAAK,YAAY;gBACf,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC9C,KAAK,KAAK;gBACR,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACvC,KAAK,UAAU;gBACb,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC5C,KAAK,iBAAiB;gBACpB,OAAO,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACnD,KAAK,SAAS;gBACZ,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC3C;gBACE,MAAM,IAAI,KAAK,CAAC,wBAAyB,MAAwB,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,eAAe,CAC3B,IAAiB,EACjB,MAAsB;QAEtB,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAC5C,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,YAAY,CACxB,IAAiB,EACjB,MAAmB;QAEnB,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAClD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,WAAW,CACvB,IAAiB,EACjB,MAAkB;QAElB,IAAI,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;YAC1B,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;QACvD,CAAC;QACD,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE;YAC5C,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK;SAC7B,CAAC,CAAC;QACH,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,WAAW,CAAC,MAAkB;QAC1C,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QACnE,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,aAAa,CACzB,IAAiB,EACjB,MAAoB;QAEpB,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACtC,MAAM,IAAI,CAAC,QAAQ,CAAC,2BAA2B,MAAM,CAAC,MAAM,sBAAsB,CAAC,CAAC;QACtF,CAAC;aAAM,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YACzB,MAAM,IAAI,CAAC,QAAQ,CAAC,mBAAmB,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;QACjF,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,CAAC,QAAQ,CAAC,gDAAgD,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,aAAa,CACzB,IAAiB,EACjB,MAAoB;QAEpB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QACtE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC5B,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,YAAY,CACxB,IAAiB,EACjB,MAAmB;QAEnB,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,iBAAiB,CAC7B,IAAiB,EACjB,MAAwB;QAExB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACzD,OAAO,EAAE,UAAU,EAAE,UAAoB,EAAE,CAAC;IAC9C,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,UAAU,CACtB,IAAiB,EACjB,MAAiB;QAEjB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC3C,OAAO,EAAE,GAAG,EAAE,CAAC;IACjB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,eAAe,CAC3B,IAAiB,EACjB,MAAsB;QAEtB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;QACxE,OAAO,EAAE,IAAI,EAAE,CAAC;IAClB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,sBAAsB,CAClC,IAAiB,EACjB,MAA6B;QAE7B,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAC5D,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc,CAC1B,IAAiB,EACjB,MAAqB;QAErB,IAAI,aAAgC,CAAC;QAErC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpB,aAAa,GAAG,MAAM,IAAI,CAAC,MAAM,CAC/B,MAAM,CAAC,QAAQ,EACf,CAAC,GAAU,EAAE,IAAS,EAAE,EAAE,CACxB,GAAG,CAAC,GAAG,CAAC,CAAC,EAAO,EAAE,EAAE,CAClB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,IAAI,EAAE,CAC1D,EACH,MAAM,CAAC,SAAS,CACjB,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,aAAa,GAAG,MAAM,IAAI,CAAC,KAAK,CAC9B,MAAM,CAAC,QAAQ,EACf,CAAC,EAAO,EAAE,IAAS,EAAE,EAAE,CACrB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,IAAI,EAAE,EAC3D,MAAM,CAAC,SAAS,CACjB,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,aAAa,EAAE,CAAC;IAC3B,CAAC;CACF"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BrowserAutomation - ブラウザ自動化メインクラス
|
|
3
|
+
*
|
|
4
|
+
* Puppeteerベースのブラウザ自動化機能を提供する。
|
|
5
|
+
* JavaScriptで動的に生成されるページや認証が必要なサイトから情報を収集する。
|
|
6
|
+
*
|
|
7
|
+
* @requirement REQ-COLLECT-009
|
|
8
|
+
* @design DES-COLLECT-009-BrowserAutomation
|
|
9
|
+
*/
|
|
10
|
+
import { type Result } from '@nahisaho/katashiro-core';
|
|
11
|
+
import type { BrowserConfig, BrowserAction, ActionResult, PageScrapeResult, SessionInfo, AuthCredentials, LoginSelectors, BrowserScript, NavigationOptions, ExtractorConfig, ScreenshotOptions, PdfOptions } from './types.js';
|
|
12
|
+
import { type BrowserPage } from './ActionExecutor.js';
|
|
13
|
+
import { SessionManager } from './SessionManager.js';
|
|
14
|
+
/**
|
|
15
|
+
* Puppeteer Browser インターフェース(抽象化)
|
|
16
|
+
*/
|
|
17
|
+
export interface Browser {
|
|
18
|
+
newPage(): Promise<BrowserPage>;
|
|
19
|
+
close(): Promise<void>;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Puppeteer ランチャー
|
|
23
|
+
*/
|
|
24
|
+
export interface PuppeteerLauncher {
|
|
25
|
+
launch(options?: unknown): Promise<Browser>;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* BrowserAutomation エラーコード
|
|
29
|
+
*/
|
|
30
|
+
export type BrowserAutomationErrorCode = 'BROWSER_NOT_INITIALIZED' | 'NAVIGATION_FAILED' | 'ACTION_FAILED' | 'EXTRACTION_FAILED' | 'SESSION_NOT_FOUND' | 'AUTHENTICATION_FAILED' | 'TIMEOUT';
|
|
31
|
+
/**
|
|
32
|
+
* BrowserAutomation エラー
|
|
33
|
+
*/
|
|
34
|
+
export declare class BrowserAutomationError extends Error {
|
|
35
|
+
readonly code: BrowserAutomationErrorCode;
|
|
36
|
+
readonly cause?: Error | undefined;
|
|
37
|
+
constructor(code: BrowserAutomationErrorCode, message: string, cause?: Error | undefined);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Browser Automation
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* ```typescript
|
|
44
|
+
* const browser = new BrowserAutomation();
|
|
45
|
+
*
|
|
46
|
+
* // シンプルなスクレイピング
|
|
47
|
+
* const result = await browser.scrape('https://example.com');
|
|
48
|
+
* if (isOk(result)) {
|
|
49
|
+
* console.log(result.value.content);
|
|
50
|
+
* }
|
|
51
|
+
*
|
|
52
|
+
* // スクリーンショット
|
|
53
|
+
* const screenshot = await browser.screenshot('https://example.com');
|
|
54
|
+
*
|
|
55
|
+
* await browser.close();
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
export declare class BrowserAutomation {
|
|
59
|
+
private config;
|
|
60
|
+
private browser;
|
|
61
|
+
private executor;
|
|
62
|
+
private extractor;
|
|
63
|
+
private sessionManager;
|
|
64
|
+
private puppeteer;
|
|
65
|
+
constructor(config?: Partial<BrowserConfig>);
|
|
66
|
+
/**
|
|
67
|
+
* Puppeteerランチャーを設定(DI用)
|
|
68
|
+
*/
|
|
69
|
+
setPuppeteer(puppeteer: PuppeteerLauncher): void;
|
|
70
|
+
/**
|
|
71
|
+
* ブラウザを初期化
|
|
72
|
+
*/
|
|
73
|
+
initialize(): Promise<void>;
|
|
74
|
+
/**
|
|
75
|
+
* ブラウザを終了
|
|
76
|
+
*/
|
|
77
|
+
close(): Promise<void>;
|
|
78
|
+
/**
|
|
79
|
+
* ブラウザが初期化されているか
|
|
80
|
+
*/
|
|
81
|
+
isInitialized(): boolean;
|
|
82
|
+
/**
|
|
83
|
+
* ページをスクレイピング
|
|
84
|
+
*/
|
|
85
|
+
scrape(url: string, options?: NavigationOptions & {
|
|
86
|
+
extractors?: ExtractorConfig[];
|
|
87
|
+
screenshot?: boolean;
|
|
88
|
+
}): Promise<Result<PageScrapeResult, BrowserAutomationError>>;
|
|
89
|
+
/**
|
|
90
|
+
* スクリプトを実行
|
|
91
|
+
*/
|
|
92
|
+
runScript(script: BrowserScript): Promise<Result<ActionResult[], BrowserAutomationError>>;
|
|
93
|
+
/**
|
|
94
|
+
* 単一アクションを実行
|
|
95
|
+
*/
|
|
96
|
+
executeAction(url: string, action: BrowserAction): Promise<Result<ActionResult, BrowserAutomationError>>;
|
|
97
|
+
/**
|
|
98
|
+
* スクリーンショットを取得
|
|
99
|
+
*/
|
|
100
|
+
screenshot(url: string, options?: ScreenshotOptions & {
|
|
101
|
+
waitUntil?: NavigationOptions['waitUntil'];
|
|
102
|
+
}): Promise<Result<Buffer, BrowserAutomationError>>;
|
|
103
|
+
/**
|
|
104
|
+
* PDFを生成
|
|
105
|
+
*/
|
|
106
|
+
pdf(url: string, options?: PdfOptions & {
|
|
107
|
+
waitUntil?: NavigationOptions['waitUntil'];
|
|
108
|
+
}): Promise<Result<Buffer, BrowserAutomationError>>;
|
|
109
|
+
/**
|
|
110
|
+
* 認証付きでページにアクセス
|
|
111
|
+
*/
|
|
112
|
+
scrapeWithAuth(url: string, loginUrl: string, credentials: AuthCredentials, loginSelectors: LoginSelectors): Promise<Result<PageScrapeResult, BrowserAutomationError>>;
|
|
113
|
+
/**
|
|
114
|
+
* 無限スクロールを処理
|
|
115
|
+
*/
|
|
116
|
+
scrapeInfiniteScroll(url: string, options?: {
|
|
117
|
+
maxScrolls?: number;
|
|
118
|
+
scrollDelay?: number;
|
|
119
|
+
contentSelector?: string;
|
|
120
|
+
}): Promise<Result<PageScrapeResult, BrowserAutomationError>>;
|
|
121
|
+
/**
|
|
122
|
+
* セッションを保存
|
|
123
|
+
*/
|
|
124
|
+
saveSession(name: string): Promise<Result<SessionInfo, BrowserAutomationError>>;
|
|
125
|
+
/**
|
|
126
|
+
* セッションを復元
|
|
127
|
+
*/
|
|
128
|
+
loadSession(name: string): Promise<Result<void, BrowserAutomationError>>;
|
|
129
|
+
/**
|
|
130
|
+
* 新しいページを作成
|
|
131
|
+
*/
|
|
132
|
+
private createPage;
|
|
133
|
+
/**
|
|
134
|
+
* 変数を置換
|
|
135
|
+
*/
|
|
136
|
+
private processVariables;
|
|
137
|
+
/**
|
|
138
|
+
* 設定を取得
|
|
139
|
+
*/
|
|
140
|
+
getConfig(): BrowserConfig;
|
|
141
|
+
/**
|
|
142
|
+
* セッションマネージャーを取得
|
|
143
|
+
*/
|
|
144
|
+
getSessionManager(): SessionManager;
|
|
145
|
+
}
|
|
146
|
+
export default BrowserAutomation;
|
|
147
|
+
//# sourceMappingURL=BrowserAutomation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BrowserAutomation.d.ts","sourceRoot":"","sources":["../../src/browser/BrowserAutomation.ts"],"names":[],"mappings":"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"}
|