raw9 commited on
Commit
abcea00
·
verified ·
1 Parent(s): 8204d3e

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +140 -32
main.py CHANGED
@@ -1,66 +1,174 @@
1
  import os
2
- from fastapi import FastAPI, Header, HTTPException
 
 
 
 
 
3
  from pydantic import BaseModel
4
  from typing import Optional
5
  from playwright.async_api import async_playwright
6
  from playwright_stealth import stealth_async
7
 
8
- app = FastAPI(title="Omni-Digital Cloud Engine", version="3.0")
9
- # আপনার কাস্টম কি সেট করা হলো
 
10
  MASTER_API_KEY = os.getenv("API_KEY", "rh5152..")
11
 
 
12
  class CommandPayload(BaseModel):
13
  url: str
14
  js_code: Optional[str] = None
15
  extract_html: bool = False
16
  wait_time_ms: int = 0
 
 
 
 
 
 
 
 
 
 
17
 
18
  @app.get("/")
19
  async def health_check():
20
- return {"status": "System Online", "message": "Stealth Mode v3.0 Active."}
21
 
22
- @app.post("/api/v1/execute")
23
- async def execute_browser_task(payload: CommandPayload, x_api_key: str = Header(None)):
24
- if x_api_key != MASTER_API_KEY:
25
- raise HTTPException(status_code=403, detail="Access Denied: Invalid Master API Key")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26
 
 
 
27
  async with async_playwright() as p:
28
- browser = await p.chromium.launch(
29
- headless=True,
30
- args=["--no-sandbox", "--disable-setuid-sandbox", "--disable-blink-features=AutomationControlled"]
31
- )
32
-
33
- context = await browser.new_context(
34
- user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36",
35
- viewport={"width": 1920, "height": 1080}
36
- )
37
-
38
- # 🔥 অ্যাডভান্সড স্টিলথ ইনজেকশন (এটি অডিট পাস করাবে) 🔥
39
- await context.add_init_script("""
40
- Object.defineProperty(navigator, 'webdriver', {get: () => false});
41
- window.chrome = { runtime: {} };
42
- Object.defineProperty(navigator, 'languages', {get: () => ['en-US', 'en']});
43
- Object.defineProperty(navigator, 'plugins', {get: () => [1, 2, 3, 4, 5]});
44
- """)
45
 
46
- page = await context.new_page()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
47
  await stealth_async(page)
48
 
49
  try:
50
- await page.goto(payload.url, wait_until="networkidle", timeout=60000)
 
 
 
 
 
 
 
 
51
  if payload.wait_time_ms > 0:
52
  await page.wait_for_timeout(payload.wait_time_ms)
53
 
54
  script_result = await page.evaluate(payload.js_code) if payload.js_code else None
55
  html_content = await page.content() if payload.extract_html else None
 
 
 
 
 
 
56
 
57
- return {
58
  "status": "success",
59
- "js_output": script_result,
60
  "current_url": page.url,
61
- "html_extracted": bool(html_content)
 
 
 
62
  }
63
  except Exception as e:
64
- return {"status": "error", "message": str(e)}
65
  finally:
66
- await browser.close()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import os
2
+ import json
3
+ import random
4
+ import base64
5
+ import asyncio
6
+ import urllib.request
7
+ from fastapi import FastAPI, Header, HTTPException, BackgroundTasks
8
  from pydantic import BaseModel
9
  from typing import Optional
10
  from playwright.async_api import async_playwright
11
  from playwright_stealth import stealth_async
12
 
13
+ app = FastAPI(title="Omni-Digital Cloud Engine (Enterprise)", version="4.0")
14
+
15
+ # আপনার কাস্টম কি
16
  MASTER_API_KEY = os.getenv("API_KEY", "rh5152..")
17
 
18
+ # --- 🚀 ৫টি নতুন ফিচার সহ অ্যাডভান্সড পে-লোড মডেল ---
19
  class CommandPayload(BaseModel):
20
  url: str
21
  js_code: Optional[str] = None
22
  extract_html: bool = False
23
  wait_time_ms: int = 0
