#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