Skip to content

Commit 1ccee40

Browse files
committed
fix: 前端选择器跟随更新
1 parent 0d88cbd commit 1ccee40

3 files changed

Lines changed: 18 additions & 12 deletions

File tree

src/browser/initialization.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -307,7 +307,7 @@ async def _initialize_page_logic(browser: AsyncBrowser):
307307
await found_page.bring_to_front()
308308
try:
309309
from browser.selector_utils import wait_for_any_selector
310-
wrapper_selectors = ['ms-prompt-input-wrapper', 'ms-prompt-box']
310+
wrapper_selectors = ['ms-prompt-box', 'ms-prompt-input-wrapper']
311311
wrapper_locator, wrapper_matched = await wait_for_any_selector(found_page, wrapper_selectors, timeout=35000)
312312
if wrapper_locator:
313313
logger.info(f'✅ 输入框wrapper可见 (匹配: {wrapper_matched})')

src/browser/page_controller.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import re
66
import os
77
from playwright.async_api import Page as AsyncPage, expect as expect_async, TimeoutError, Locator
8-
from config import TEMPERATURE_INPUT_SELECTOR, MAX_OUTPUT_TOKENS_SELECTOR, STOP_SEQUENCE_INPUT_SELECTOR, MAT_CHIP_REMOVE_BUTTON_SELECTOR, TOP_P_INPUT_SELECTOR, SUBMIT_BUTTON_SELECTOR, SUBMIT_BUTTON_SELECTORS, OVERLAY_SELECTOR, PROMPT_TEXTAREA_SELECTOR, PROMPT_TEXTAREA_SELECTORS, RESPONSE_CONTAINER_SELECTOR, RESPONSE_TEXT_SELECTOR, EDIT_MESSAGE_BUTTON_SELECTOR, USE_URL_CONTEXT_SELECTOR, UPLOAD_BUTTON_SELECTOR, INSERT_BUTTON_SELECTOR, INSERT_BUTTON_SELECTORS, THINKING_MODE_TOGGLE_SELECTOR, SET_THINKING_BUDGET_TOGGLE_SELECTOR, THINKING_BUDGET_INPUT_SELECTOR, GROUNDING_WITH_GOOGLE_SEARCH_TOGGLE_SELECTOR, ZERO_STATE_SELECTOR, SYSTEM_INSTRUCTIONS_BUTTON_SELECTOR, SYSTEM_INSTRUCTIONS_TEXTAREA_SELECTOR, SKIP_PREFERENCE_VOTE_BUTTON_SELECTOR, CLICK_TIMEOUT_MS, WAIT_FOR_ELEMENT_TIMEOUT_MS, CLEAR_CHAT_VERIFY_TIMEOUT_MS, DEFAULT_TEMPERATURE, DEFAULT_MAX_OUTPUT_TOKENS, DEFAULT_STOP_SEQUENCES, DEFAULT_TOP_P, ENABLE_URL_CONTEXT, ENABLE_THINKING_BUDGET, DEFAULT_THINKING_BUDGET, ENABLE_GOOGLE_SEARCH, THINKING_LEVEL_SELECT_SELECTOR, THINKING_LEVEL_OPTION_HIGH_SELECTOR, THINKING_LEVEL_OPTION_LOW_SELECTOR, DEFAULT_THINKING_LEVEL, ADVANCED_SETTINGS_EXPANDER_SELECTOR
8+
from config import TEMPERATURE_INPUT_SELECTOR, MAX_OUTPUT_TOKENS_SELECTOR, STOP_SEQUENCE_INPUT_SELECTOR, MAT_CHIP_REMOVE_BUTTON_SELECTOR, TOP_P_INPUT_SELECTOR, SUBMIT_BUTTON_SELECTOR, SUBMIT_BUTTON_SELECTORS, OVERLAY_SELECTOR, PROMPT_TEXTAREA_SELECTOR, PROMPT_TEXTAREA_SELECTORS, RESPONSE_CONTAINER_SELECTOR, RESPONSE_TEXT_SELECTOR, EDIT_MESSAGE_BUTTON_SELECTOR, USE_URL_CONTEXT_SELECTOR, UPLOAD_BUTTON_SELECTOR, UPLOAD_BUTTON_SELECTORS, INSERT_BUTTON_SELECTOR, INSERT_BUTTON_SELECTORS, HIDDEN_FILE_INPUT_SELECTORS, THINKING_MODE_TOGGLE_SELECTOR, SET_THINKING_BUDGET_TOGGLE_SELECTOR, THINKING_BUDGET_INPUT_SELECTOR, GROUNDING_WITH_GOOGLE_SEARCH_TOGGLE_SELECTOR, ZERO_STATE_SELECTOR, SYSTEM_INSTRUCTIONS_BUTTON_SELECTOR, SYSTEM_INSTRUCTIONS_TEXTAREA_SELECTOR, SKIP_PREFERENCE_VOTE_BUTTON_SELECTOR, CLICK_TIMEOUT_MS, WAIT_FOR_ELEMENT_TIMEOUT_MS, CLEAR_CHAT_VERIFY_TIMEOUT_MS, DEFAULT_TEMPERATURE, DEFAULT_MAX_OUTPUT_TOKENS, DEFAULT_STOP_SEQUENCES, DEFAULT_TOP_P, ENABLE_URL_CONTEXT, ENABLE_THINKING_BUDGET, DEFAULT_THINKING_BUDGET, ENABLE_GOOGLE_SEARCH, THINKING_LEVEL_SELECT_SELECTOR, THINKING_LEVEL_OPTION_HIGH_SELECTOR, THINKING_LEVEL_OPTION_LOW_SELECTOR, DEFAULT_THINKING_LEVEL, ADVANCED_SETTINGS_EXPANDER_SELECTOR
99
from config.timeouts import (
1010
MAX_RETRIES, SLEEP_RETRY, SLEEP_SHORT, SLEEP_MEDIUM, SLEEP_LONG, SLEEP_TICK,
1111
SLEEP_IMAGE_UPLOAD, SLEEP_CLEANUP, SLEEP_NAVIGATION, TIMEOUT_PAGE_NAVIGATION,
@@ -730,7 +730,7 @@ async def _robust_click_insert_assets(self, check_client_disconnected: Callable)
730730
self.logger.warning(f"[{self.req_id}] 未找到媒体添加按钮。")
731731
return False
732732

733-
upload_menu_locator = self.page.locator(UPLOAD_BUTTON_SELECTOR)
733+
upload_menu_locator, _ = await get_first_visible_locator(self.page, UPLOAD_BUTTON_SELECTORS, timeout=1000)
734734

735735
max_attempts = 3
736736
for attempt in range(1, max_attempts + 1):
@@ -748,8 +748,9 @@ async def _robust_click_insert_assets(self, check_client_disconnected: Callable)
748748

749749
for _ in range(10):
750750
try:
751-
if await upload_menu_locator.count() > 0 and await upload_menu_locator.first.is_visible():
752-
self.logger.info(f"[{self.req_id}] ✅ 'Upload file' 菜单项已检测到开启。")
751+
upload_menu_locator, matched_upload = await get_first_visible_locator(self.page, UPLOAD_BUTTON_SELECTORS, timeout=500)
752+
if upload_menu_locator and await upload_menu_locator.is_visible():
753+
self.logger.info(f"[{self.req_id}] ✅ 'Upload file' 菜单项已检测到开启 (匹配: {matched_upload})。")
753754
return True
754755
except Exception:
755756
pass
@@ -791,9 +792,8 @@ async def _upload_images_via_file_input(self, images: List[Dict[str, str]], chec
791792
if not menu_opened:
792793
self.logger.warning(f"[{self.req_id}] 未能打开菜单,尝试直接查找 input...")
793794

794-
from config import HIDDEN_FILE_INPUT_SELECTOR
795-
file_input = self.page.locator(HIDDEN_FILE_INPUT_SELECTOR)
796-
if await file_input.count() == 0:
795+
file_input, matched_input = await get_first_visible_locator(self.page, HIDDEN_FILE_INPUT_SELECTORS + ['input[type="file"]'], timeout=2000)
796+
if not file_input:
797797
file_input = self.page.locator('input[type="file"]').first
798798

799799
if await file_input.count() == 0:
@@ -820,8 +820,8 @@ async def _upload_images_via_file_input(self, images: List[Dict[str, str]], chec
820820
menu_opened = await self._robust_click_insert_assets(check_client_disconnected)
821821
if not menu_opened:
822822
continue
823-
file_input = self.page.locator(HIDDEN_FILE_INPUT_SELECTOR)
824-
if await file_input.count() == 0:
823+
file_input, _ = await get_first_visible_locator(self.page, HIDDEN_FILE_INPUT_SELECTORS + ['input[type="file"]'], timeout=2000)
824+
if not file_input:
825825
file_input = self.page.locator('input[type="file"]').first
826826

827827
try:

src/config/selectors.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
PROMPT_TEXTAREA_SELECTORS = [
2+
'ms-prompt-box textarea[aria-label="Enter a prompt"]',
3+
'ms-prompt-box textarea[placeholder="Start typing a prompt"]',
4+
'ms-prompt-box .prompt-box-container .text-wrapper textarea',
25
'ms-prompt-input-wrapper ms-autosize-textarea textarea',
36
'ms-prompt-box textarea',
47
]
@@ -14,16 +17,19 @@
1417
SUBMIT_BUTTON_SELECTOR = SUBMIT_BUTTON_SELECTORS[0]
1518

1619
INSERT_BUTTON_SELECTORS = [
20+
'button[data-test-id="add-media-button"]',
21+
'button[aria-label="Insert images, videos, audio, or files"]',
22+
'ms-add-media-button button',
1723
'button[aria-label="Insert assets such as images, videos, files, or audio"]',
1824
'button[data-test-add-chunk-menu-button]',
19-
'button[data-test-id="add-media-button"]',
2025
]
2126
INSERT_BUTTON_SELECTOR = INSERT_BUTTON_SELECTORS[0]
2227

2328
UPLOAD_BUTTON_SELECTORS = [
29+
'button.upload-file-menu-item',
30+
'button[role="menuitem"]:has-text("Upload a file")',
2431
'button[aria-label="Upload File"]',
2532
'button[role="menuitem"]:has-text("Upload File")',
26-
'button[role="menuitem"]:has-text("Upload a file")',
2733
]
2834
UPLOAD_BUTTON_SELECTOR = UPLOAD_BUTTON_SELECTORS[0]
2935

0 commit comments

Comments
 (0)