python selenuim automated login gmail

36 views
Skip to first unread message

azedine chentouf

unread,
Aug 5, 2024, 8:35:51 AM8/5/24
to Selenium Users
from seleniumwire import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import ElementNotInteractableException, TimeoutException
import time
import gc
import random
import os

def read_user_data(file_path):
    users = []
    try:
        with open(file_path, 'r') as file:
            for line in file:
                email, password, proxy_host, proxy_port, proxy_user, proxy_pass = line.strip().split(';')
                users.append({
                    'email': email,
                    'password': password,
                    'proxy_host': proxy_host,
                    'proxy_port': proxy_port,
                    'proxy_user': proxy_user,
                    'proxy_pass': proxy_pass
                })
    except FileNotFoundError:
        print(f"File '{file_path}' not found.")
    except Exception as e:
        print(f"Error reading '{file_path}': {str(e)}")
    return users

def create_firefox_options(proxy_host, proxy_port, proxy_user, proxy_pass, user_agent):
    options = webdriver.FirefoxOptions()
    profile_path = r'C:\Users\tec-d\AppData\Roaming\Mozilla\Firefox\Profiles\s2es2q6o.default-release-1722442840184'

    profile = webdriver.FirefoxProfile(profile_path)

    profile.set_preference("network.proxy.type", 1)
    profile.set_preference("network.proxy.http", proxy_host)
    profile.set_preference("network.proxy.http_port", proxy_port)
    profile.set_preference("network.proxy.ssl", proxy_host)
    profile.set_preference("network.proxy.ssl_port", proxy_port)
    profile.set_preference("network.proxy.no_proxies_on", "localhost,127.0.0.1")
    profile.set_preference("browser.safebrowsing.enabled", True)
    profile.set_preference("privacy.clearOnShutdown.cookies", True)
    profile.set_preference("privacy.clearOnShutdown.history", True)
    profile.set_preference("privacy.clearOnShutdown.offlineApps", True)
    profile.set_preference("privacy.sanitize.sanitizeOnShutdown", True)
    profile.set_preference("dom.webdriver.enabled", False)  
    profile.set_preference("useAutomationExtension", False)  
    profile.set_preference("marionette", False)
    profile.set_preference('media.navigator.permission.disabled', True)

    profile.set_preference("general.useragent.override", user_agent)
    profile.set_preference("dom.webnotifications.enabled", False)
    profile.set_preference("dom.push.enabled", False)
    profile.set_preference("browser.search.suggest.enabled", False)

    options.profile = profile
    options.add_argument("--disable-blink-features=AutomationControlled")
    options.add_argument("--ignore-ssl-errors")
    options.add_argument("--ignore-certificate-errors")
    options.add_argument("--allow-insecure-localhost")
    options.add_argument("--disable-gpu")
    options.add_argument("--disable-infobars")
    options.add_argument("--start-maximized")
    options.add_argument("--no-sandbox")
    options.add_argument("--disable-dev-shm-usage")
    options.add_argument(f"--user-agent={user_agent}")
   
    user_data_dir = os.path.join(os.getcwd(), 'user_data', proxy_user)
    os.makedirs(user_data_dir, exist_ok=True)
    options.add_argument(f"--user-data-dir={user_data_dir}")
   
    return options

def get_random_user_agent():
    user_agents = [
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0",
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:127.0) Gecko/20100101 Firefox/127.0",
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:126.0) Gecko/20100101 Firefox/126.0",
    ]
    return random.choice(user_agents)

def simulate_advanced_human_behavior(driver):
    actions = [
        lambda: driver.execute_script("window.scrollBy(0, window.innerHeight * Math.random())"),
        lambda: driver.execute_script("window.scrollBy(window.innerWidth * Math.random(), 0)"),
        lambda: driver.execute_script("window.scrollBy(window.innerWidth * Math.random(), window.innerHeight * Math.random())"),
        lambda: driver.find_element(By.XPATH, '//*[@id="identifierId"]').click()
    ]
   
    for action in actions:
        if random.choice([True, False]):
            action()
        random_sleep(1, 4)

def type_with_delay(element, text):
    for character in text:
        element.send_keys(character)
        time.sleep(random.uniform(0.1, 0.3))

def random_sleep(min_seconds, max_seconds):
    time.sleep(random.uniform(min_seconds, max_seconds))

