Partage
  • Partager sur Facebook
  • Partager sur Twitter

Un script qui ne fonctionne pas à 100%

    13 janvier 2023 à 23:17:09

    Bonjour,

    Je débute en Python et j'ai codé un script qui automatise certaines actions quand je suis sur un site.

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    import time
    
    driver = webdriver.Firefox()
    
    url_login = 'https://www.ppbo.ws'
    driver.get(url_login)
    
    time.sleep(4)
    
    username = input("Entrez votre pseudo: ")
    password = input("Entrez votre mot de passe: ")
    
    username_field = driver.find_element(By.ID, "req_username")
    password_field = driver.find_element(By.ID, "req_password")
    
    username_field.send_keys(username)
    password_field.send_keys(password)
    
    login_button = driver.find_element(By.ID, "connexion")
    login_button.click()
    
    url = 'https://www.ppbo.ws/foret.php?c=1'
    driver.get(url)
    time.sleep(2)
    
    refresh_count = 0
    shiney_count = 0
    
    while True:
        page_source = driver.page_source
    
        if "Shiney" not in driver.find_element(By.ID, "bg_brun").text:
            time.sleep(2)
            driver.get(url)
            refresh_count += 1
        else:
            shiney_count += 1
            capture_link = driver.find_element(By.XPATH("//*[text()='Capturer']"))
            capture_link.click()
            time.sleep(2)
    
            master_ball_link = driver.find_element(
                By.XPATH("//*[text()='Utiliser Master Ball'"))
            master_ball_link.click()
            time.sleep(2)
            driver.get(url)
            break
    js_script = "console.log('Refresh compteur: ' + refresh_count); console.log('Shiney compteur: ' + shiney_count);"
    driver.execute_script(js_script)
    

    Je m'explique en gros:

    1) Le script se connecte sur un site défini.

    2) Une fois que la connexion est établie avec le site, il se rend sur une page définie également.

    3) Il sélectionne le texte dans la div qui a pour ID "bg_brun" et je recherche dedans ( dans la div citée précédemment ) le mot " Shiney ".

     4.1) Si il trouve ne trouve pas le mot "Shiney" alors il rafraichit la page pour trouver un autre Pokémon.

    4.2) Si il trouve le mot " Shiney " Il cliquer sur capturer ce qui ouvre une petite div(sans ID) qui propose de choisir la ball a utiliser, je lui demande de choisir une Master Ball. SAUF QUE, il ne clique ni sur capturer ou quoi que ce soit il rafraichi la page comme si il ne trouvait pas " Shiney ".

    Je vous demande conseil.. Où est-ce que j'ai mal fait ? Auriez vous une solution ?

    Merci d'avance.

    • Partager sur Facebook
    • Partager sur Twitter
      14 janvier 2023 à 0:08:01

      J'y connais rien mais , à quoi sert la ligne 32 ?
      • Partager sur Facebook
      • Partager sur Twitter

      Python c'est bon, mangez-en. 

        14 janvier 2023 à 0:25:45

        ça me donne le code source de la page

        -
        Edité par BankinTaihou 14 janvier 2023 à 0:26:21

        • Partager sur Facebook
        • Partager sur Twitter
          15 janvier 2023 à 14:12:29

          from selenium import webdriver
          from selenium.webdriver.common.by import By
          import time
          
          driver = webdriver.Firefox()
          
          url_login = 'https://www.ppbo.ws'
          driver.get(url_login)
          
          time.sleep(4)
          
          username = input("Entrez votre pseudo: ")
          password = input("Entrez votre mot de passe: ")
          lieu = input("Où voulez-vous shasser ?: ")
          
          username_field = driver.find_element(By.ID, "req_username")
          password_field = driver.find_element(By.ID, "req_password")
          
          username_field.send_keys(username)
          password_field.send_keys(password)
          
          login_button = driver.find_element(By.ID, "connexion")
          login_button.click()
          
          url = 'https://www.ppbo.ws/'+lieu+'.php?c=1'
          driver.get(url)
          time.sleep(2)
          
          refresh_count = 0
          shiney_count = 0
          
          while True:
              page_source = driver.page_source
          
              if "Shiney" not in driver.find_element(By.ID, "bg_brun").text:
                  print("Nombre de refresh: ", refresh_count)
                  print("Nombre de Shiney: ", shiney_count)
                  refresh_count += 1
                  time.sleep(2)
                  driver.get(url)
              else:
                  print("Nombre de refresh: ", refresh_count)
                  print("Nombre de Shiney: ", shiney_count)
                  shiney_count += 1
                  capture_link = driver.find_element(By.XPATH("//*[text()='Capturer']"))
                  capture_link.click()
                  time.sleep(4)
          
                  master_ball_link = driver.find_element(
                      By.XPATH("//*[text()='Utiliser Master Ball'"))
                  master_ball_link.click()
                  time.sleep(4)
                  # driver.get(url)
                  break
          js_script = "console.log('Refresh compteur: ' + refresh_count); console.log('Shiney compteur: ' + shiney_count);"
          driver.execute_script(js_script)
          

          J'ai toujours le souci, j'ai besoin d'une âme charitable qui saurait m'aider.

          Merci 

          • Partager sur Facebook
          • Partager sur Twitter
            15 janvier 2023 à 14:28:18

            BankinTaihou a écrit:

            Je vous demande conseil.. Où est-ce que j'ai mal fait ? Auriez vous une solution ?



            Si c'est un bug on ne va pas le corriger, et s'il ne trouve pas "Shiney" là où on lui demande de chercher, c'est qu'on ne le cherche pas au bon endroit... (ou qu'il n'est pas présent).

            Lire du HTML est quelque chose qu'on doit savoir pour faire du scrapping,  c'est souvent fastidieux mais sans rapport avec la programmation python

            -
            Edité par mps 15 janvier 2023 à 15:08:29

            • Partager sur Facebook
            • Partager sur Twitter
              15 janvier 2023 à 16:40:33

              mps a écrit:

              BankinTaihou a écrit:

              Je vous demande conseil.. Où est-ce que j'ai mal fait ? Auriez vous une solution ?



              Si c'est un bug on ne va pas le corriger, et s'il ne trouve pas "Shiney" là où on lui demande de chercher, c'est qu'on ne le cherche pas au bon endroit... (ou qu'il n'est pas présent).

              Lire du HTML est quelque chose qu'on doit savoir pour faire du scrapping,  c'est souvent fastidieux mais sans rapport avec la programmation python

              -
              Edité par mps il y a environ 1 heure

              Je n'ai jamais demandé à ce qu'on me le corrige.

              Je demande juste si je suis sur la bonne voie et petite précision: Quand le mot " Shiney " apparaît, il ne le détecte pas.

              J'aimerai juste être aiguillé sur la méthode à utiliser pour qu'il détecte.

              • Partager sur Facebook
              • Partager sur Twitter
                15 janvier 2023 à 16:52:09

                BankinTaihou a écrit:

                J'aimerai juste être aiguillé sur la méthode à utiliser pour qu'il détecte.

                Etudier le HTML de la page (pour savoir où chercher dans la page) est un préalable au comment (la méthode à utiliser).

                • Partager sur Facebook
                • Partager sur Twitter
                  15 janvier 2023 à 16:55:58

                  mps a écrit:

                  BankinTaihou a écrit:

                  J'aimerai juste être aiguillé sur la méthode à utiliser pour qu'il détecte.

                  Etudier le HTML de la page (pour savoir où chercher dans la page) est un préalable au comment (la méthode à utiliser).


                  J'ai déjà étudié ce point, je l'ai même cité plus haut dans mon premier post:

                  3) Il sélectionne le texte dans la div qui a pour ID "bg_brun" et je recherche dedans ( dans la div citée précédemment ) le mot " Shiney ".

                  -
                  Edité par BankinTaihou 15 janvier 2023 à 16:57:25

                  • Partager sur Facebook
                  • Partager sur Twitter
                    15 janvier 2023 à 17:28:49

                    BankinTaihou a écrit:

                    J'ai déjà étudié ce point, je l'ai même cité plus haut dans mon premier post:

                    3) Il sélectionne le texte dans la div qui a pour ID "bg_brun" et je recherche dedans ( dans la div citée précédemment ) le mot " Shiney ".

                    Si vous avez étudié cela... pour quelles raisons ça ne marche pas? On retombe avec l'hypothèque que ce mot n'est pas dans le texte sélectionné.... et à vérifier qu'il n'est pas ailleurs (en regardant le contenu du HTML).
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      15 janvier 2023 à 17:54:06

                      Regardez le code source récupéré par le code non celui d'un navigateur tiers.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        23 janvier 2023 à 12:59:14

                        tu devrais peut-être aussi inverser les lignes 39 et 40 pour attendre après avoir accéder à l'url (refresh).
                        tu devrais aussi vérifier que ta recherche xpath te retourne le bon élément en tapant la recherche dans la console JS de ton navigateur (clic droit > inspecter sur la page)
                        • Partager sur Facebook
                        • Partager sur Twitter

                        Un script qui ne fonctionne pas à 100%

                        × 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