Code:
import os
import time
from tkinter import Tk, filedialog
from selenium import webdriver
from amazoncaptcha import AmazonCaptcha
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# Fonction pour sélectionner un fichier texte
def select_file():
root = Tk()
root.withdraw() # Cache la fenêtre principale
file_path = filedialog.askopenfilename(filetypes=[("Text Files", "*.txt")])
root.destroy() # Ferme la fenêtre de sélection de fichier
return file_path
# Fonction pour écrire dans un fichier texte en mode ajout
def write_to_file(file_name, content):
with open(file_name, "a") as f:
f.write(content + "\n")
# Charger les numéros déjà validés et invalidés à partir des fichiers
def load_tested_numbers(file_name):
tested_numbers = set()
if os.path.exists(file_name):
with open(file_name, "r") as f:
tested_numbers.update(f.read().splitlines())
return tested_numbers
# Fonction pour tester un numéro et enregistrer le résultat
def test_number(driver, phone_number):
# Accéder à la page de la captcha
driver.get("https://www.amazon.com/errors/validateCaptcha")
# Attendre que la captcha soit chargée
captcha_image = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.XPATH, "//div[@class='a-row a-text-center']//img"))
)
# Trouver le lien de l'image de la captcha
link = captcha_image.get_attribute('src')
# Résoudre la captcha
captcha = AmazonCaptcha.fromlink(link)
captcha_value = AmazonCaptcha.solve(captcha)
# Remplir le champ de la captcha
input_field = driver.find_element(By.ID, "captchacharacters")
input_field.send_keys(captcha_value)
# Cliquer sur le bouton
try:
button = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.CLASS_NAME, "a-button-text"))
)
button.click()
except:
print("Bouton de validation de la captcha non trouvé.")
return False
# Attendre que la page se charge
driver.implicitly_wait(10)
# Exécuter du JavaScript pour cliquer sur le bouton "Sign in"
js_script = "document.querySelector('span.nav-action-inner').click();"
try:
driver.execute_script(js_script)
except:
print("Bouton 'Sign in' non trouvé.")
return False
# Attendre que le champ d'email soit présent
email_field = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "ap_email"))
)
# Remplir le champ d'email avec le numéro à tester
email_field.send_keys(phone_number)
# Cliquer sur le bouton "Continuer"
try:
continue_button = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.ID, "continue"))
)
continue_button.click()
except:
print("Bouton 'Continuer' non trouvé.")
return False
# Attendre un court instant pour laisser le temps à la page de se charger
time.sleep(0.5)
# Attendre 1 seconde pour vérifier si le champ de mot de passe apparaît
driver.implicitly_wait(1)
try:
password_field = driver.find_element(By.ID, "ap_password")
# Si le champ de mot de passe est présent, le numéro est valide
write_to_file("numeros_valides.txt", phone_number) # Enregistrer le numéro valide
return True
except:
# Si le champ de mot de passe n'est pas présent, le numéro est invalide
write_to_file("numeros_invalides.txt", phone_number) # Enregistrer le numéro invalide
return False
# Chemin vers le bureau de l'utilisateur
desktop_path = os.path.join(os.path.join(os.environ['USERPROFILE']), 'Desktop')
# Chemin vers le chromedriver
chrome_driver_path = "C:\\Users\\ROMEO\\Desktop\\chromedriver\\chromedriver.exe"
# Configuration des options du navigateur
options = Options()
options.add_argument("--start-maximized") # Maximise la fenêtre du navigateur
# Démarrage du service du chromedriver
service = Service(chrome_driver_path)
service.start()
# Démarrage du navigateur avec les options et le service spécifiés
driver = webdriver.Chrome(service=service, options=options)
try:
# Charger les numéros déjà testés
tested_valid_numbers = load_tested_numbers("numeros_valides.txt")
tested_invalid_numbers = load_tested_numbers("numeros_invalides.txt")
# Sélectionner le fichier texte contenant les numéros à tester
file_path = select_file()
if not file_path:
print("Aucun fichier sélectionné.")
quit()
# Ouvrir le fichier texte pour lire les numéros
with open(file_path, "r") as f:
phone_numbers = f.readlines()
# Tester chaque numéro
for number in phone_numbers:
number = number.strip()
if number not in tested_valid_numbers and number not in tested_invalid_numbers:
if test_number(driver, number):
tested_valid_numbers.add(number)
else:
tested_invalid_numbers.add(number)
finally:
# Fermer le navigateur et arrêter le service du chromedriver
driver.quit()
service.stop()