24
+ # ৩. পারসিস্টেন্ট সেশন (Persistent Session)
25
+ session_id: Optional[str] = None
26
+ # ৪. ক্যাপচা সলভিং গেটওয়ে (Anti-Captcha)
27
+ solve_captcha: bool = False
28
+ # ৫. ওয়েবহুক (Webhook URL for Background tasks)
29
+ webhook_url: Optional[str] = None
30
+ # ৬. ভিজ্যুয়াল ডিবাগিং (Visual Debug Screenshot)
31
+ visual_debug: bool = False
32
+ # ৭. স্মার্ট ফিঙ্গারপ্রিন্টিং (Dynamic Fingerprint)
33
+ smart_fingerprint: bool = True
34
 
35
  @app.get("/")
36
  async def health_check():
37
+ return {"status": "System Online", "message": "Enterprise Stealth Mode v4.0 Active."}
38
 
39
+ # --- ৭. স্মার্ট ফিঙ্গারপ্রিন্টিং ল্যাব (Dynamic Fingerprint Generator) ---
40
+ def get_dynamic_fingerprint():
41
+ resolutions = [{"width": 1920, "height": 1080}, {"width": 1366, "height": 768}, {"width": 1440, "height": 900}, {"width": 1536, "height": 864}]
42
+ memory_options = [4, 8, 16, 32]
43
+ cpu_options = [4, 8, 12, 16]
44
+
45
+ # Chrome-এর লেটেস্ট ভার্সনগুলো রেন্ডমাইজ করা
46
+ chrome_version = random.choice(["120.0.0.0", "121.0.0.0", "122.0.0.0", "123.0.0.0"])
47
+ os_version = random.choice(["Windows NT 10.0; Win64; x64", "Macintosh; Intel Mac OS X 10_15_7", "X11; Linux x86_64"])
48
+
49
+ user_agent = f"Mozilla/5.0 ({os_version}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/{chrome_version} Safari/537.36"
50
+
51
+ return {
52
+ "user_agent": user_agent,
53
+ "viewport": random.choice(resolutions),
54
+ "memory": random.choice(memory_options),
55
+ "cpus": random.choice(cpu_options)
56
+ }
57
 
58
+ # --- মূল ব্রাউজার প্রসেসিং ইঞ্জিন ---
59
+ async def process_engine_task(payload: CommandPayload):
60
  async with async_playwright() as p:
61
+ fingerprint = get_dynamic_fingerprint() if payload.smart_fingerprint else {
62
+ "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/122.0.0.0 Safari/537.36",
63
+ "viewport": {"width": 1920, "height": 1080},
64
+ "memory": 8, "cpus": 4
65
+ }
 
 
 
 
 
 
 
 
 
 
 
 
66
 
67
+ browser_args = [
68
+ "--no-sandbox",
69
+ "--disable-setuid-sandbox",
70
+ "--disable-blink-features=AutomationControlled",
71
+ "--disable-dev-shm-usage"
72
+ ]
73
+
74
+ # ৩. পারসিস্টেন্ট সেশন হ্যান্ডলিং
75
+ if payload.session_id:
76
+ user_data_dir = f"/app/sessions/{payload.session_id}"
77
+ os.makedirs(user_data_dir, exist_ok=True)
78
+ context = await p.chromium.launch_persistent_context(
79
+ user_data_dir=user_data_dir,
80
+ headless=True,
81
+ user_agent=fingerprint['user_agent'],
82
+ viewport=fingerprint['viewport'],
83
+ args=browser_args
84
+ )
85
+ page = context.pages[0] if context.pages else await context.new_page()
86
+ else:
87
+ browser = await p.chromium.launch(headless=True, args=browser_args)
88
+ context = await browser.new_context(
89
+ user_agent=fingerprint['user_agent'],
90
+ viewport=fingerprint['viewport']
91
+ )
92
+ page = await context.new_page()
93
+
94
+ # ৭. স্মার্ট স্টিলথ ইনজেকশন (CPU/Memory Spoofing)
95
+ stealth_script = f"""
96
+ Object.defineProperty(navigator, 'webdriver', {{get: () => false}});
97
+ window.chrome = {{ runtime: {{}} }};
98
+ Object.defineProperty(navigator, 'languages', {{get: () => ['en-US', 'en']}});
99
+ Object.defineProperty(navigator, 'deviceMemory', {{get: () => {fingerprint['memory']}}});
100
+ Object.defineProperty(navigator, 'hardwareConcurrency', {{get: () => {fingerprint['cpus']}}});
101
+ """
102
+ await context.add_init_script(stealth_script)
103
  await stealth_async(page)
