Wanderhalleylee commited on
Commit
8790ffe
·
verified ·
1 Parent(s): 7f3f73f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +27 -35
app.py CHANGED
@@ -1307,7 +1307,6 @@ async def click_element(request: dict, token: str = Depends(verify_token)):
1307
 
1308
  driver = session["driver"]
1309
 
1310
- # Recuperar janela ativa
1311
  try:
1312
  handles = driver.window_handles
1313
  if handles:
@@ -1315,11 +1314,9 @@ async def click_element(request: dict, token: str = Depends(verify_token)):
1315
  except Exception:
1316
  pass
1317
 
1318
- # Obter tamanho real da viewport
1319
  viewport_width = driver.execute_script("return window.innerWidth;")
1320
  viewport_height = driver.execute_script("return window.innerHeight;")
1321
 
1322
- # Escalar coordenadas
1323
  actual_x = int(x * viewport_width / img_width) if img_width > 0 else int(x)
1324
  actual_y = int(y * viewport_height / img_height) if img_height > 0 else int(y)
1325
  actual_x = max(0, min(actual_x, viewport_width - 1))
@@ -1327,14 +1324,14 @@ async def click_element(request: dict, token: str = Depends(verify_token)):
1327
 
1328
  logger.info(f"Click: preview({x},{y}) img({img_width}x{img_height}) -> real({actual_x},{actual_y}) viewport({viewport_width}x{viewport_height})")
1329
 
1330
- # Guardar URL antes do clique
1331
  original_url = driver.current_url
1332
 
1333
- # Detectar elemento
1334
  element_info = driver.execute_script(f"""
1335
  var elem = document.elementFromPoint({actual_x}, {actual_y});
 
1336
  if (elem) {{
1337
- return {{
1338
  tagName: elem.tagName || '',
1339
  id: elem.id || '',
1340
  text: (elem.textContent || '').substring(0, 100).trim(),
@@ -1342,16 +1339,23 @@ async def click_element(request: dict, token: str = Depends(verify_token)):
1342
  href: elem.href || '',
1343
  className: (elem.className || '').substring(0, 100)
1344
  }};
1345
- }}
1346
- return null;
1347
- """)
1348
-
1349
- # Clicar via JavaScript
1350
- driver.execute_script(f"""
1351
- var elem = document.elementFromPoint({actual_x}, {actual_y});
1352
- if (elem) {{
1353
- elem.scrollIntoView({{block: 'nearest'}});
1354
- elem.click();
 
 
 
 
 
 
 
1355
  }} else {{
1356
  var evt = new MouseEvent('click', {{
1357
  bubbles: true, cancelable: true,
@@ -1359,9 +1363,9 @@ async def click_element(request: dict, token: str = Depends(verify_token)):
1359
  }});
1360
  document.body.dispatchEvent(evt);
1361
  }}
 
1362
  """)
1363
 
1364
- # Esperar navegacao com timeout curto
1365
  import time
1366
  max_wait = 8
1367
  waited = 0
@@ -1369,11 +1373,9 @@ async def click_element(request: dict, token: str = Depends(verify_token)):
1369
  time.sleep(0.5)
1370
  waited += 0.5
1371
  try:
1372
- # Verificar se mudou de janela
1373
  handles = driver.window_handles
1374
  if handles:
1375
  driver.switch_to.window(handles[-1])
1376
- # Verificar se pagina carregou
1377
  ready = driver.execute_script("return document.readyState;")
1378
  if ready == "complete":
1379
  break
@@ -1388,12 +1390,10 @@ async def click_element(request: dict, token: str = Depends(verify_token)):
1388
  pass
1389
  break
1390
 
1391
- # Screenshot
1392
  screenshot = None
1393
  try:
1394
  screenshot = driver.get_screenshot_as_base64()
1395
- except Exception as e:
1396
- logger.warning(f"Screenshot falhou apos clique: {e}")
1397
  try:
1398
  handles = driver.window_handles
1399
  if handles:
@@ -1413,34 +1413,26 @@ async def click_element(request: dict, token: str = Depends(verify_token)):
1413
  session["last_url"] = current_url
1414
  session["last_activity"] = time.time()
1415
 
1416
- url_changed = current_url != original_url
1417
-
1418
  return {
1419
  "success": True,
1420
- "message": f"Clique em ({actual_x}, {actual_y})",
1421
  "clicked": element_info,
1422
- "element": f"{element_info.get('tagName', '')}: {element_info.get('text', '')}" if element_info else "Nenhum elemento",
1423
  "url": current_url,
1424
  "current_url": current_url,
1425
  "title": title,
1426
  "screenshot": screenshot,
1427
- "url_changed": url_changed
1428
  }
1429
 
1430
  except HTTPException:
1431
  raise
1432
  except Exception as e:
1433
  logger.error(f"Erro no clique: {e}")
