Spaces:
Running
Running
import time | |
import os | |
import random | |
import undetected_chromedriver as uc | |
from selenium.webdriver.common.by import By | |
TWITTER_EMAIL = os.getenv("TWITTER_EMAIL") | |
TWITTER_PASSWORD = os.getenv("TWITTER_PASSWORD") | |
RESPONSES = [ | |
"رائع ما كتبته!", | |
"اتفق معك تمامًا!", | |
"كلمات ملهمة جدًا!", | |
"أحببت هذا الطرح!", | |
"مميز كالعادة!", | |
"نظرة جميلة للموضوع!" | |
] | |
def login(driver): | |
driver.get("https://twitter.com/login") | |
time.sleep(5) | |
email_field = driver.find_element(By.NAME, "text") | |
email_field.send_keys(TWITTER_EMAIL + "\n") | |
time.sleep(3) | |
password_field = driver.find_element(By.NAME, "password") | |
password_field.send_keys(TWITTER_PASSWORD + "\n") | |
time.sleep(5) | |
def tweet_like_user(driver, username): | |
driver.get(f"https://twitter.com/{username}") | |
time.sleep(5) | |
tweets = driver.find_elements(By.XPATH, "//div[@data-testid='tweetText']") | |
texts = [tweet.text for tweet in tweets[:5]] | |
combined = " ".join(texts) | |
if "ذكاء" in combined: | |
reply = "الذكاء الاصطناعي يدهشني أيضًا!" | |
elif "برمجة" in combined: | |
reply = "أحب البرمجة مثلك تمامًا!" | |
else: | |
reply = random.choice(RESPONSES) | |
driver.get("https://twitter.com/compose/tweet") | |
time.sleep(5) | |
box = driver.find_element(By.CSS_SELECTOR, "div[aria-label='Tweet text']") | |
box.send_keys(f"أنا نورا، أتعلم من تغريداتكم.\n{reply}") | |
btn = driver.find_element(By.XPATH, "//div[@data-testid='tweetButtonInline']") | |
btn.click() | |
time.sleep(3) | |
def reply_to_home_feed(driver): | |
driver.get("https://twitter.com/home") | |
time.sleep(7) | |
tweets = driver.find_elements(By.XPATH, "//article[@role='article']") | |
for tweet in tweets[:3]: # رد على أول 3 تغريدات فقط | |
try: | |
tweet_text = tweet.find_element(By.XPATH, ".//div[@data-testid='tweetText']").text | |
reply = random.choice(RESPONSES) | |
more = tweet.find_element(By.XPATH, ".//div[@data-testid='reply']") | |
driver.execute_script("arguments[0].click();", more) | |
time.sleep(3) | |
reply_box = driver.find_element(By.CSS_SELECTOR, "div[aria-label='Tweet text']") | |
reply_box.send_keys(f"{reply} - مع تحياتي، نورا") | |
reply_button = driver.find_element(By.XPATH, "//div[@data-testid='tweetButton']") | |
reply_button.click() | |
print("تم الرد على تغريدة.") | |
time.sleep(5) | |
except Exception as e: | |
print("تخطي تغريدة بسبب خطأ:", e) | |
def start_noura(): | |
options = uc.ChromeOptions() | |
options.add_argument("--no-sandbox") | |
options.add_argument("--disable-dev-shm-usage") | |
options.add_argument("--headless=new") | |
driver = uc.Chrome(options=options) | |
try: | |
login(driver) | |
username = TWITTER_EMAIL.split("@")[0] | |
tweet_like_user(driver, username) | |
reply_to_home_feed(driver) | |
print("نورا انتهت من التفاعل.") | |
except Exception as e: | |
print("حدث خطأ:", e) | |
driver.quit() | |
import os | |
import time | |
import random | |
import undetected_chromedriver as uc | |
from selenium.webdriver.common.by import By | |
from selenium.webdriver.chrome.webdriver import WebDriver | |
# إعدادات الحساب من البيئة | |
TWITTER_EMAIL = os.getenv("TWITTER_EMAIL") | |
TWITTER_PASSWORD = os.getenv("TWITTER_PASSWORD") | |
# ردود افتراضية | |
RESPONSES = [ | |
"رائع ما كتبته!", | |
"اتفق معك تمامًا!", | |
"كلمات ملهمة جدًا!", | |
"أحببت هذا الطرح!", | |
"مميز كالعادة!", | |
"نظرة جميلة للموضوع!" | |
] | |
def login(driver: WebDriver) -> None: | |
"""تسجيل الدخول إلى تويتر""" | |
driver.get("https://twitter.com/login") | |
time.sleep(5) | |
driver.find_element(By.NAME, "text").send_keys(TWITTER_EMAIL + "\n") | |
time.sleep(3) | |
driver.find_element(By.NAME, "password").send_keys(TWITTER_PASSWORD + "\n") | |
time.sleep(5) | |
def generate_reply(texts: list[str]) -> str: | |
"""اختيار رد بناءً على الكلمات المفتاحية""" | |
combined = " ".join(texts).lower() | |
if "ذكاء" in combined: | |
return "الذكاء الاصطناعي يدهشني أيضًا!" | |
elif "برمجة" in combined: | |
return "أحب البرمجة مثلك تمامًا!" | |
return random.choice(RESPONSES) | |
def tweet_like_user(driver: WebDriver, username: str) -> None: | |
"""نشر تغريدة مستوحاة من تغريدات المستخدم""" | |
driver.get(f"https://twitter.com/{username}") | |
time.sleep(5) | |
tweets = driver.find_elements(By.XPATH, "//div[@data-testid='tweetText']") | |
texts = [tweet.text for tweet in tweets[:5]] | |
reply = generate_reply(texts) | |
driver.get("https://twitter.com/compose/tweet") | |
time.sleep(5) | |
box = driver.find_element(By.CSS_SELECTOR, "div[aria-label='Tweet text']") | |
box.send_keys(f"أنا نورا، أتعلم من تغريداتكم.\n{reply}") | |
driver.find_element(By.XPATH, "//div[@data-testid='tweetButtonInline']").click() | |
time.sleep(3) | |
def reply_to_home_feed(driver: WebDriver) -> None: | |
"""الرد على تغريدات الصفحة الرئيسية""" | |
driver.get("https://twitter.com/home") | |
time.sleep(7) | |
tweets = driver.find_elements(By.XPATH, "//article[@role='article']") | |
for tweet in tweets[:3]: | |
try: | |
tweet_text = tweet.find_element(By.XPATH, ".//div[@data-testid='tweetText']").text | |
reply = random.choice(RESPONSES) | |
tweet.find_element(By.XPATH, ".//div[@data-testid='reply']").click() | |
time.sleep(3) | |
reply_box = driver.find_element(By.CSS_SELECTOR, "div[aria-label='Tweet text']") | |
reply_box.send_keys(f"{reply} - مع تحياتي، نورا") | |
driver.find_element(By.XPATH, "//div[@data-testid='tweetButton']").click() | |
print("تم الرد على تغريدة.") | |
time.sleep(5) | |
except Exception as e: | |
print(f"تخطي تغريدة بسبب خطأ: {e}") | |
def start_noura() -> None: | |
"""تشغيل نظام نورا الآلي""" | |
print("تشغيل نورا...") | |
options = uc.ChromeOptions() | |
options.add_argument("--no-sandbox") | |
options.add_argument("--disable-dev-shm-usage") | |
options.add_argument("--headless=new") | |
driver = uc.Chrome(options=options) | |
try: | |
login(driver) | |
username = TWITTER_EMAIL.split("@")[0] | |
tweet_like_user(driver, username) | |
reply_to_home_feed(driver) | |
print("نورا انتهت من التفاعل.") | |
except Exception as e: | |
print(f"حدث خطأ عام: {e}") | |
finally: | |
driver.quit() | |