125 lines
4.5 KiB
Python
125 lines
4.5 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Debug script to test form detection on QuBeCare login page
|
|
"""
|
|
|
|
import asyncio
|
|
import logging
|
|
import json
|
|
from mcp_chrome_client import MCPChromeClient
|
|
|
|
# Simple config for testing
|
|
def get_test_config():
|
|
return {
|
|
'mcp_server_type': 'http',
|
|
'mcp_server_url': 'http://127.0.0.1:12306/mcp',
|
|
'mcp_server_command': None,
|
|
'mcp_server_args': []
|
|
}
|
|
|
|
async def debug_qubecare_form():
|
|
"""Debug form detection on QuBeCare login page"""
|
|
|
|
# Set up logging
|
|
logging.basicConfig(level=logging.DEBUG)
|
|
logger = logging.getLogger(__name__)
|
|
|
|
# Initialize MCP Chrome client
|
|
config = get_test_config()
|
|
client = MCPChromeClient(config)
|
|
|
|
try:
|
|
# Navigate to the QuBeCare login page
|
|
logger.info("Navigating to QuBeCare login page...")
|
|
result = await client._navigate_mcp("https://app.qubecare.ai/provider/login")
|
|
logger.info(f"Navigation result: {result}")
|
|
|
|
# Wait for page to load
|
|
await asyncio.sleep(3)
|
|
|
|
# Try to get form fields using different methods
|
|
logger.info("=== Method 1: get_form_fields ===")
|
|
form_fields = await client.get_form_fields()
|
|
logger.info(f"Form fields result: {form_fields}")
|
|
|
|
logger.info("=== Method 2: get_cached_input_fields ===")
|
|
cached_fields = await client.get_cached_input_fields()
|
|
logger.info(f"Cached input fields: {cached_fields}")
|
|
|
|
logger.info("=== Method 3: refresh_input_fields ===")
|
|
refresh_result = await client.refresh_input_fields()
|
|
logger.info(f"Refresh result: {refresh_result}")
|
|
|
|
# Try to get page content to see what's actually there
|
|
logger.info("=== Method 4: Get page content ===")
|
|
try:
|
|
page_content = await client._call_mcp_tool("chrome_get_web_content", {
|
|
"selector": "body",
|
|
"textOnly": False
|
|
})
|
|
logger.info(f"Page content structure: {json.dumps(page_content, indent=2)}")
|
|
except Exception as e:
|
|
logger.error(f"Error getting page content: {e}")
|
|
|
|
# Try to find specific input elements
|
|
logger.info("=== Method 5: Look for specific input selectors ===")
|
|
common_selectors = [
|
|
"input[type='email']",
|
|
"input[type='password']",
|
|
"input[name*='email']",
|
|
"input[name*='password']",
|
|
"input[name*='username']",
|
|
"input[name*='login']",
|
|
"#email",
|
|
"#password",
|
|
"#username",
|
|
".email",
|
|
".password",
|
|
"input",
|
|
"form input"
|
|
]
|
|
|
|
for selector in common_selectors:
|
|
try:
|
|
element_info = await client._call_mcp_tool("chrome_get_web_content", {
|
|
"selector": selector,
|
|
"textOnly": False
|
|
})
|
|
if element_info and element_info.get("content"):
|
|
logger.info(f"Found elements with selector '{selector}': {element_info}")
|
|
except Exception as e:
|
|
logger.debug(f"No elements found for selector '{selector}': {e}")
|
|
|
|
# Try to get interactive elements
|
|
logger.info("=== Method 6: Get all interactive elements ===")
|
|
try:
|
|
interactive = await client._call_mcp_tool("chrome_get_interactive_elements", {
|
|
"types": ["input", "textarea", "select", "button"]
|
|
})
|
|
logger.info(f"Interactive elements: {json.dumps(interactive, indent=2)}")
|
|
except Exception as e:
|
|
logger.error(f"Error getting interactive elements: {e}")
|
|
|
|
# Check if page is fully loaded
|
|
logger.info("=== Method 7: Check page load status ===")
|
|
try:
|
|
page_status = await client._call_mcp_tool("chrome_execute_script", {
|
|
"script": "return {readyState: document.readyState, title: document.title, url: window.location.href, forms: document.forms.length, inputs: document.querySelectorAll('input').length}"
|
|
})
|
|
logger.info(f"Page status: {page_status}")
|
|
except Exception as e:
|
|
logger.error(f"Error checking page status: {e}")
|
|
|
|
except Exception as e:
|
|
logger.error(f"Error during debugging: {e}")
|
|
|
|
finally:
|
|
# Clean up
|
|
try:
|
|
await client.close()
|
|
except:
|
|
pass
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(debug_qubecare_form())
|