104
 
105
  try:
106
+ # পেজ নেভিগেশন
107
+ await page.goto(payload.url, wait_until="domcontentloaded", timeout=60000)
108
+
109
+ # ৪. ক্যাপচা সলভিং মডিউল (Simulation / Wait protocol)
110
+ if payload.solve_captcha:
111
+ # Cloudflare বা রেডি ক্যাপচার জন্য এক্সট্রা অপেক্ষা করা
112
+ await page.wait_for_timeout(5000)
113
+ # (ভবিষ্যতে এখানে 2Captcha বা AI ভিশন API যুক্ত করা যাবে)
114
+
115
  if payload.wait_time_ms > 0:
116
  await page.wait_for_timeout(payload.wait_time_ms)
117
 
118
  script_result = await page.evaluate(payload.js_code) if payload.js_code else None
119
  html_content = await page.content() if payload.extract_html else None
120
+
121
+ # ৬. ভিজ্যুয়াল ডিবাগিং (Screenshot to Base64)
122
+ screenshot_b64 = None
123
+ if payload.visual_debug:
124
+ screenshot_bytes = await page.screenshot(type='jpeg', quality=70)
125
+ screenshot_b64 = base64.b64encode(screenshot_bytes).decode('utf-8')
126
 
127
+ result = {
128
  "status": "success",
 
129
  "current_url": page.url,
130
+ "js_output": script_result,
131
+ "html_extracted": bool(html_content),
132
+ "fingerprint_used": fingerprint['user_agent'],
133
+ "screenshot_base64": screenshot_b64
134
  }
135
  except Exception as e:
136
+ result = {"status": "error", "message": str(e)}
137
  finally:
138
+ if payload.session_id:
139
+ await context.close()
140
+ else:
141
+ await browser.close()
142
+
143
+ return result
144
+
145
+ # --- ৫. ওয়েবহুক ট্রিগার ফাংশন ---
146
+ def send_webhook(url: str, data: dict):
147
+ try:
148
+ req = urllib.request.Request(url, data=json.dumps(data).encode('utf-8'), headers={'Content-Type': 'application/json'})
149
+ urllib.request.urlopen(req, timeout=10)
150
+ except Exception as e:
151
+ print(f"Webhook delivery failed: {str(e)}")
152
+
153
+ async def autonomous_background_task(payload: CommandPayload):
154
+ result = await process_engine_task(payload)
155
+ if payload.webhook_url:
156
+ await asyncio.to_thread(send_webhook, payload.webhook_url, result)
157
+
158
+ # --- রিয়েল-টাইম এপিআই (আগের মতো) ---
159
+ @app.post("/api/v1/execute")
160
+ async def execute_browser_task(payload: CommandPayload, x_api_key: str = Header(None)):
161
+ if x_api_key != MASTER_API_KEY:
162
+ raise HTTPException(status_code=403, detail="Access Denied")
163
+ return await process_engine_task(payload)
164
+
165
+ # --- ৫. নতুন এপিআই: অটোনোমাস শিডিউলার ---
166
+ @app.post("/api/v1/schedule")
167
+ async def schedule_task(payload: CommandPayload, background_tasks: BackgroundTasks, x_api_key: str = Header(None)):
168
+ if x_api_key != MASTER_API_KEY:
169
+ raise HTTPException(status_code=403, detail="Access Denied")
170
+ if not payload.webhook_url:
171
+ raise HTTPException(status_code=400, detail="webhook_url is required for scheduled tasks")
172
+
173
+ background_tasks.add_task(autonomous_background_task, payload)
174
+ return {"status": "Task scheduled successfully", "webhook": payload.webhook_url}