def test_login(user):
    proxy_options = {
        'proxy': {
            'http': f'http://{user["proxy_user"]}:{user["proxy_pass"]}@{user["proxy_host"]}:{user["proxy_port"]}',
            'https': f'http://{user["proxy_user"]}:{user["proxy_pass"]}@{user["proxy_host"]}:{user["proxy_port"]}',
            'no_proxy': 'localhost,127.0.0.1'
        }
    }

    user_agent = get_random_user_agent()
    firefox_options = create_firefox_options(user["proxy_host"], int(user["proxy_port"]), user["proxy_user"], user["proxy_pass"], user_agent)
   
    driver = webdriver.Firefox(options=firefox_options, seleniumwire_options=proxy_options)

    driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")
    driver.execute_script("Object.defineProperty(navigator, 'plugins', {get: () => [1, 2, 3]})")
    driver.execute_script("Object.defineProperty(navigator, 'languages', {get: () => ['en-US', 'en']})")
    driver.execute_script("Object.defineProperty(navigator, 'platform', {get: () => 'Win32'})")
    driver.execute_script("Object.defineProperty(navigator, 'hardwareConcurrency', {get: () => 4})")
    driver.execute_script("Object.defineProperty(navigator, 'deviceMemory', {get: () => 8})")

    driver.header_overrides = {
        'User-Agent': user_agent,
        'Accept-Language': 'en-US,en;q=0.9',
        'Accept-Encoding': 'gzip, deflate, br',
        'Upgrade-Insecure-Requests': '1'
    }
    driver.delete_all_cookies()
    driver.get("https://accounts.google.com/v3/signin/identifier?continue=https%3A%2F%2Fmail.google.com%2Fmail%2Fu%2F0%2F&emr=1&followup=https%3A%2F%2Fmail.google.com%2Fmail%2Fu%2F0%2F&osid=1&passive=1209600&service=mail&ifkv=AdF4I75wtR0RvjI3rDGGeGw_A-_HOcXExTT8fYiwdpj7sL3Pv-MuzIsCptHWUKUZLeQ8_T9caN54IQ&ddm=0&flowName=GlifWebSignIn&flowEntry=ServiceLogin#inbox")
    driver.maximize_window()
   
    simulate_advanced_human_behavior(driver)
    random_sleep(2, 5)

    try:
        try:
            WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="gb"]/div[2]')))
            print(f"User {user['email']} is already logged in.")
            driver.get("https://mail.google.com/mail/u/0/#inbox")
        except TimeoutException:
            try:
                account_selector = WebDriverWait(driver, 10).until(
                    EC.element_to_be_clickable((By.XPATH, f"//div[text()='{user['email']}']"))
                )
                account_selector.click()
                print(f"Selected existing account: {user['email']}")
                driver.get("https://mail.google.com/mail/u/0/#inbox")
            except TimeoutException:
                email_field = WebDriverWait(driver, 20).until(
                    EC.presence_of_element_located((By.XPATH, '//*[@id="identifierId"]'))
                )
                type_with_delay(email_field, user['email'])
                email_field.send_keys(Keys.ENTER)

                WebDriverWait(driver, 20).until(
                    EC.presence_of_element_located((By.XPATH, '//*[@id="password"]/div[1]/div/div[1]/input'))
                )
                password_field = WebDriverWait(driver, 20).until(
                    EC.element_to_be_clickable((By.XPATH, '//*[@id="password"]/div[1]/div/div[1]/input'))
                )
                type_with_delay(password_field, user['password'])
                password_field.send_keys(Keys.ENTER)

                WebDriverWait(driver, 30).until(EC.title_contains('Inbox'))
                print(f"Login successful for user: {user['email']}")

                premier_email = WebDriverWait(driver, 10).until(
                    EC.element_to_be_clickable((By.CSS_SELECTOR, 'tr.zA.zE'))
                )
                premier_email.click()
                WebDriverWait(driver, 10).until(
                    EC.presence_of_element_located((By.CSS_SELECTOR, 'div.a3s'))
                )
                random_sleep(5, 10)  
                driver.delete_all_cookies()

    except ElementNotInteractableException as e:
        print(f"Element not interactable for user {user['email']}: {e}")
    except TimeoutException as e:
        print(f"Timeout occurred for user {user['email']}: {e}")
    except Exception as e:
        print(f"An error occurred for user {user['email']}: {e}")
    finally:
        driver.quit()
        gc.collect()

users = read_user_data('C:/Users/tec-d/OneDrive/Bureau/Selenium python/Selenium python/index.txt')

for user in users:
    test_login(user)

Reply all
Reply to author
Forward
0 new messages