Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 29/06/2020, à 13:49

lebossejames

python selenium saisi de login authentification failed

Bonjour,

J'ai développé un script sous python 3.6.9 qui fait appel à Selenium sous Chromium 81.0.4044.138 afin de remplir les champs Login/password d'un site web. Cependant cela fonctionnait parfaitement bien, il y a 1 an. Maintenant, il s'avère qu'il y a un problème d'authentification d'après le site web. J'ai vérifié les champs remplis, ils sont corrects (vérification de la longueur, les espaces ...). Testé en mode manuel cela se connecte.

Auriez-vous une idée de ce problème s'il vous plait?



#### version 1.00

from selenium import webdriver
from pyvirtualdisplay import Display
from selenium.webdriver.chrome.options import Options
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
import selenium.common.exceptions
from selenium.common.exceptions import NoSuchElementException,TimeoutException
from selenium.webdriver.remote.webelement import WebElement
import time
import sys,os

sys.excepthook = sys.__excepthook__


print('sys.argv[0] =', sys.argv[0])             
pathname = os.path.dirname(sys.argv[0])        
print('path =', pathname)
print('full path =', os.path.abspath(pathname)) 

NB_REPETITIONS=2
TIME_WAIT_ELEMENT_CHANGE_WEBPAGE=10
#nom temporaire fichier résultat
fileNameResult="temp.txt"
isConnected=False
isAlreadyConnected=False
display = Display(visible=0, size=(1024, 768))

def send_keys(el: WebElement, keys: str):
	for i in range(len(keys)):
		el.send_keys(keys[i])

def initialize_Driver():
	opts = Options()
	if sys.argv[5] == 'PROD' :
		opts.add_argument("--no-sandbox")
		opts.add_argument("--disable-setuid-sandbox")
		display.start()        
		driver = webdriver.Chrome(options=opts)        
	else:    
		opts.binary_location="/usr/bin/chromium-browser" #path to chromium binary
		opts.add_experimental_option("excludeSwitches", ["enable-automation"])
		opts.add_experimental_option('useAutomationExtension', False)
		opts.add_argument("--disable-blink-features")
		opts.add_argument('--disable-infobars')
		opts.add_argument("--disable-blink-features=AutomationControlled")
		opts.add_argument("--disable-extensions")
		driver = webdriver.Chrome(os.path.abspath(pathname)+"/Drivers_Browser/"+sys.argv[6]+"/chromedriver", options=opts)
	
	driver.delete_all_cookies()
	driver.maximize_window()
	driver.set_page_load_timeout(60)
	return driver;




if len(sys.argv) < 6:
	print ("Veuillez saisir en 1er parametre du script, le nom de l'operateur")
	print ("Veuillez saisir en 2ieme/3ieme parametre du script, le login/password")
	print ("Veuillez saisir en 4ieme parametre du script, le nom du fichier contenant le résultat")
	print ("Veuillez saisir en 5ieme parametre du script, l'environnement d'execution")
	print ("Veuillez saisir en 6ieme parametre du script, le nom du dossier du driver web chrome")     
else:
	sys.argv[1]
	fileNameResult=sys.argv[4]
	loginEnter=sys.argv[2]
	passwordEnter=sys.argv[3]
	print(fileNameResult)   
	if sys.argv[1] == 'sfr' :
		print ("Operateur SFR")
		for x in range(NB_REPETITIONS):
			driver=initialize_Driver()            
			driver.get("https://hotspot.wifi.sfr.fr/")
			print ("l'adresse courante lancé est: ",driver.current_url)             
			print ("tentative N: ",x)

			try:
				element = WebDriverWait(driver, TIME_WAIT_ELEMENT_CHANGE_WEBPAGE).until(EC.presence_of_element_located((By.ID, "login")))
				element = WebDriverWait(driver, TIME_WAIT_ELEMENT_CHANGE_WEBPAGE).until(EC.presence_of_element_located((By.ID, "password")))
				elementLogin = driver.find_element_by_xpath("//input[@id='login']")
				print ("login /"+ loginEnter+"/"+passwordEnter+"/" )
				print ("length: ",len(loginEnter),"/",len(passwordEnter) )
				elementLogin.clear()
				send_keys(elementLogin,loginEnter) 
				time.sleep(2)
				elementPassword = driver.find_element_by_xpath("//input[@id='password']")
				elementPassword.clear()
				send_keys(elementPassword,passwordEnter) 
				time.sleep(2)
				time.sleep(2)
				#elementCGU
				driver.find_element_by_xpath("//input[@id='conditions']").click()
				time.sleep(5)
				driver.find_element_by_xpath("//input[@name='connexion']").click()

				# Case Failed Authentification
				element=WebDriverWait(driver,10).until(
				EC.presence_of_element_located((By.ID, "fermerBox"))
				
				)

				driver.find_element_by_xpath("//div[@class='sprite-fermer']").click()
				#time.sleep(2)
				
				
				print("FIN DU PROCESSUS NORMAL")
			except Exception:
				print ("OH an exception")
				try:
					print ("Verification du Timer si presence")
					element=WebDriverWait(driver,15).until(
					EC.presence_of_element_located((By.ID, "theTimer")))
					element=WebDriverWait(driver,10).until(EC.text_to_be_present_in_element((By.ID, "theTimer"), "5 secondes"))
					element=WebDriverWait(driver,10).until(EC.text_to_be_present_in_element((By.ID, "theTimer"), "3 secondes"))

				except NoSuchElementException:
					print ("element Timer non trouve")
				except TimeoutException:
					print("TimeOut dépassé pour trouver l'élément theTimer")    
				else:
					#time.sleep(5)
					print (driver.current_url)

					driver.quit()
					print("Connexion reussi --- FERMETURE DU BROWSER")
					#driver.close()
					break	
						
			else:
				print ("no exception")
			finally:
                
				driver.quit()
				print("FERMETURE DU BROWSER")
				print("finished process operateur: ",x)            
				 

Je précise pour les personnes, le site web utilisé: https://hotspot.wifi.sfr.fr/


Merci d'avance.

Hors ligne

#2 Le 17/07/2020, à 17:51

lebossejames

Re : python selenium saisi de login authentification failed

Bonjour,

Personne n'a d'idée?

Merci.

Hors ligne