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.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.")
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']}")
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)