Skip to content

Commit 726bbfa

Browse files
committed
feat: 减少和删除过于保守的等待时间,提升速度
1 parent 72b6dbc commit 726bbfa

22 files changed

Lines changed: 428 additions & 535 deletions

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [3.4.6] - 2026-01-11
9+
10+
### 🔄 Changed
11+
- **优化速度**
12+
- 删除或减少过于保守的控件等待时间
13+
814
## [3.4.5] - 2026-01-11
915

1016
### ✨ Added

src/backend/adapter/chatgpt.js

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@
44

55
import {
66
sleep,
7+
humanType,
78
safeClick,
89
uploadFilesViaChooser
910
} from '../engine/utils.js';
1011
import {
11-
fillPrompt,
1212
normalizePageError,
1313
moveMouseAway,
1414
waitForInput,
@@ -41,14 +41,14 @@ async function generate(context, prompt, imgPaths, modelId, meta = {}) {
4141

4242
// 1. 等待输入框加载
4343
await waitForInput(page, INPUT_SELECTOR, { click: false });
44-
await sleep(1500, 2500);
4544

4645
// 2. 上传图片
4746
if (imgPaths && imgPaths.length > 0) {
47+
4848
const expectedUploads = imgPaths.length;
4949
let uploadedCount = 0;
5050
let processedCount = 0;
51-
51+
logger.info('适配器', `开始上传 ${expectedUploads} 张图片...`, meta);
5252
logger.debug('适配器', '点击添加文件按钮...', meta);
5353
const addFilesBtn = page.getByRole('button', { name: 'Add files and more' });
5454

@@ -75,17 +75,16 @@ async function generate(context, prompt, imgPaths, modelId, meta = {}) {
7575
return false;
7676
}
7777
});
78-
79-
await sleep(1000, 2000);
78+
logger.info('适配器', '图片上传完成', meta);
8079
}
8180

82-
// 3. 填写提示词
81+
// 3. 输入提示词
82+
logger.info('适配器', '输入提示词...', meta);
8383
await safeClick(page, INPUT_SELECTOR, { bias: 'input' });
84-
await fillPrompt(page, INPUT_SELECTOR, prompt, meta);
85-
await sleep(500, 1000);
84+
await humanType(page, INPUT_SELECTOR, prompt);
8685

87-
// 4. 点击发送
88-
logger.debug('适配器', '点击发送...', meta);
86+
// 4. 发送提示词
87+
logger.debug('适配器', '发送提示词...', meta);
8988
await safeClick(page, sendBtnLocator, { bias: 'button' });
9089

