Interagir avec d'autres programmes à l'aide de Python
Je vais avoir l'idée d'écrire un programme à l'aide de Python qui doit trouver des paroles d'une chanson dont le nom m'a fourni. Je pense que l'ensemble du processus doit se résument à deux choses ci-dessous. C'est ce que je veux que le programme pour le faire quand je le lance:
- m'inviter à entrer un nom d'une chanson
- copie de ce nom
- ouvrez un navigateur web (google chrome par exemple)
- le coller dans la barre d'adresse et de trouver des informations à propos de la chanson
- ouvrir une page qui contient les paroles
- copie que les paroles
- exécuter un éditeur de texte (comme Word par exemple)
- coller les paroles
- enregistrer le nouveau fichier texte avec le nom de la chanson
Je ne demande pas de code, bien sûr. Je veux juste savoir les concepts ou idées sur la façon d'utiliser python pour interagir avec d'autres programmes
Pour être plus précis, je pense que je veux savoir, fox exemple, à quel point nous où est la barre d'adresse de Google Chrome et de dire à python pour coller le nom. Ou comment nous dire à python comment copier les paroles ainsi que le coller dans le Microsoft Word feuille puis l'enregistrer.
J'ai lu (je suis encore à la lecture de plusieurs livres sur le langage Python: Octet de python, Apprendre le langage python à la dure, de Python pour les nuls, Début de Développement d'un Jeu avec Python et Pygame. Cependant, j'ai trouvé qu'il semble comme je le seul (ou presque) apprendre à créer des programmes qui fonctionnent sur elle-même (je ne peux pas dire à mon programme pour faire des choses que je veux avec d'autres programmes qui sont déjà installés sur mon ordinateur)
Je sais que ma question en quelque sorte des sons plutôt stupide, mais j'ai vraiment envie de savoir comment il fonctionne, la façon dont nous raconter Python pour regconize que cette partie du navigateur Google chrome est la barre d'adresse, et qu'il faut coller le nom de la chanson en elle. L'idée de faire de python interagir avec un autre programme est vraiment très vague pour moi et j'ai juste
extrêmement souhaitez saisir.
Merci à vous tous, qui passent leur temps à la lecture de mon soi-longue question.
ttriet204
Vous êtes l'approche du problème à partir d'un "point de vue utilisateur" lorsque vous devez l'aborder à partir d'un "programmeur point de vue"; vous n'avez pas besoin d'ouvrir un navigateur, copier le texte, ouvrez Word ou autre, vous devez effectuer la requêtes HTTP, parser le HTML concernés, d'en extraire le texte et l'écrire dans un fichier à partir de l'intérieur de votre script Python. Tous les outils pour ce faire sont disponibles en Python (en particulier, vous aurez besoin
urllib2
et BeautifulSoup
).bien sûr, mais c'est une très spécialisées doivent - ils besoin de simuler l'interaction de l'utilisateur; au lieu de cela, voici ce que l'utilisateur a besoin est d'obtenir une certaine tâche à accomplir, et il pense naïvement à reproduire ce qu'un humain le ferait, bien qu'il existe beaucoup plus simple de manières d'directement à partir du code.
Pourrait être encore plus simple en utilisant un service qui fournit une API pour .. laisserais l'analyse et l'extraction de
Est le point de cette question "j'ai besoin d'écrire un programme qui fait ça", ou "je veux utiliser cela comme une excuse pour apprendre à interagir avec d'autres applications"?
OriginalL'auteur ttriet204 | 2013-01-11
Vous devez vous connecter pour publier un commentaire.
Si ce que vous êtes vraiment à la recherche en est une bonne excuse pour vous apprendre à interagir avec d'autres applications, cela peut ne pas être le meilleur. Les navigateurs Web sont en désordre, le timing va être imprévisible, etc. Donc, vous avez pris une très durs à la tâche et qui serait très facile si vous avez de la manière habituelle (parler directement sur le serveur, créer le fichier texte directement, etc., tous, sans toucher à l'un des autres programmes).
Mais si vous ne voulez interagir avec d'autres applications, il existe une variété de différentes approches, et qui est approprié dépend des types d'applications, vous devez traiter avec.
Certaines applications sont conçues pour être automatisé à partir de l'extérieur. Sur Windows, cela a presque toujours signifie qu'ils ont une interface COM, généralement avec une interface IDispatch, pour lequel vous pouvez utiliser
pywin32
's COM wrappers; sur Mac, il désigne un ordre d'extinction de l'interface pour laquelle vous utilisezScriptingBridge
ouappscript
; sur les autres plateformes, il n'existe pas de norme universelle. IE (mais probablement pas Chrome) et Mot les deux ont de telles interfaces.Certaines applications ont une interface graphique utilisateur interface, qu'il s'agisse d'une ligne de commande, vous pouvez conduire avec
popen
, ou une DLL/SO/DYLIB vous pouvez charger jusqu'parctypes
. Ou, idéalement, quelqu'un d'autre a déjà écrit liaisons Python pour vous.Certaines applications n'ont rien, mais l'interface graphique, et pas moyen de faire de la GUI de l'automatisation. Vous pouvez le faire à un niveau bas, par la rédaction d'WM_ messages à envoyer par
pywin32
sur Windows, à l'aide de l'Api d'accessibilité sur Mac, etc., ou à un niveau légèrement plus élevé avec des bibliothèques commepywinauto
, ou peut-être au très haut niveau deselenium
ou des outils similaires construit pour automatiser des applications spécifiques.Donc, vous pourriez le faire avec quelque chose de sélénium pour Chrome et COM automation pour Mot, à l'élaboration de tous les WM_ messages vous-même. Si c'est censé être un exercice d'apprentissage, la question est de savoir laquelle de ces choses que vous voulez apprendre aujourd'hui.
Commençons avec automation COM. À l'aide de
pywin32
, vous accédez directement sur l'application des interfaces de scripts, sans avoir à prendre le contrôle de l'interface graphique de l'utilisateur, de comprendre comment naviguer à travers les menus et les boîtes de dialogue, etc. C'est la version moderne de l'écriture de "macros Word"—les macros peuvent être des scripts externes au lieu de l'intérieur de Word, et ils n'ont pas à être écrite en VB, mais ils ont l'air assez similaires. La dernière partie de votre script devrait ressembler à quelque chose comme ceci:Si vous regardez Microsoft Word Scripts, vous pouvez voir un tas d'exemples. Cependant, vous remarquerez peut-être qu'ils sont écrits en VBScript. Et si vous regardez autour de vous pour les tutoriels, ils sont tous écrits en VBScript (ou plus VB). Et de la documentation pour la plupart des applications est écrit en VBScript (ou VB, .NET, ou même à faible niveau de COM). Et tous les tutoriels que je connais pour l'utilisation de COM automation à partir de Python, comme Démarrage rapide à Côté Client COM et Python, sont écrits par des gens qui savent déjà à propos de COM automation, et veux juste savoir comment le faire à partir de Python. Le fait que Microsoft ne cesse de changer le nom de tout ce qui rend encore plus difficile la recherche pour—comment voulez-vous deviner qui googler pour l'automatisation OLE, ActiveX scripting Windows Scripting Maison, etc. aurait quelque chose à voir avec l'apprentissage sur la COM de l'automatisation? Donc, je ne suis pas sûr de ce à recommander pour commencer. Je peux vous promettre que c'est tout aussi simple que ça ressemble à de l'exemple ci-dessus, une fois que vous apprenez tous les non-sens, mais je ne sais pas comment l'avoir passé cette première haie.
De toute façon, toutes les applications ne est automatisable. Et parfois, même si elle est, en décrivant les actions d'interface utilisateur (ce qu'un utilisateur de cliquer sur l'écran) est plus simple que de réfléchir en termes de l'application du modèle d'objet. "Sélectionnez le troisième alinéa" est difficile à décrire dans le GUI, mais "sélectionner tout le document" est facile—il suffit de frapper contrôle, ou aller dans le menu Edition et Sélectionnez Toutes. GUI d'automatisation est beaucoup plus difficile que d'automation COM, parce que vous devez envoyer l'application des mêmes messages que Windows lui-même envoie pour représenter vos actions de l'utilisateur (par exemple, voir "Menu Des Notifications") ou, pire, de l'artisanat, de la souris messages comme "go (32, 4) des pixels à partir du coin supérieur gauche, cliquez sur la souris en bas de 16 pixels, cliquez de nouveau sur" pour dire "ouvrir le menu Fichier, puis cliquez sur Nouveau".
Heureusement, il existe des outils comme
pywinauto
qui enveloppent les deux types d'interface graphique de l'automatisation des trucs pour le rendre beaucoup plus simple. Et il y a des outils commeswapy
qui peut vous aider à comprendre quelles sont les commandes que vous souhaitez envoyer. Si vous n'êtes pas marié à Python, il existe également des outils commeAutoIt
etActions
qui sont même plus facile que d'utiliserswapy
etpywinauto
, au moins quand vous avez commencé. Aller de cette façon, la dernière partie de votre script peut ressembler à:Enfin, même avec tous ces outils, les navigateurs web sont très difficiles à automatiser, parce que chaque page web a ses propres menus, des boutons, etc. qui ne sont pas des commandes de Windows, mais le format HTML. Sauf si vous voulez aller tout le chemin vers le bas pour le niveau de "déplacer la souris de 12 pixels", il est très difficile de traiter avec ces. C'est là que
selenium
vient—il des scripts Ihm web de la même manière quepywinauto
scripts Windows Interfaces graphiques.Je vais modifier la réponse à ajouter un peu plus d'infos. Aussi, maintenant que je sais que vous êtes sur Windows, je peux être plus précis.
Merci encore, Abarnert! Vous avez été portant avec moi à travers le temps! Je suis vraiment apprécier ce que vous avez fait et ont essayé de le faire pour casser cette idée très vague en fait de simples "morceaux" pour moi! J'ai appris beaucoup de vos réponses. Vous vous faites de ce site vraiment utile et convivial pour de tels débutant comme moi.
OriginalL'auteur abarnert
Le script suivant utilise Automa à faire exactement ce que vous voulez (testé sur Word 2010):
De l'essayer pour vous-même, télécharger Automa.zip de son Page de téléchargement et décompressez-le dans le, dire,
c:\Program Files
. Vous obtiendrez un dossier nomméAutoma 1.1.2
. ExécuterAutoma.exe
dans ce dossier. Copiez le code ci-dessus et le coller dans Automa par un clic droit dans la fenêtre de la console. Appuyez deux fois sur Entrée pour se débarrasser de la dernière...
dans la fenêtre et revenir à l'invite>>>
. Fermez toutes les autres fenêtres ouvertes et le typeEffectue les étapes requises.
Automa est une bibliothèque Python: Pour l'utiliser en tant que tel, vous devez ajouter la ligne
vers le haut de vos scripts et les fichiers
library.zip
de Automa du répertoire d'installation de votre variable d'environnementPYTHONPATH
.Si vous avez d'autres questions, dites le moi 🙂
Tout d'abord, cela va de copier et de coller tout le texte de la chanson les résultats dans un fichier Word, et pas seulement les paroles. Ce qui est presque certainement pas ce que vous voulez. Beaucoup de paroles, les sites sont conçus de manière à ne pas vous permettre de copier-coller les paroles, même si vous avez de la chance, vous obtiendrez un gâchis de navigation, liens, etc. environnant les paroles. (Aussi, cela va quitter à la fois des applications lorsque c'est fait, ce qui n'est probablement pas ce que vous voulez, mais c'est plus facile à corriger.)
Deuxièmement, le blog
http://www.getautoma.com/blog/find-song-lyrics-with-automa
sur ce DONC, la question est très trompeuse. "... les autres réponses sont constitués de... le ton général "c'est trop difficile"? Vraiment, montrant les 5 lignes dewin32com
code pour créer un nouveau fichier dans Word est trop difficile, mais en montrant les 7 lignes de Automa code pour faire la même chose n'est pas? Le plus dur consiste à extraire les paroles du texte—qui cette réponse juste plates sur par pas réellement de problèmes.Enfin, vous devriez probablement mentionner que Automa vient seulement comme une version d'essai, et ni le procès de limites, ni les prix d'achat sont disponibles n'importe où sur le site.
Content que vous l'aimez ttriet 🙂 Si vous pensez que c'est la meilleure réponse que ce serait super si tu pouvais l'accepter en tant que tel ici!
OriginalL'auteur Michael Herrmann
Voici une implémentation en Python de @Matteo Italia commentaire:
Exemple
De sortie
Sebastian je sais que ce post/réponse est vieux, mais je l'ai testé ton code et il a échoué. Il semble apI au format lyrics.wikia.com/api.php est changé. Pourriez-vous m'indiquer à droite la direction ou le lien pour obtenir ce travail à nouveau? J'ai cherché et recherché que l'api du site et il y a de contenu/wiki api, mais n'ai pas trouvé les paroles de l'api n'importe où.
l'API spécifique n'est pas le point de la réponse. Le point est exprimé dans le Matteo Italia commentaire et le code est utilisé comme une simple illustration (à démystifier l'effort requis). Si le code a fonctionné au moment de la publication. Si lyrics.wikia.com's de l'API est arrêté; vous pourriez essayer quelque autre service similaire.
Sébastien: Merci pour votre réponse. Je suis particulièrement intéressé par les paroles de l'API. pourriez-vous me recommander un bon paroles API?
OriginalL'auteur jfs
Si vraiment vous voulez ouvrir un navigateur, etc, regarder selenium. Mais c'est overkill pour vos besoins. Le sélénium est utilisé pour simuler le clic sur un bouton, etc pour tester l'apparence de sites web sur différents navigateurs, etc. Mécaniser est moins d'un overkill pour ce
Ce que vous voulez vraiment faire est de comprendre comment un navigateur (ou tout autre programme) fonctionne sous le capot, c'est à dire lorsque vous cliquez sur la souris ou taper sur le clavier ou appuyez
Save
, quel est le programme à faire derrière les coulisses? C'est cette derrière-le-scènes de travail que vous voulez que votre code python pour le faire.Ainsi, l'utilisation de
urllib
,urllib2
oudemande
(ou diable, mêmescrapy
) à la demande d'une page web (en savoir plus sur la façon de créer l'url d'une recherche sur google ou le phpGET
demande de l'une des paroles site web). Google a également un API de recherche que vous pouvez profiter, pour effectuer une recherche sur google.Une fois que vous avez vos résultats à partir de votre page de demande, analyser avec
xml
,beautifulsoup
,lxlml
, etc et de trouver la section du résultat de la demande qui a l'information que vous recherchez.Maintenant que vous avez vos paroles, la chose la plus simple à faire est d'ouvrir un fichier texte et de vidage de la dans les paroles et les écrire sur le disque. Mais si vous voulez vraiment faire avec MS Word, puis ouvrez une
doc
fichier dans le bloc-notes ou notepad++ et regarder sa structure. Maintenant, utiliser python pour créer un document avec une structure similaire, dans lequel le contenu sera téléchargé paroles.Si cette méthode échoue, vous pouvez regarder dans pywinauto ou tel pour automatiser l'insertion de texte dans MS Word doc et en cliquant sur
Save
Citation: Matteo Italia, g de.d.d.c d'après les commentaires sur l'OP
Je voulais dire que le rendement peut être stockée comme un
.txt
fichier au lieu de.doc
fichierSalut InspectorG4dget! Merci beaucoup pour votre réponse. - Il vraiment helpped! J'ai essayé de télécharger pywinauto et avoir du plaisir avec elle. J'ai d'abord choisi votre première suggestion qui est le Sélénium. Cependant, je ne peux pas télécharger le fichier via le lien que vous avez fourni, peut-être il ya quelque chose de mal avec mon ordinateur ou ma connexion internet. J'ai continué à essayer de télécharger le fichier, mais n'a pas réussi à l'obtenir. J'ai alors cherché sur internet mais je ne peux pas le lien (ou l'un qui fonctionne!). S'il vous plaît, me donner un autre lien de Sélénium, si vous le pouvez. J'apprécie vraiment votre aide
seleniumhq.org c'est la page d'accueil pour le Sélénium. Les instructions doivent expliquer comment obtenir les différents bits de Selenium WebDriver que vous avez besoin (et les bits ceux qui sont).
merci Abarnert.
OriginalL'auteur inspectorG4dget
Vous devriez regarder dans un package appelé
selenium
pour interagir avec les navigateurs webOriginalL'auteur Cameron Sparr