Hana Celeste commited on
Commit
223887a
·
verified ·
1 Parent(s): 7f79414

Update app/aternos_api.py

Browse files
Files changed (1) hide show
  1. app/aternos_api.py +32 -40
app/aternos_api.py CHANGED
@@ -14,75 +14,67 @@ class AternosAPI:
14
  if not self.playwright:
15
  self.playwright = await async_playwright().start()
16
 
17
- async def check_access(self):
18
  if not self.playwright:
19
  await self.start()
20
 
21
- # CHẠY HEADLESS = FALSE
22
  browser = await self.playwright.chromium.launch(
23
- headless=False,
24
  proxy=self.proxy_config,
25
- args=[
26
- "--no-sandbox",
27
- "--disable-blink-features=AutomationControlled",
28
- "--disable-dev-shm-usage",
29
- "--start-maximized"
30
- ]
31
  )
32
-
33
- # Cấu hình Context mô phỏng người dùng thật hoàn hảo
34
  context = await browser.new_context(
35
  viewport={'width': 1920, 'height': 1080},
36
  user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36"
37
  )
38
-
39
  page = await context.new_page()
40
 
41
- # Script tàng hình thủ công (Xóa dấu vết WebDriver)
42
- await page.add_init_script("""
43
- Object.defineProperty(navigator, 'webdriver', {get: () => undefined});
44
- window.chrome = { runtime: {} };
45
- Object.defineProperty(navigator, 'languages', {get: () => ['en-US', 'en']});
46
- """)
47
 
48
  try:
49
- print("[INFO] Đang mở trình duyệt (Màn hình ảo)...")
50
  await page.goto("https://aternos.org/go/", wait_until="commit", timeout=60000)
51
 
52
- # Đợi Cloudflare giải quyết (Vòng lặp tương tác)
53
  for i in range(15):
54
- title = await page.title()
55
- content = await page.content()
56
-
57
- if "just a moment" not in title.lower() and "cloudflare" not in content.lower():
58
- print(f"[SUCCESS] Đã vượt Cloudflare sau {i} giây")
59
  break
60
-
61
- print(f"[WAIT] Đang giải quyết thử thách... ({i}s)")
62
- # Giả lập di chuyển chuột và cuộn trang (Người thật hay làm thế khi chờ)
63
- await page.mouse.move(200 + i*10, 200 + i*10)
64
  await page.mouse.wheel(0, 100)
65
  await asyncio.sleep(2)
66
 
67
- # Chuyển sang trang đích
68
- await page.goto("https://aternos.org/server/", wait_until="networkidle", timeout=60000)
69
- await asyncio.sleep(3)
 
 
 
 
 
 
 
 
70
 
 
71
  final_title = await page.title()
72
- final_content = await page.content()
 
 
73
 
74
- # Kiểm tra kết quả
75
- is_cf_gone = "just a moment" not in final_title.lower()
 
 
76
 
77
  return {
78
- "ok": is_cf_gone,
79
- "title": final_title,
80
- "msg": "Cửa Login đã mở!" if is_cf_gone else "Vẫn kẹt Cloudflare",
81
- "final_url": page.url
82
  }
83
 
84
  except Exception as e:
85
- print(f"[ERROR] {str(e)}")
86
  return {"ok": False, "error": str(e)}
87
  finally:
88
  await browser.close()
 
14
  if not self.playwright:
15
  self.playwright = await async_playwright().start()
16
 
17
+ async def run_action(self, user, pwd, action_type="login"):
18
  if not self.playwright:
19
  await self.start()
20
 
 
21
  browser = await self.playwright.chromium.launch(
22
+ headless=False, # Bắt buộc False để vượt CF ổn định nhất
23
  proxy=self.proxy_config,
24
+ args=["--no-sandbox", "--disable-blink-features=AutomationControlled"]
 
 
 
 
 
25
  )
26
+
 
27
  context = await browser.new_context(
28
  viewport={'width': 1920, 'height': 1080},
29
  user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36"
30
  )
 
31
  page = await context.new_page()
32
 
33
+ # Stealth tay
34
+ await page.add_init_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")
 
 
 
 
35
 
36
  try:
37
+ print(f"[INFO] Đang truy cập Aternos cho user: {user}...")
38
  await page.goto("https://aternos.org/go/", wait_until="commit", timeout=60000)
39
 
40
+ # Vòng lặp vượt Cloudflare
41
  for i in range(15):
42
+ if "just a moment" not in (await page.title()).lower():
 
 
 
 
43
  break
 
 
 
 
44
  await page.mouse.wheel(0, 100)
45
  await asyncio.sleep(2)
46
 
47
+ # --- LOGIC ĐĂNG NHẬP ---
48
+ print("[INFO] Đang điền form đăng nhập...")
49
+ await page.wait_for_selector(".username", timeout=10000)
50
+ await page.type(".username", user, delay=120) # Gõ như người thật
51
+ await page.type(".password", pwd, delay=120)
52
+
53
+ await page.click(".login-button")
54
+
55
+ # Đợi chuyển hướng sau login
56
+ await page.wait_for_load_state("networkidle", timeout=30000)
57
+ await asyncio.sleep(5)
58
 
59
+ final_url = page.url
60
  final_title = await page.title()
61
+
62
+ # Kiểm tra trạng thái đăng nhập
63
+ is_success = "/server" in final_url
64
 
65
+ # Chỗ này để dành cho bạn phát triển start/stop sau này
66
+ if is_success and action_type == "start":
67
+ # print("Đang thực hiện bấm nút Start...")
68
+ pass
69
 
70
  return {
71
+ "ok": is_success,
72
+ "msg": "Login thành công!" if is_success else "Thất bại (Sai pass hoặc bị chặn)",
73
+ "url": final_url,
74
+ "title": final_title
75
  }
76
 
77
  except Exception as e:
 
78
  return {"ok": False, "error": str(e)}
79
  finally:
80
  await browser.close()