Skip to content

Commit 83e6ad0

Browse files
committed
fix: 尝试简单修复模拟粘贴逻辑(这只是回退逻辑,且可能完全修不了)
1 parent 51e1a1e commit 83e6ad0

File tree

1 file changed

+44
-35
lines changed

1 file changed

+44
-35
lines changed

src/browser/page_controller.py

Lines changed: 44 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -825,64 +825,73 @@ async def _paste_images_via_event(self, images: List[Dict[str, str]], target_loc
825825

826826
try:
827827
await target_locator.focus()
828+
await target_locator.click()
828829
except Exception:
829830
pass
830831

831832
script = """
832-
async (target, images) => {
833+
async (images) => {
833834
try {
834-
if (!target) {
835-
return { success: false, error: "目标元素未找到" };
836-
}
837-
838-
let successCount = 0;
835+
const dataTransfer = new DataTransfer();
839836
840-
target.focus();
841-
842-
for (const img of images) {
837+
for (let i = 0; i < images.length; i++) {
838+
const img = images[i];
843839
try {
844-
const dataTransfer = new DataTransfer();
845-
const res = await fetch(`data:${img.mime};base64,${img.data}`);
846-
const blob = await res.blob();
847-
const ext = img.mime.split('/')[1] || 'png';
848-
const filename = `image_${Date.now()}_${Math.random().toString(36).slice(2)}_${successCount}.${ext}`;
849-
const file = new File([blob], filename, { type: img.mime });
850-
dataTransfer.items.add(file);
851-
852-
const pasteEvent = new ClipboardEvent('paste', {
853-
bubbles: true,
854-
cancelable: true,
855-
clipboardData: dataTransfer
856-
});
857-
858-
target.dispatchEvent(pasteEvent);
859-
successCount++;
840+
const byteCharacters = atob(img.data);
841+
const byteNumbers = new Array(byteCharacters.length);
842+
for (let j = 0; j < byteCharacters.length; j++) {
843+
byteNumbers[j] = byteCharacters.charCodeAt(j);
844+
}
845+
const byteArray = new Uint8Array(byteNumbers);
846+
const blob = new Blob([byteArray], { type: img.mime });
860847
861-
await new Promise(r => setTimeout(r, 50));
848+
const ext = img.mime.split('/')[1] || 'png';
849+
const filename = `pasted_image_${i + 1}.${ext}`;
850+
const file = new File([blob], filename, { type: img.mime, lastModified: Date.now() });
862851
852+
dataTransfer.items.add(file);
863853
} catch (err) {
864-
console.error(`[AI Studio Enhancements] 处理单张图片数据失败:`, err);
854+
console.error(`[Paste] 处理图片 ${i + 1} 失败:`, err);
865855
}
866856
}
867-
868-
if (successCount === 0) {
869-
return { success: false, error: "没有图片被成功处理" };
857+
858+
if (dataTransfer.files.length === 0) {
859+
return { success: false, error: "没有文件被添加到 DataTransfer" };
860+
}
861+
862+
const pasteEvent = new ClipboardEvent('paste', {
863+
bubbles: true,
864+
cancelable: true,
865+
});
866+
867+
Object.defineProperty(pasteEvent, 'clipboardData', {
868+
value: dataTransfer,
869+
writable: false,
870+
configurable: true
871+
});
872+
873+
const textarea = document.querySelector('ms-prompt-box textarea');
874+
if (textarea) {
875+
textarea.focus();
876+
textarea.dispatchEvent(pasteEvent);
870877
}
871878
872-
console.log(`[AI Studio Enhancements] 已逐个触发粘贴事件,共 ${successCount} 个文件。`);
873-
return { success: true, count: successCount };
879+
document.dispatchEvent(pasteEvent);
880+
881+
console.log(`[Paste] 已触发粘贴事件,包含 ${dataTransfer.files.length} 个文件`);
882+
return { success: true, count: dataTransfer.files.length };
874883
} catch (err) {
875-
console.error('[AI Studio Enhancements] 模拟粘贴事件循环失败:', err);
884+
console.error('[Paste] 模拟粘贴失败:', err);
876885
return { success: false, error: err.message };
877886
}
878887
}
879888
"""
880-
result = await target_locator.evaluate(script, images)
889+
result = await self.page.evaluate(script, images)
881890
if not result or not result.get('success'):
882891
error_message = result.get('error', '未知错误')
883892
self.logger.error(f"[{self.req_id}] 虚拟粘贴图片失败: {error_message}")
884893
else:
885-
self.logger.info(f"[{self.req_id}] 虚拟粘贴事件已触发")
894+
self.logger.info(f"[{self.req_id}] 虚拟粘贴事件已触发 ({result.get('count', 0)} 个文件)")
886895

887896

888897
async def submit_prompt(self, prompt: str, image_list: List, check_client_disconnected: Callable):

0 commit comments

Comments
 (0)