Partage
  • Partager sur Facebook
  • Partager sur Twitter

Suprimer le code CSS avec selenuim

Sujet résolu
    21 février 2023 à 17:53:26

    Bonsoir,

    Je cherche a créer un code qui se connecte a mon espace ent avec python.

    Cependant, je me rend compte que sur la page de connexions, des feuilles de style CSS sont utilisé et empêche ainsi selenuim de trouver les bons boutons.

    Voici mon code  l'heure actuelle :

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.common.keys import Keys
    from colorama import Fore
    import time
    
    print(f'{Fore.GREEN}Ouverture du navigateur{Fore.RESET}')
    
    browser = webdriver.Firefox()
    url = 'https://cas.mon-ent-occitanie.fr/login?service=https%3A%2F%2Fvictor-hugo-sete.mon-ent-occitanie.fr%2Fsg.do%3FPROC%3DIDENTIFICATION_FRONT'
    
    print(f'{Fore.GREEN}Ouverture de la page{Fore.RESET}')
    
    browser.get(url)
    
    print(f'{Fore.GREEN}Latence{Fore.RESET}')
    
    time.sleep(5)
    
    print(f'{Fore.GREEN}Départ de la conexion{Fore.RESET}')
    
    
    elem = browser.find_element(By.CSS_SELECTOR, '[type="button"]')
    elem.click()
    
    conteneur = browser.find_element(By.CSS_SELECTOR, '.list--padding-left-sm')
    
    elem = conteneur.find_element(By.CLASS_NAME, 'form__label')
    elem.click()
    
    elem = browser.find_element(By.ID, 'button-submit')
    elem.click()
    
    print(browser)
    

     
    (Vous pouvez allez voir le site en allant sur le site de l'ent et en choisissant Élèves ou parent de l’académie de Montpellier).

    Je me suis rendu compte que si on supprime les feuille de CSS tous redevient visible, je voulais donc savoir si s'était possible de faire croire au bot que le style n’existe pas.

    Cordialement

    Bonne soirée.

    • Partager sur Facebook
    • Partager sur Twitter
      21 février 2023 à 19:09:23

      qu'est-ce que tu veux sélectionner ? le radio Montpellier? 

      il suffit de trouver l'élément d'id "idp-MONT-EDU_parent_eleve" et de cliquer dessus

      • Partager sur Facebook
      • Partager sur Twitter
        21 février 2023 à 19:40:54

        non je l'ai déjà fait.

        C'est sur la page d’après que je veut cliquer sur le bouton élèves et remplir le formulaire de connexion.

        • Partager sur Facebook
        • Partager sur Twitter
          22 février 2023 à 10:51:27

          et ? le bouton Elève a un id "bouton_eleve" et les entrées du formulaire ont les id "username" et "password" et son bouton "se connecter" a l'id "bouton_valider"
          • Partager sur Facebook
          • Partager sur Twitter
            22 février 2023 à 11:35:02

            Quand je fais
            elem = browser.find_element(By.ID, 'bouton_eleve')
            elem.click()

            J'ai cette erreur :

            titouan@titouan-ProBook:/media/titouan/Docs_Titouan/python/scraping ent$ /bin/python3 "/media/titouan/Docs_Titouan/python/scraping ent/touche.py"
            Ouverture du navigateur
            Ouverture de la page
            Latence
            Départ de la conexion
            Traceback (most recent call last):
              File "/media/titouan/Docs_Titouan/python/scraping ent/touche.py", line 37, in <module>
                elem = browser.find_element(By.ID, 'bouton_eleve')
              File "/home/titouan/.local/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 861, in find_element
                return self.execute(Command.FIND_ELEMENT, {"using": by, "value": value})["value"]
              File "/home/titouan/.local/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 444, in execute
                self.error_handler.check_response(response)
              File "/home/titouan/.local/lib/python3.10/site-packages/selenium/webdriver/remote/errorhandler.py", line 249, in check_response
                raise exception_class(message, screen, stacktrace)
            selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: [id="bouton_eleve"]
            Stacktrace:
            RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
            WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:180:5
            NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:392:5
            element.find/</<@chrome://remote/content/marionette/element.sys.mjs:133:16
            
            titouan@titouan-ProBook:/media/titouan/Docs_Titouan/python/scraping ent$ 






            -
            Edité par Le pythoneur 22 février 2023 à 13:54:33

            • Partager sur Facebook
            • Partager sur Twitter
              22 février 2023 à 14:49:34

              Est-ce qu'à ce moment là de l'exécution, ta fenêtre de navigation affiche la bonne page ? 

              pour moi, tu lances trop vite la requête (en rajoutant un time.sleep(2), ça fonctionne)

              Pour info, selenium incorpore des processus d'attente qui permettent de se passer du time.sleep, comme driver.implicitly_wait(X) en début pour attendre au max x secondes avant d'avoir une erreur 

              https://selenium-python.readthedocs.io/waits.html#implicit-waits 

              • Partager sur Facebook
              • Partager sur Twitter
                22 février 2023 à 22:44:45

                Merci beaucoup cela fonctionne.

                Je me trouve cependant confronté a un autre problème : Savais vous comment chercher si mot est dans une pages web ?

                Merci d'avance et bonne soiré

                • Partager sur Facebook
                • Partager sur Twitter
                  20 juillet 2023 à 11:34:15

                  Boujour a tous !
                  J'ai enfin réussi ! merci a tous.
                  je vous met le code ici :

                  from selenium import webdriver
                  from selenium.webdriver.common.by import By
                  from selenium.webdriver.common.keys import Keys
                  from colorama import Fore
                  import send_notif
                  from send_notif import send_newnotif as notif
                  import datetime, time
                  
                  now = datetime.datetime.now()
                  heur = now.hour
                  minute = now.minute
                  
                  if True :
                      def verifent() :
                          def printgreen(message) :
                              print(Fore.GREEN + message + Fore.RESET)
                  
                          notif('Début de la vérification', f'La vérification de l\'emplois du temps a débuté.\nIl est {now.hour}:{now.minute}')
                  
                  
                          printgreen('Ouverture du navigateur')
                  
                          browser = webdriver.Firefox()
                          url = 'https://cas.mon-ent-occitanie.fr/login?service=https%3A%2F%2Fvictor-hugo-sete.mon-ent-occitanie.fr%2Fsg.do%3FPROC%3DIDENTIFICATION_FRONT'
                  
                          printgreen(f'Ouverture de la page')
                  
                          browser.get('https://0340972X.index-education.net/pronote/')
                  
                          printgreen(f'Latence')
                  
                          time.sleep(5)
                  
                          printgreen(f'Départ de la conexion')
                  
                  
                          elem = browser.find_element(By.CSS_SELECTOR, '[type="button"]')
                          elem.click()
                  
                          conteneur = browser.find_element(By.CSS_SELECTOR, '.list--padding-left-sm')
                  
                          elem = conteneur.find_element(By.CLASS_NAME, 'form__label')
                          elem.click()
                  
                          elem = browser.find_element(By.ID, 'button-submit')
                          elem.click()
                  
                          time.sleep(2)
                  
                          elem = browser.find_element(By.ID, 'bouton_eleve')
                          elem.click()
                  
                          time.sleep(2)
                  
                          elem = browser.find_element(By.ID, 'username')
                          elem.send_keys('username')
                  
                          elem = browser.find_element(By.ID, 'password')
                          elem.send_keys('mot_de_passe')
                  
                          time.sleep(2)
                  
                          elem = browser.find_element(By.ID, 'bouton_valider')
                          elem.click()
                  
                          time.sleep(20)
                          #Le but etant de verifier si il y a une modification d'emploi du temp, je recherche avec le css l'element prof absent, changement de salle etc... si j'ai une erreur, il n'y a pas de modification, sinon j'utilise pushbullet pour envoyer une notification sur mon telephone.
                  
                          try :
                  
                              elem = browser.find_element(By.CSS_SELECTOR, '.ie-chips.tag-style')
                              
                              for token in ['token_1'] :
                                  notif('InfoTitou', 'Il y a une modification d\'emploi du temps aujourd\'hui, tu peux aller verifier laquel ici : https://cas.mon-ent-occitanie.fr/login?service=https%3A%2F%2Fvictor-hugo-sete.mon-ent-occitanie.fr%2Fsg.do%3FPROC%3DIDENTIFICATION_FRONT', token)
                              printgreen('Il y a une modification d\'emploi du temps aujourd\'hui, tu peux aller verifier laquel ici : https://cas.mon-ent-occitanie.fr/login?service=https%3A%2F%2Fvictor-hugo-sete.mon-ent-occitanie.fr%2Fsg.do%3FPROC%3DIDENTIFICATION_FRONT')
                  
                          except :
                              
                              for token in ['o.QRQxESwCLHxRBQgFFGVBCBjz0a2Kcsj1'] :
                                  notif('InfoTitou', 'Il y a aucune modification d\'emploi du temps aujourd\'hui', token)
                              printgreen('Il y a aucune modification d\'emploi du temps aujourd\'hui')
                          browser.close()
                  #Ici je cré un boucle pour lacer la verification automatiquemet...
                  
                  while True :
                      now = datetime.datetime.now()
                      if minute != now.minute :
                          print(now.hour, now.minute)
                          heur = now.hour
                          minute = now.minute
                      if now.hour == 6 and now.minute == 30 :
                          verifent()
                      if now.hour == 6 and now.minute == 45 :
                          verifent()
                      if now.hour == 7 and now.minute == 00 :
                          verifent()
                      if now.hour == 7 and now.minute == 30 :
                          verifent()
                      if now.hour == 7 and now.minute == 45 :
                          verifent()
                      if now.hour == 8 and now.minute == 00 :
                          verifent()
                      if now.hour == 8 and now.minute == 30 :
                          verifent()
                      if True :
                          
                          verifent()
                      if now.hour == 8 and now.minute == 45 :
                          verifent()
                  
                  



                  -
                  Edité par Le pythoneur 20 juillet 2023 à 11:35:32

                  • Partager sur Facebook
                  • Partager sur Twitter
                    20 juillet 2023 à 12:41:23

                    Je ne vois pas l'utilité de la ligne 13 ni les lignes 105-107 (qui lance systématiquement ta fonction à chaque tour de ta boucle while)

                    ta variable heur ne sert à rien ici.

                    Et ta boucle est faisable autrement

                    heures_verif=[(6,30),(6,45),(7,0),(7,30),(7,45),(8,0),(8,30),(8,45)]
                    while True :
                        now = datetime.datetime.now()
                        if minute != now.minute :
                            print(now.hour, now.minute)
                            minute = now.minute
                        if (now.hour,now.minute) in heures_verif:
                            verifent()
                    



                    • Partager sur Facebook
                    • Partager sur Twitter
                      2 août 2023 à 2:03:01

                      Merci !

                      La ligne 13 doit dater d'un moment ou je voulais faire avec une boucle ou une condition, et j'ai temporairement mis un if True et j'ai oublié de le suprimer.

                      • Partager sur Facebook
                      • Partager sur Twitter

                      Suprimer le code CSS avec selenuim

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                      • Editeur
                      • Markdown