Partage
  • Partager sur Facebook
  • Partager sur Twitter

Extraction base de donnée sous format excel

Python Base de donnée

Sujet résolu
    29 novembre 2021 à 20:31:20

    Bonsoir a tous,

    Dans le cadre de mon stage je dois automatiser une extraction de donnée d'un site qui requiert un user et mdp en python.

    J'ai essayer quelque manipulation mais je n'y arrive pas.

    Auriez vous des pistes pour moi ainsi que des tutos.

    J'aimerais bien vous mettre le lien du site et les différentes indications mais c'est l'intranet de ma boite et il faut être sur le LAN ou avoir un VPN pour y accéder.

    Cordialement

    • Partager sur Facebook
    • Partager sur Twitter
      29 novembre 2021 à 20:37:21

      Bonsoir,


      Je ne suis pas très fort là dedans et il me semble que c'est très variable d'une construction de site à l'autre...
      J'utilise par exemple mechanize pour un vieux site mais je n'ai pas réussi à l'adapter pour Facebook à l'époque.


      • Partager sur Facebook
      • Partager sur Twitter

      https://www.youtube.com/watch?v=Dv6Th7kJ64Q

        30 novembre 2021 à 10:54:30

        En général je me connecte sur le site en regardant l'onglet réseau de mon navigateur, puis je me débrouille avec requests.Session
        • Partager sur Facebook
        • Partager sur Twitter
          30 novembre 2021 à 11:36:28

          Bonjour.

          Avec requests, cela devrait être possible (exemples suivant le protocole).

          • Partager sur Facebook
          • Partager sur Twitter

          PB68

            1 décembre 2021 à 9:23:19

            Bonjour a tous et merci pour vos réponses.

            Jai commencé a écrire un script python avec la Library sélénium pour automatiser le processus mais je rencontre certaines difficulté.

            J'arrive a ouvrir le navigateur avec mon code mais je n'arrive pas a insérer mon url de recherche et a simuler le click de la touche entrer.

            Ci-joint le code.

            PS: Le site est privée donc il est impossible d'y accéder sans le vpn de la boite 

            from selenium import webdriver
            from webdriver_manager.chrome import ChromeDriverManager
            from selenium.webdriver.common.keys import Keys
            from selenium.webdriver.support.ui import WebDriverWait
            from selenium.webdriver.support import expected_conditions as EC
            
            #Site sur lequel je veux me retrouver
            url = "https://kador3.dalkia.net/installation.php"
            #Je lance chrome.
            driver = webdriver.Chrome(executable_path='C:\Program Files\Google\Chrome\Application\Chrome.exe')
            
            #Jai reccuperer le xpath de la barre de recherche Chrome
            element = driver.find_element_by_id("input")
            #J'insere mon URL dans la barre de recherche
            element.send_keys(url)
            
            #Je simule la touche le click entrer
            elem.send_keys(Keys.ENTER)
            



            • Partager sur Facebook
            • Partager sur Twitter
              1 décembre 2021 à 14:37:52

              il faut charger la page avant tout

              driver.get(url)

              sinon comment y rechercher des éléments ? 

              pour la suite:
              https://selenium-python.readthedocs.io/navigating.html 

              • Partager sur Facebook
              • Partager sur Twitter
                2 décembre 2021 à 8:21:59

                umfred a écrit:

                il faut charger la page avant tout

                driver.get(url)

                sinon comment y rechercher des éléments ? 

                pour la suite:
                https://selenium-python.readthedocs.io/navigating.html 

                Bonjour umfred,
                Merci pour ton intervention, j'ai rajouter driver.get(url) mais je n'arrive toujours pas a lancer la recherche de mon url. 
                Jai fait des recherches au sein de notre DSI et ils m'ont clairement dit que leurs sécurités empêche ce genre de script d'agir sur leur réseau.
                Cependant ya un mec dans un autre service qui arrive a aller sur chrome lancer une recherche et télécharger le fichier quil veut avec du VBA combiner a du shell...
                Peut être que je dois me tourner vers cette option?

                -
                Edité par nicloi 2 décembre 2021 à 8:29:42

                • Partager sur Facebook
                • Partager sur Twitter
                  2 décembre 2021 à 8:58:08

                  C'est quel site ?

                  Parce que s'il y a des sécurités, c'est que les bots sont certainement interdits par leurs CGU. Et ce que tu cherches à faire est donc illégal.

                  -
                  Edité par thelinekioubeur 2 décembre 2021 à 8:59:20

                  • Partager sur Facebook
                  • Partager sur Twitter
                    2 décembre 2021 à 9:58:44

                    C

                    thelinekioubeur a écrit:

                    C'est quel site ?

                    Parce que s'il y a des sécurités, c'est que les bots sont certainement interdits par leurs CGU. Et ce que tu cherches à faire est donc illégal.

                    -
                    Edité par thelinekioubeur il y a environ 1 heure

                    Re thelinekioubeur c'est le site de la boite ou je bosse.

                    Il nous sert a faire des exports de données.

                    Avant, cela était possible mais récemment ils ont eut une cyberattaque.

                    Jai fais le script vba et a ma grande surprise ca fonctionne. Mais je n'arrive pas a cliquer sur le bouton export du site.
                    Si joint mon algo VBA ainsi que des screen shot du site.

                    Sub TestAuto()
                    
                    Application.StatusBar = "Ouverture chrome"
                      Dim chromePath As String
                      Dim URL As String
                    
                      
                      Set Wsh = CreateObject("wscript.shell")
                      'Je declare ma variable url contenant le site que je veux
                      URL = "https://kador3.dalkia.net/see.php"
                      
                      'Je declare une variable qui contient le chemin absolu de mon executable chrome
                      chromePath = """C:\Program Files\Google\Chrome\Application\Chrome.exe"""
                      
                      'Je lance un script shell qui excute Chrome et lance la recherche du site
                      Shell (chromePath & " -url " & URL)
                      
                      Application.Wait (Now + TimeValue("0:00:08"))
                    Application.StatusBar = "Fermeture chrome"
                      
                      Wsh.getElementsByClassName("w2ui-btn w2ui-btn-green w2ui-input").Click
                      
                      
                    
                    End Sub



                    Jai fait un .getElementsByClassName() et bizarrement jai un message d'erreur VBA :

                    • Partager sur Facebook
                    • Partager sur Twitter
                      2 décembre 2021 à 10:46:09

                      Si c'est le site de ta boîte pourquoi utiliser selenium ? Tu pourrais juste modifier le site pour y ajouter une api...

                      • Partager sur Facebook
                      • Partager sur Twitter
                        2 décembre 2021 à 11:22:57

                        thelinekioubeur a écrit:

                        Si c'est le site de ta boîte pourquoi utiliser selenium ? Tu pourrais juste modifier le site pour y ajouter une api...


                        Désolé je voulais dire la boite ou je bosse
                        Je ne peux pas ajouter une API...
                        Si je pouvais je l'aurais fais ou utiliser des outils comme Talend vu que mon objectif est de faire un mini DataLake pour croisé certaines données.
                        Je dois donc trouver un moyen d'automatiser l'extraction sur les différents site pour pouvoir les déplacer vers un SGBD que j'ai préparer.
                        La boite ou je bosse est très a cheval niveau sécu.
                        Pour l'instant jai modifier mon algo et sa fonctionne pour l'un des sites sauf qu'il faut maintenant l'adapter pour les autres et j'en deviens fou.

                        Application.StatusBar = "Ouverture chrome"
                        Dim URL$, ChromePath$, Wsh
                        
                          
                          Set Wsh = CreateObject("wscript.shell")
                          'Je declare ma variable url contenant le site que je veux
                          Kador = "https://kador3.xxxx.net/see.php"
                          
                          
                          'Je declare une variable qui contient le chemin absolu de mon executable chrome
                          ChromePath = """C:\Program Files\Google\Chrome\Application\Chrome.exe"""
                          
                          'Je lance un script shell qui excute Chrome et lance la recherche du site KADOR3
                          Shell (ChromePath & " -url " & Kador)
                          'J'attend 5 seconde
                          Application.Wait (Now + TimeValue("0:00:05"))
                        Application.StatusBar = "Fermeture chrome"
                        'Je me positionne sur le bouton export
                            Wsh.SendKeys ("{TAB}")
                                Wsh.SendKeys ("{TAB}")
                                    Wsh.SendKeys ("{TAB}")
                                        Wsh.SendKeys ("{TAB}")
                                            Wsh.SendKeys ("{TAB}")
                                                Wsh.SendKeys ("{TAB}")
                                                    Wsh.SendKeys ("{TAB}")
                                                        Wsh.SendKeys ("{TAB}")
                                                            Wsh.SendKeys ("{TAB}")
                                                                Wsh.SendKeys ("{TAB}")
                                                                    Wsh.SendKeys ("{TAB}")
                                                                        Wsh.SendKeys ("{TAB}")
                                                                            Wsh.SendKeys ("{TAB}")
                                                                        Wsh.SendKeys ("{TAB}")
                                                                    Wsh.SendKeys ("{TAB}")
                                                                Wsh.SendKeys ("{TAB}")
                                                            Wsh.SendKeys ("{TAB}")
                                                        Wsh.SendKeys ("{TAB}")
                                                    Wsh.SendKeys ("{TAB}")
                                                Wsh.SendKeys ("{TAB}")
                                            Wsh.SendKeys ("{TAB}")
                                        Wsh.SendKeys ("{TAB}")
                                    Wsh.SendKeys ("{TAB}")
                                    
                        'Je clique sur le bouton export
                            Wsh.SendKeys ("{ENTER}")
                        'Jattend 5 seconde
                            Application.Wait (Now + TimeValue("0:00:05"))
                        'Je clique sur telecharger
                            Wsh.SendKeys ("{ENTER}")
                        

                        -
                        Edité par nicloi 2 décembre 2021 à 11:43:52

                        • Partager sur Facebook
                        • Partager sur Twitter
                          2 décembre 2021 à 13:30:19

                          les captures d'écrans précédentes ne sont pas visibles chez moi.

                          tu devrais utiliser le composant webbrowser (à mettre dans unserform) qui te permettrait d'accéder au DOM et donc de choisir directement le bouton avec getElementsbyclassname ou autre (l'inconvénient c'est que ça utilise internet explorer)

                          tu peux aussi utiliser Selenium via VBA https://www.makeuseof.com/tag/how-to-automate-firefox-or-chrome-with-vba-and-selenium/ 

                          • Partager sur Facebook
                          • Partager sur Twitter
                            2 décembre 2021 à 17:22:21

                            umfred a écrit:

                            les captures d'écrans précédentes ne sont pas visibles chez moi.

                            tu devrais utiliser le composant webbrowser (à mettre dans unserform) qui te permettrait d'accéder au DOM et donc de choisir directement le bouton avec getElementsbyclassname ou autre (l'inconvénient c'est que ça utilise internet explorer)

                            tu peux aussi utiliser Selenium via VBA https://www.makeuseof.com/tag/how-to-automate-firefox-or-chrome-with-vba-and-selenium/ 

                            Désolé umfred je viens de constater ce problème d'image.
                            Merci pour tes conseils, je vais essayer de contacter la DSI pour quil puisse me donner les accès pour installer le complément Sélénium sur vba.
                            Pour l'instant la méthode avec du Shell fonctionne sur l'un des site.
                            J'avais vu la méthode avec Dim IE as New Internet Explorer mais la version d'internet explorer sur ma machine est tellement vieille que je ne peux même pas accès a l'un des sites ou je fais mes exports.
                            Mais il est préférable que je règle ce problème de limitation d'accès avec la DSI.


                            • Partager sur Facebook
                            • Partager sur Twitter
                              2 décembre 2021 à 18:06:01

                              autre chose, si c'est en intranet, et que les données sont stockés sur des serveurs "internes", tu peux peut-être directement les récupérer de ces serveurs par requête sql
                              • Partager sur Facebook
                              • Partager sur Twitter
                                3 décembre 2021 à 10:41:16

                                umfred a écrit:

                                autre chose, si c'est en intranet, et que les données sont stockés sur des serveurs "internes", tu peux peut-être directement les récupérer de ces serveurs par requête sql

                                Bonjour Umfred,
                                S'était ma première solution mais il m'est impossible d'envoyer des requêtes SQL dans le serveurs. Nos données sont administrer par CGI et AWS.
                                Il nous m'est donc impossible d'envoyer des requêtes dans leurs serveurs.
                                Pour accéder a leurs serveurs je dois forcement passée par l'intranet de la boite.

                                • Partager sur Facebook
                                • Partager sur Twitter

                                Extraction base de donnée sous format excel

                                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                • Editeur
                                • Markdown