1434
- # Tentar screenshot mesmo com erro
1435
  screenshot = None
1436
  try:
1437
- driver = session_manager.get_session(request.get("session_id", ""))
1438
- if driver:
1439
- d = driver["driver"]
1440
- handles = d.window_handles
1441
- if handles:
1442
- d.switch_to.window(handles[-1])
1443
- screenshot = d.get_screenshot_as_base64()
1444
  except Exception:
1445
  pass
1446
  return {"success": False, "message": str(e), "screenshot": screenshot}
 
1307
 
1308
  driver = session["driver"]
1309
 
 
1310
  try:
1311
  handles = driver.window_handles
1312
  if handles:
 
1314
  except Exception:
1315
  pass
1316
 
 
1317
  viewport_width = driver.execute_script("return window.innerWidth;")
1318
  viewport_height = driver.execute_script("return window.innerHeight;")
1319
 
 
1320
  actual_x = int(x * viewport_width / img_width) if img_width > 0 else int(x)
1321
  actual_y = int(y * viewport_height / img_height) if img_height > 0 else int(y)
1322
  actual_x = max(0, min(actual_x, viewport_width - 1))
 
1324
 
1325
  logger.info(f"Click: preview({x},{y}) img({img_width}x{img_height}) -> real({actual_x},{actual_y}) viewport({viewport_width}x{viewport_height})")
1326
 
 
1327
  original_url = driver.current_url
1328
 
1329
+ # Detectar elemento + clicar + focar via JavaScript
1330
  element_info = driver.execute_script(f"""
1331
  var elem = document.elementFromPoint({actual_x}, {actual_y});
1332
+ var info = null;
1333
  if (elem) {{
1334
+ info = {{
1335
  tagName: elem.tagName || '',
1336
  id: elem.id || '',
1337
  text: (elem.textContent || '').substring(0, 100).trim(),
 
1339
  href: elem.href || '',
1340
  className: (elem.className || '').substring(0, 100)
1341
  }};
1342
+ // FOCAR no elemento primeiro (essencial para inputs)
1343
+ elem.focus();
1344
+ // Disparar eventos de mouse completos
1345
+ ['mousedown', 'mouseup', 'click'].forEach(function(evtType) {{
1346
+ var evt = new MouseEvent(evtType, {{
1347
+ bubbles: true, cancelable: true,
1348
+ clientX: {actual_x}, clientY: {actual_y}, view: window
1349
+ }});
1350
+ elem.dispatchEvent(evt);
1351
+ }});
1352
+ // Se for input/textarea, colocar cursor no final
1353
+ if (elem.tagName === 'INPUT' || elem.tagName === 'TEXTAREA') {{
1354
+ elem.focus();
1355
+ if (elem.value) {{
1356
+ elem.setSelectionRange(elem.value.length, elem.value.length);
1357
+ }}
1358
+ }}
1359
  }} else {{
1360
  var evt = new MouseEvent('click', {{
1361
  bubbles: true, cancelable: true,
 
1363
  }});
1364
  document.body.dispatchEvent(evt);
1365
  }}
1366
+ return info;
1367
  """)
1368
 
 
1369
  import time
1370
  max_wait = 8
1371
  waited = 0
 
1373
  time.sleep(0.5)
1374
  waited += 0.5
1375
  try:
 
1376
  handles = driver.window_handles
1377
  if handles:
1378
  driver.switch_to.window(handles[-1])
 
1379
  ready = driver.execute_script("return document.readyState;")
1380
  if ready == "complete":
1381
  break
 
1390
  pass
1391
  break
1392
 
 
1393
  screenshot = None
1394
  try:
1395
  screenshot = driver.get_screenshot_as_base64()
1396
+ except Exception:
 
1397
  try:
1398
  handles = driver.window_handles
1399
  if handles:
 
1413
  session["last_url"] = current_url
1414
  session["last_activity"] = time.time()
1415
 
 
 
1416
  return {
1417
  "success": True,
 
1418
  "clicked": element_info,
1419
+ "element": f"{element_info.get('tagName', '')}: \"{element_info.get('text', '')}\"" if element_info else "Nenhum elemento",
1420
  "url": current_url,
1421
  "current_url": current_url,
1422
  "title": title,
1423
  "screenshot": screenshot,
1424
+ "url_changed": current_url != original_url
1425
  }
1426
 
1427
  except HTTPException:
1428
  raise
1429
  except Exception as e:
1430
  logger.error(f"Erro no clique: {e}")
 
1431
  screenshot = None
1432
  try:
1433
+ s = session_manager.get_session(request.get("session_id", ""))
1434
+ if s:
1435
+ screenshot = s["driver"].get_screenshot_as_base64()
 
 
 
 
1436
  except Exception:
1437
  pass
1438
  return {"success": False, "message": str(e), "screenshot": screenshot}