Test / facebook_bot.py
mrwabnalas40's picture
Upload 10 files
eebf941 verified
import asyncio
from pathlib import Path
from playwright.async_api import async_playwright, TimeoutError as PlaywrightTimeoutError
async def post_to_facebook(email: str, password: str, message: str, image_path: str = None):
async with async_playwright() as p:
browser = await p.chromium.launch(headless=False) # headless=True إذا تريد بدون واجهة
context = await browser.new_context()
page = await context.new_page()
try:
print("[*] تسجيل الدخول...")
await page.goto("https://www.facebook.com/", timeout=30000)
# انتظر حقول البريد وكلمة السر قبل تعبئتها
await page.wait_for_selector('input[name="email"]', timeout=15000)
await page.fill('input[name="email"]', email)
await page.fill('input[name="pass"]', password)
await page.click('button[name="login"]')
# انتظر ظهور زر إنشاء منشور بعد تسجيل الدخول
await page.wait_for_selector('div[aria-label="إنشاء منشور"]', timeout=20000)
print("[*] فتح نافذة المنشور...")
await page.click('div[aria-label="إنشاء منشور"]')
await page.wait_for_selector('div[role="textbox"]', timeout=10000)
# استخدام focus ثم keyboard.type لكتابة الرسالة بطريقة أكثر ثباتاً
textbox = await page.query_selector('div[role="textbox"]')
await textbox.focus()
await page.keyboard.type(message, delay=50) # تأخير بسيط لمحاكاة الكتابة البشرية
# رفع صورة إذا مسارها صحيح
if image_path and Path(image_path).is_file():
print("[*] رفع الصورة...")
file_input = await page.query_selector('input[type="file"]')
if file_input:
await file_input.set_input_files(image_path)
# انتظر قليلاً حتى تكتمل عملية الرفع
await page.wait_for_timeout(5000)
else:
print("[!] لم يتم العثور على عنصر رفع الملف.")
print("[*] النشر جارٍ...")
await page.click('div[aria-label="نشر"]')
# انتظر لتأكيد النشر أو ظهور إشعار بنجاح العملية (يمكن تحسينه لاحقاً)
await page.wait_for_timeout(5000)
print("[✓] تم النشر بنجاح.")
except PlaywrightTimeoutError as te:
print("[!] انتهت مهلة الانتظار:", te)
except Exception as e:
print("[!] حدث خطأ:", e)
finally:
await browser.close()
print("[*] تم إغلاق المتصفح.")
# مثال للاستخدام
if __name__ == "__main__":
email = "your-email@example.com"
password = "your-password"
message = "منشور جديد مع صورة!"
image_path = "path/to/your/image.jpg" # ضع المسار الصحيح هنا، أو None لبدون صورة
asyncio.run(post_to_facebook(email, password, message, image_path))