Opera8 commited on
Commit
2a2d95b
·
verified ·
1 Parent(s): ec1da40

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +74 -0
app.py ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import asyncio
2
+ import gradio as gr
3
+ from playwright.async_api import async_playwright
4
+
5
+ async def scrape_google_ai(search_query):
6
+ # ساخت یو‌آر‌ال اختصاصی با پارامتر هوشواره گوگل
7
+ url = f"https://www.google.com/search?q={search_query}&udm=50"
8
+ screenshot_path = "google_search_view.png"
9
+
10
+ async with async_playwright() as p:
11
+ try:
12
+ # لانچ کردن مرورگر کروم با فلگ‌های امنیتی برای دور زدن محیط داکر و سیستم‌های آنتی‌ربات
13
+ browser = await p.chromium.launch(
14
+ headless=True,
15
+ args=[
16
+ "--no-sandbox",
17
+ "--disable-setuid-sandbox",
18
+ "--disable-dev-shm-usage",
19
+ "--disable-blink-features=AutomationControlled"
20
+ ]
21
+ )
22
+
23
+ # شبیه‌سازی دقیق یک دستگاه موبایل اندرویدی (مطابق اسکرین‌شات شما)
24
+ context = await browser.new_context(
25
+ user_agent="Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Mobile Safari/537.36",
26
+ viewport={"width": 412, "height": 915},
27
+ locale="fa-IR",
28
+ timezone_id="Asia/Tehran"
29
+ )
30
+
31
+ page = await context.new_page()
32
+
33
+ # باز کردن لینک گوگل
34
+ print(f"Navigating to: {url}")
35
+ await page.goto(url, wait_until="networkidle", timeout=45000)
36
+
37
+ # استراحت ۸ ثانیه‌ای به مرورگر تا کدهای جاوااسکریپت و چت‌باکس هوشواره کاملاً رندر شوند
38
+ await page.wait_for_timeout(8000)
39
+
40
+ # ثبت اسکرین‌شات زنده برای عیب‌یابی (Debug) و دیدن وضعیت صفحه
41
+ await page.screenshot(path=screenshot_path)
42
+
43
+ # استخراج تمام متون قابل مشاهده در بدنه صفحه
44
+ extracted_text = await page.evaluate("() => document.body.innerText")
45
+
46
+ await browser.close()
47
+ return extracted_text, screenshot_path
48
+
49
+ except Exception as e:
50
+ if 'browser' in locals():
51
+ await browser.close()
52
+ return f"خطایی در حین استخراج رخ داد: {str(e)}", None
53
+
54
+ # طراحی لایه گرافیکی تست با Gradio
55
+ with gr.Blocks(title="Google AI Overview Tester") as demo:
56
+ gr.Markdown("## 🧪 محیط آزمایشی استخراج هوشواره گوگل")
57
+ gr.Markdown("این ابزار با استفاده از Playwright و شبیه‌سازی مرورگر واقعی موبایل، تلاش می‌کند محتوای پاسخ هوشمند گوگل (`udm=50`) را رندر و استخراج کند.")
58
+
59
+ with gr.Row():
60
+ with gr.Column():
61
+ query_input = gr.Textbox(label="عبارت جستجو (مثلاً: سلام)", value="سلام", placeholder="کلمه یا متن خود را برای سرچ وارد کنید...")
62
+ submit_btn = gr.Button("ارسال درخواست و رندر صفحه", variant="primary")
63
+
64
+ with gr.Row():
65
+ with gr.Column():
66
+ text_output = gr.TextArea(label="متن خام استخراج‌شده از صفحه (innerText)", lines=18, interactive=False)
67
+ with gr.Column():
68
+ image_output = gr.Image(label="اسکرین‌شات زنده از چیزی که داکر می‌بیند")
69
+
70
+ submit_btn.click(fn=scrape_google_ai, inputs=query_input, outputs=[text_output, image_output])
71
+
72
+ if __name__ == "__main__":
73
+ # اجرا روی پورت مچ شده با هاگینگ فیس
74
+ demo.launch(server_name="0.0.0.0", server_port=7860)