MCPcopy Create free account
hub / github.com/CJackHwang/AIstudioProxyAPI / get_response_via_copy_button

Function get_response_via_copy_button

browser_utils/operations.py:971–1075  ·  view source on GitHub ↗

Get response via copy button

(
    page: AsyncPage, req_id: str, check_client_disconnected: Callable
)

Source from the content-addressed store, hash-verified

969
970
971async def get_response_via_copy_button(
972 page: AsyncPage, req_id: str, check_client_disconnected: Callable
973) -> Optional[str]:
974 """Get response via copy button"""
975 logger.info(f"[{req_id}] (Helper) Attempting to get response via copy button...")
976 last_message_container = page.locator("ms-chat-turn").last
977 more_options_button = last_message_container.get_by_label("Open options")
978 copy_markdown_button = page.get_by_role("menuitem", name="Copy markdown")
979
980 try:
981 logger.info(
982 f"[{req_id}] - Attempting to hover last message to show options..."
983 )
984 await last_message_container.hover(timeout=CLICK_TIMEOUT_MS)
985 check_client_disconnected("Copy Response - after hover: ")
986 await asyncio.sleep(0.5)
987 check_client_disconnected("Copy Response - after hover delay: ")
988 logger.info(f"[{req_id}] - Hovered.")
989
990 logger.info(f"[{req_id}] - Locating and clicking 'More options' button...")
991 try:
992 from playwright.async_api import expect as expect_async
993
994 await expect_async(more_options_button).to_be_visible(
995 timeout=CLICK_TIMEOUT_MS
996 )
997 check_client_disconnected(
998 "Copy Response - after more options button visible: "
999 )
1000 await more_options_button.click(timeout=CLICK_TIMEOUT_MS)
1001 logger.info(f"[{req_id}] - 'More options' clicked (via get_by_label).")
1002 except (ClientDisconnectedError, asyncio.CancelledError):
1003 raise
1004 except Exception as more_opts_err:
1005 logger.error(
1006 f"[{req_id}] - 'More options' button (via get_by_label) not visible or click failed: {more_opts_err}"
1007 )
1008 await save_error_snapshot(f"copy_response_more_options_failed_{req_id}")
1009 return None
1010
1011 check_client_disconnected("Copy Response - after clicking more options: ")
1012 await asyncio.sleep(0.5)
1013 check_client_disconnected(
1014 "Copy Response - after delay following more options click: "
1015 )
1016
1017 logger.info(f"[{req_id}] - Locating and clicking 'Copy markdown' button...")
1018 copy_success = False
1019 try:
1020 await expect_async(copy_markdown_button).to_be_visible(
1021 timeout=CLICK_TIMEOUT_MS
1022 )
1023 check_client_disconnected("Copy Response - after copy button visible: ")
1024 await copy_markdown_button.click(timeout=CLICK_TIMEOUT_MS, force=True)
1025 copy_success = True
1026 logger.info(f"[{req_id}] - 'Copy markdown' clicked (via get_by_role).")
1027 except (ClientDisconnectedError, asyncio.CancelledError):
1028 raise

Calls 4

infoMethod · 0.80
errorMethod · 0.80
save_error_snapshotFunction · 0.70