9190
logger.info('适配器', '等待生成结果...', meta);
@@ -96,7 +95,7 @@ async function generate(context, prompt, imgPaths, modelId, meta = {}) {
9695
conversationResponse = await waitApiResponse(page, {
9796
urlMatch: 'backend-api/f/conversation',
9897
method: 'POST',
99-
timeout: 180000, // 图片生成可能较慢
98+
timeout: 120000, // 图片生成可能较慢
10099
meta
101100
});
102101
} catch (e) {
@@ -131,15 +130,16 @@ async function generate(context, prompt, imgPaths, modelId, meta = {}) {
131130

132131
// 检查是否生成完成:
133132
// 1. 必须有 file_name
134-
// 2. file_name 不能包含 .part(表示中间状态)
135-
// 3. 必须有 download_url
136-
if (fn && !fn.includes('.part') && dl) {
133+
// 2. file_name 开头必须是 user- (生成的图片)
134+
// 3. file_name 不能包含 .part(表示中间状态)
135+
// 4. 必须有 download_url
136+
if (fn && fn.startsWith('user-') && !fn.includes('.part') && dl) {
137137
fileName = fn;
138138
downloadUrl = dl;
139139
logger.info('适配器', `图片生成完成: ${fn}`, meta);
140140
return true;
141141
} else {
142-
logger.debug('适配器', `图片生成中: ${fn || '无文件名'}`, meta);
142+
logger.debug('适配器', `图片生成中或非生成图片: ${fn || '无文件名'}`, meta);
143143
return false;
144144
}
145145
} catch {
@@ -197,7 +197,7 @@ export const manifest = {
197197

198198
// 模型列表
199199
models: [
200-
{ id: 'gpt-image-1', imagePolicy: 'optional' }
200+
{ id: 'gpt-image-1.5', imagePolicy: 'optional' }
201201
],
202202

203203
// 无需导航处理器

src/backend/adapter/chatgpt_text.js

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@
44

55
import {
66
sleep,
7+
humanType,
78
safeClick,
89
uploadFilesViaChooser
910
} from '../engine/utils.js';
1011
import {
11-
fillPrompt,
1212
normalizePageError,
1313
moveMouseAway,
1414
waitForInput,
@@ -39,17 +39,16 @@ async function selectModel(page, codeName, meta = {}) {
3939
}
4040

4141
await modelSelectorBtn.waitFor({ timeout: 5000 });
42-
await sleep(300, 500);
4342
await safeClick(page, modelSelectorBtn, { bias: 'button' });
44-
await sleep(500, 800);
43+
await sleep(300, 500);
4544

4645
// 2. 检查是否有 Legacy models 选项
4746
const legacyMenuItem = page.getByRole('menuitem', { name: /^Legacy models/ });
4847
const legacyExists = await legacyMenuItem.count();
4948
if (legacyExists > 0) {
5049
logger.debug('适配器', '发现 Legacy models 选项,正在点击...', meta);
5150
await safeClick(page, legacyMenuItem, { bias: 'button' });
52-
await sleep(500, 800);
51+
await sleep(300, 500);
5352
}
5453

5554
// 3. 查找匹配 codeName 开头的 menuitem
@@ -58,13 +57,11 @@ async function selectModel(page, codeName, meta = {}) {
5857
if (targetExists > 0) {
5958
logger.info('适配器', `正在选择模型: ${codeName}`, meta);
6059
await safeClick(page, targetMenuItem, { bias: 'button' });
61-
await sleep(500, 1000);
6260
return true;
6361
} else {
6462
logger.debug('适配器', `未找到模型 ${codeName},使用默认模型`, meta);
6563
// 点击空白区域关闭菜单
6664
await page.keyboard.press('Escape');
67-
await sleep(300, 500);
6865
return false;
6966
}
7067
} catch (e) {
@@ -94,7 +91,6 @@ async function generate(context, prompt, imgPaths, modelId, meta = {}) {
9491

9592
// 1. 等待输入框加载
9693
await waitForInput(page, INPUT_SELECTOR, { click: false });
97-
await sleep(1500, 2500);
9894

9995
// 2. 选择模型
10096
const modelConfig = manifest.models.find(m => m.id === modelId);
@@ -105,6 +101,7 @@ async function generate(context, prompt, imgPaths, modelId, meta = {}) {
105101

106102
// 3. 上传图片 (双击 Add files and more 按钮)
107103
if (imgPaths && imgPaths.length > 0) {
104+
logger.info('适配器', `开始上传 ${imgPaths.length} 张图片...`, meta);
108105
const expectedUploads = imgPaths.length;
109106
let uploadedCount = 0;
110107
let processedCount = 0;
@@ -136,17 +133,15 @@ async function generate(context, prompt, imgPaths, modelId, meta = {}) {
136133
return false;
137134
}
138135
});
139-
140-
await sleep(1000, 2000);
141136
}
142137

143-
// 4. 填写提示词
138+
// 3. 输入提示词
139+
logger.info('适配器', '输入提示词...', meta);
144140
await safeClick(page, INPUT_SELECTOR, { bias: 'input' });
145-
await fillPrompt(page, INPUT_SELECTOR, prompt, meta);
146-
await sleep(500, 1000);
141+
await humanType(page, INPUT_SELECTOR, prompt);
147142

148-
// 5. 点击发送
149-
logger.debug('适配器', '点击发送...', meta);
143+
// 5. 发送提示词
144+
logger.debug('适配器', '发送提示词...', meta);
150145
await safeClick(page, sendBtnLocator, { bias: 'button' });
151146

152147
logger.info('适配器', '等待生成结果...', meta);
@@ -230,7 +225,7 @@ async function generate(context, prompt, imgPaths, modelId, meta = {}) {
230225
} catch {
231226
return false;
232227
}
233-
}, { timeout: 180000 });
228+
}, { timeout: 120000 });
234229
} catch (e) {
235230
const pageError = normalizePageError(e, meta);
236231
if (pageError) return pageError;

0 commit comments

Comments
 (0)