from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from fake_useragent import UserAgent import time import random import requests # --- Configuration --- ROBOFOREX_LOGIN_URL = "https://my.roboforex.com/en/login/" ROBOFOREX_ACCOUNTS_URL = "https://my.roboforex.com/en/trading-account/accounts/" TELEGRAM_BOT_TOKEN = "8322993380:AAET-DjFk7KZU62HDHpE15rWuQ1I0C8JhhY" TELEGRAM_CHAT_ID = "889263240" EMAIL = "florian@kiptschuk.de" PASSWORD = "Christina21917" # --- Random User-Agent --- ua = UserAgent() user_agent = ua.random # --- Chrome Options --- options = webdriver.ChromeOptions() options.add_argument(f"user-agent={user_agent}") options.add_argument("--disable-blink-features=AutomationControlled") options.add_experimental_option("excludeSwitches", ["enable-automation"]) options.add_experimental_option("useAutomationExtension", False) # --- Initialize ChromeDriver --- driver = webdriver.Chrome(options=options) # --- Random Delay --- def random_delay(min_seconds=0.5, max_seconds=3): delay = random.uniform(min_seconds, max_seconds) print(f"Waiting for {delay:.2f} seconds...") time.sleep(delay) def random_delay_main(min_seconds=60, max_seconds=600): delay = random.uniform(min_seconds, max_seconds) print(f"Waiting for {delay:.2f} seconds...") time.sleep(delay) # --- Human-Like Typing --- def human_like_typing(element, text): for char in text: element.send_keys(char) time.sleep(random.uniform(0.05, 0.3)) # --- Login Function --- def login(): driver.get(ROBOFOREX_LOGIN_URL) random_delay(2, 5) # Find email and password fields email_field = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.NAME, "email")) ) password_field = driver.find_element(By.NAME, "login[password]") # Simulate human-like typing human_like_typing(email_field, EMAIL) random_delay(0.5, 2) human_like_typing(password_field, PASSWORD) # Submit the form password_field.send_keys(Keys.RETURN) random_delay(3, 8) # Check if login was successful if "Members Area" in driver.title: print("Login successful!") return True else: print("Login failed!") return False # --- Extract Balance and Equity --- def extract_balance_equity(): driver.get(ROBOFOREX_ACCOUNTS_URL) random_delay(3, 10) # Scroll randomly driver.execute_script("window.scrollBy(0, 100);") random_delay(1, 3) # Wait for the balance-equity-sum div to load balance_equity_div = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "balance-equity-sum")) ) # Extract the text from each div balance_div = balance_equity_div.find_element(By.XPATH, "./div[1]") equity_div = balance_equity_div.find_element(By.XPATH, "./div[2]") # Extract the balance and equity values balance = balance_div.text.replace("Total balance:", "").strip() equity = equity_div.text.replace("Total equity:", "").strip() print(f"Balance: {balance}, Equity: {equity}") return balance, equity def send_telegram_notification(balance, equity): message = f"Total Balance: {balance}\nTotal Equity: {equity}" url = f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/sendMessage" payload = { "chat_id": TELEGRAM_CHAT_ID, "text": message } try: response = requests.post(url, data=payload, timeout=10) response.raise_for_status() print("Telegram notification sent!") except requests.exceptions.RequestException as e: print(f"Failed to send Telegram notification: {e}") # --- Main Workflow --- if __name__ == "__main__": while True: # Infinite loop to keep the script running try: if login(): balance, equity = extract_balance_equity() send_telegram_notification(balance, equity) else: print("Failed to log in.") finally: driver.refresh() # Add random delay between iterations random_delay_main(60, 600)