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?




Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
 
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_argument("--headless")
 
		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.send_keys(loginEnter)
				elementLogin.clear()
				send_keys(elementLogin,loginEnter) 
				time.sleep(2)
				elementPassword = driver.find_element_by_xpath("//input[@id='password']")
				#elementPassword.send_keys(passwordEnter)
				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:
 
					 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.