57 lines
1.7 KiB
TypeScript
57 lines
1.7 KiB
TypeScript
import { chromium } from 'playwright';
|
||
import log from 'electron-log';
|
||
import { launchLocalChrome } from '@electron/utils/chrome/launchLocalChrome';
|
||
|
||
let recorderBrowser: any = null;
|
||
let recorderContext: any = null;
|
||
|
||
export async function startRecording(url?: string): Promise<{ success: boolean; code?: string; error?: string }> {
|
||
try {
|
||
await launchLocalChrome();
|
||
|
||
if (recorderBrowser) {
|
||
await stopRecording();
|
||
}
|
||
|
||
recorderBrowser = await chromium.connectOverCDP('http://127.0.0.1:9222');
|
||
recorderContext = recorderBrowser.contexts()[0] || (await recorderBrowser.newContext());
|
||
const page = await recorderContext.newPage();
|
||
const targetUrl = url || 'about:blank';
|
||
await page.goto(targetUrl, { waitUntil: 'domcontentloaded' });
|
||
|
||
// 唤起 Playwright Inspector,让用户手动录制并生成代码
|
||
await page.pause();
|
||
|
||
return {
|
||
success: true,
|
||
code: '',
|
||
};
|
||
} catch (error: any) {
|
||
log.error('[script-recorder-service] Failed to start recording:', error);
|
||
return {
|
||
success: false,
|
||
error: error?.message || 'Failed to start recording',
|
||
};
|
||
}
|
||
}
|
||
|
||
export async function stopRecording(): Promise<{ success: boolean; code?: string; error?: string }> {
|
||
try {
|
||
if (recorderContext) {
|
||
await recorderContext.close().catch(() => {});
|
||
recorderContext = null;
|
||
}
|
||
if (recorderBrowser) {
|
||
await recorderBrowser.close().catch(() => {});
|
||
recorderBrowser = null;
|
||
}
|
||
return { success: true, code: '' };
|
||
} catch (error: any) {
|
||
log.error('[script-recorder-service] Failed to stop recording:', error);
|
||
return {
|
||
success: false,
|
||
error: error?.message || 'Failed to stop recording',
|
||
};
|
||
}
|
||
}
|