我有一个用Python编写程序的想法,该程序将查找我提供的歌曲的歌词。我认为整个过程应该归结为以下几件事。这些是我希望程序在运行时要执行的操作:
我当然不要求代码。我只想了解有关如何使用python与其他程序进行交互的概念或想法
更具体地讲,我想我想知道一个狐狸示例,只是我们如何指出Google Chrome浏览器中的地址栏在哪里,并告诉python在其中粘贴名称。或者我们如何告诉python如何复制歌词并将其粘贴到Microsof Word的工作表中然后保存。
我已经读过(我仍在读)关于Python的几本书:python的字节,艰难地学习python,傻瓜的Python,从Python和Pygame开始游戏开发。但是,我发现似乎我仅(或几乎仅)学习创建可以在其自身上运行的程序(我无法告诉我的程序用我的计算机上已经安装的其他程序来做我想做的事情)
我知道我的问题听起来有点愚蠢,但是我真的很想知道它的工作原理,我们告诉Python重新确认Google chrome浏览器的这一部分是地址栏,并且应该在其中粘贴歌曲名称它。使python与另一个程序交互的整个想法对我来说真的很模糊,我非常想抓住这一点。
谢谢大家,谁愿意花时间阅读我这么长的问题。
第204章
如果您真正想找的是教自己如何与其他应用进行交互的好借口,那么这可能不是最好的选择。网络浏览器比较混乱,时间安排无法预测,等等。因此,您已经完成了一项非常艰巨的任务- 如果您按照通常的方式进行操作(直接与服务器通信,创建文本文件等),而无需触摸其他任何程序。
但是,如果您确实想与其他应用程序进行交互,则有多种不同的方法,哪种方法合适取决于您需要处理的应用程序的种类。
有些应用程序设计为从外部自动化。在Windows上,这几乎总是意味着它们是一个COM接口,通常带有IDispatch接口,您可以为其使用pywin32COM包装器。在Mac上,它表示您要使用ScriptingBridge或appscript;的AppleEvent接口。在其他平台上,没有通用标准。IE(但可能不是Chrome)和Word都具有这样的界面。
pywin32
ScriptingBridge
appscript
某些应用程序具有非GUI界面-无论是可以驱动的命令行popen,还是可以通过加载的DLL / SO / DYLIB ctypes。或者,理想情况下,其他人已经为您编写了Python绑定。
popen
ctypes
有些应用程序除了GUI外没有其他任何东西,而且无法进行GUI自动化。您可以通过pywin32在Windows上制作WM_消息以进行发送,使用Mac上的可访问性API等来在较低级别上执行此操作,或者使用诸如的库在较高级别上执行此操作pywinauto,也可以在较高级别使用selenium类似工具旨在自动执行特定应用。
pywinauto
selenium
因此,您可以执行任何操作,从Chrome的硒和Word的COM自动化到自己制作所有WM_消息。如果这是学习的目的,那么问题是您今天想学习哪些东西。
让我们从COM自动化开始。使用pywin32,您可以直接访问应用程序自己的脚本接口,而无需从用户那里控制GUI,无需弄清如何导航菜单和对话框等。这是编写“ Word宏”的现代版本-宏可以是外部脚本而不是内部Word,并且它们不必用VB编写,但是它们看起来很相似。脚本的最后一部分看起来像这样:
word = win32com.client.dispatch('Word.Application') word.Visible = True doc = word.Documents.Add() doc.Selection.TypeText(my_string) doc.SaveAs(r'C:\TestFiles\TestDoc.doc')
如果您查看Microsoft Word脚本,则可以看到很多示例。但是,您可能会注意到它们是用VBScript编写的。而且,如果您四处寻找教程,它们都是为VBScript(或更旧的VB)编写的。而且大多数应用程序的文档都是为VBScript(或VB,.NET甚至是低级COM)编写的。我所知道的有关使用Python进行COM自动化的所有教程,例如快速入门到客户端COM和Python。专门为那些已经了解COM自动化并且只想从Python做到这一点的人编写。Microsoft不断更改所有名称的事实使搜索变得更加困难- 您如何猜测对OLE自动化,ActiveX脚本,Windows Scripting House等进行谷歌搜索与学习COM自动化有什么关系?因此,我不确定入门建议。我可以保证,一旦您学会了所有的废话,一切就和上面的示例一样简单,但是我不知道该如何克服最初的障碍。
无论如何,并非每个应用程序都是自动化的。有时,即使是这样,描述GUI动作(用户将在屏幕上单击的内容)也比考虑应用程序的对象模型要简单。“选择第三段”很难用GUI术语描述,但是“选择整个文档”很容易- 只需按Control-A,或转到“编辑”菜单,然后选择“全选”即可。GUI自动化要比COM自动化困难得多,因为您必须向应用程序发送Windows本身发送的相同消息来表示用户操作(例如,请参阅“菜单通知”),或者更糟糕的是,编写诸如“ go(32) ,4)单击左上角的像素,将鼠标向下移16像素,再次单击以说出“打开文件菜单,然后单击新建”。
幸运的是,有类似的工具pywinauto可以将这两种GUI自动化内容打包起来,使其更加简单。并且有类似的工具swapy可以帮助您确定要发送的命令。如果您不熟悉Python,那么至少还有一些工具,比如AutoIt和Actions比使用swapyand更容易pywinauto,至少在开始时如此。这样,脚本的最后一部分可能看起来像:
swapy
AutoIt
Actions
word.Activate() word.MenuSelect('File->New') word.KeyStrokes(my_string) word.MenuSelect('File->Save As') word.Dialogs[-1].FindTextField('Filename').Select() word.KeyStrokes(r'C:\TestFiles\TestDoc.doc') word.Dialogs[-1].FindButton('OK').Click()
最后,即使使用所有这些工具,Web浏览器也很难实现自动化,因为每个网页都有自己的菜单,按钮等,这些菜单,按钮等不是Windows控件,而是HTML。除非您想一直下降到“将鼠标移动12像素”的水平,否则很难处理这些问题。就是这样selenium-它以pywinauto脚本Windows GUI的方式来编写Web GUI。