Partage
  • Partager sur Facebook
  • Partager sur Twitter

PYTHON PYAUTOGUI : .write

PYAUTOGUI : .write

Sujet résolu
    26 avril 2022 à 10:40:16

    Bonjour, 

    Après une partie de la nuit de recherche, je viens poser ma question. En exécutant mon prog pyautogui ne retranscrit pas fidèlement les caractères demandés.   le ":" est remplacé par " / " et bien d' autre . Une solution serait bienvenue .  Merci beaucoup.

    voici le condensé:

    import pyautogui
    
    
    pyautogui.write("C:Program Files(x86)\configuration",interval=0.05)

    voici la sortie:

    C:\Users\antoine>C/Program Files 5x86°\configuration

    Merci beaucoup par avance.



    -
    Edité par azzeger 26 avril 2022 à 11:06:31

    • Partager sur Facebook
    • Partager sur Twitter
      26 avril 2022 à 11:58:17

      ça sent le problème de configuration de clavier à utiliser. Selon les issues du github de pyautogui, il y a une fonction qui permet d'indiquer quel layout de clavier utilisé=> setKeyboardLayout('azerty') (la fonction ne semble pas implémentée, il reste la solution qui se trouve à la fin de l'issue, faire une "traduction" https://github.com/asweigart/pyautogui/pull/55 )

      -
      Edité par umfred 26 avril 2022 à 11:58:26

      • Partager sur Facebook
      • Partager sur Twitter
        26 avril 2022 à 15:37:08

        umfred a écrit:

        ça sent le problème de configuration de clavier à utiliser. Selon les issues du github de pyautogui, il y a une fonction qui permet d'indiquer quel layout de clavier utilisé=> setKeyboardLayout('azerty') (la fonction ne semble pas implémentée, il reste la solution qui se trouve à la fin de l'issue, faire une "traduction" https://github.com/asweigart/pyautogui/pull/55 )

        -

        Je comprend le principe mais ne vois pas comment li intégrer.



        • Partager sur Facebook
        • Partager sur Twitter
          26 avril 2022 à 16:30:02

          simplement comme ça (l'inconvénient ici c'est que le texte est renvoyé ici en minuscule)
          import pyautogui
          letters = "poiuytrezaqwsxdcfvgbhnjklm"
          translated = "poiuytrewqazsxdcfvgbhnjkl,"
          
          tr = dict(zip(letters, translated))
          
          def translate(key):
              return "".join(map(lambda x: tr.get(x.lower(), x),key))
           
          pyautogui.write(translate("C:Program Files(x86)\configuration"),interval=0.05)

          Mais en fait, je crois que ce n'est pas vraiment ça le problème :-° c'est que '(' se trouve sur la touche '5' en haut du clavier (comme ')' sur la touche '°') et il y a ce même bug pour d'autres caractères.

          Le moyen de contournement qui semble bien fonctionner consiste à copier le texte dans le presse-papier et de faire un coller de ce texte:

          https://github.com/asweigart/pyautogui/issues/249

          import pyautogui
          import pyperclip
          
          def _workaround_write(text):
              """
              This is a work-around for the bug in pyautogui.write() with non-QWERTY keyboards
              It copies the text to clipboard and pastes it, instead of typing it.
              """
              pyperclip.copy(text)
              pyautogui.hotkey('ctrl', 'v')
              pyperclip.copy('')
          
          # Test
          text_with_special_chars = '@/:;\\.ABCabc?!~^[]{}()'
          pyautogui.write(text_with_special_chars) 
          # >>> //;\.ABCabc?§¨[]5°      -> NOK
          
          _workaround_write(text_with_special_chars) 
          # >>> @/:;\.ABCabc?!~^[]{}()       -> OK 



          • Partager sur Facebook
          • Partager sur Twitter
            27 avril 2022 à 10:21:58


            Impec, le moyen de contournement fonctionne Nickel .

            Merci

            -
            Edité par azzeger 27 avril 2022 à 19:48:01

            • Partager sur Facebook
            • Partager sur Twitter
              19 septembre 2022 à 21:53:51 - Message modéré pour le motif suivant : Merci d'utiliser le bouton code du forum pour insérer votre code


                20 septembre 2022 à 10:53:08

                Bonjour, étant deputant, je ne comprends pas bien comment et qu'est ce que je dois faire pour faire fonctionner mon code. 
                import pyautogui
                import time
                
                time.sleep(10)
                
                pyautogui.click()
                for i in range(5):
                    pyautogui.write('@_x')
                    pyautogui.press('ENTER')
                    time.sleep(0.5)
                
                
                

                Pouvez vous m'aider svp

                • Partager sur Facebook
                • Partager sur Twitter
                  20 septembre 2022 à 11:07:20

                  tu devrais créer ton propre sujet et expliqué le but de ton code surtout (il attend 10s, fait un clic (on peut supposer que pendant ces 10s, on positionne la souris sur un objet cliquable) puis il écrit 5 fois @_x puis touche entrée à 500ms d'intervalle, c'est très flou pour nous).
                  • Partager sur Facebook
                  • Partager sur Twitter
                    20 septembre 2022 à 12:01:13

                    En faite, c'est un robot qui envoie un message un certain nombre de fois la où la souris se trouve. Cependant, les caractères, @ et _ n'apparaissent pas. Avec n'importe quel autre lettre ça fonctionne parfaitement. Du coup je voulais savoir comment faire apparaître les @ et _ dans le message avec la technique mise précédemment. Comme le mec précédemment. Merci ;)
                    • Partager sur Facebook
                    • Partager sur Twitter
                      20 septembre 2022 à 13:25:13

                      bah du coup de la même façon ....
                      • Partager sur Facebook
                      • Partager sur Twitter
                        20 septembre 2022 à 22:04:52

                        Bein, comme je l'ai dis je débute vraiment depuis même pas 1j c'est mon tout premier bot ( que j'ai vu sur internet) et bah je comprends pas grand chose au code que t'as mis plus haut, j'ai essayé de le recopier ou quoi mais ça me fait rien du coup je demande.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          21 septembre 2022 à 12:23:27

                          le code que j'ai mis, va copier les caractères spéciaux dans le presse-papiers, puis coller le contenu du presse-papiers via pyautogui (code de la méthode   _workaround_write(text) )

                          donc dans ton cas:

                          import pyautogui
                          import pyperclip
                          import time
                          
                          def _workaround_write(text):
                              """
                              This is a work-around for the bug in pyautogui.write() with non-QWERTY keyboards
                              It copies the text to clipboard and pastes it, instead of typing it.
                              """
                              pyperclip.copy(text)
                              pyautogui.hotkey('ctrl', 'v')
                              pyperclip.copy('')
                           
                          time.sleep(10)
                          
                          pyautogui.click()
                          text="@_x"
                          for i in range(5):
                              _workaround_write(text)
                              pyautogui.press('ENTER')
                              time.sleep(0.5)

                          bien sûr il faut installer le module pyperclip https://github.com/asweigart/pyperclip 



                          • Partager sur Facebook
                          • Partager sur Twitter
                            21 septembre 2022 à 16:10:36

                            Ah oui c'était le =texte que j'avais pas merci beaucoup !!
                            • Partager sur Facebook
                            • Partager sur Twitter
                              21 septembre 2022 à 16:22:36

                              après tu peux mettre directement "@_x" (ou autre chose) dans l'appel de _workaround_write()
                              • Partager sur Facebook
                              • Partager sur Twitter
                                21 septembre 2022 à 17:03:01

                                Ah oui je vois, une grand merci a ton ;)
                                • Partager sur Facebook
                                • Partager sur Twitter

                                PYTHON PYAUTOGUI : .write

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