您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

使用Python与其他程序互动

使用Python与其他程序互动

如果您真正想找的是教自己如何与其他应用进行交互的好借口,那么这可能不是最好的选择。网络浏览器比较混乱,时间安排无法预测,等等。因此,您已经完成了一项非常艰巨的任务- 如果您按照通常的方式进行操作(直接与服务器通信,创建文本文件等),而无需触摸其他任何程序。

但是,如果您确实想与其他应用程序进行交互,则有多种不同的方法,哪种方法合适取决于您需要处理的应用程序的种类。

有些应用程序设计为从外部自动化。在Windows上,这几乎总是意味着它们是一个COM接口,通常带有IDispatch接口,您可以为其使用pywin32COM包装器。在Mac上,它表示您要使用ScriptingBridgeappscript;的AppleEvent接口。在其他平台上,没有通用标准。IE(但可能不是Chrome)和Word都具有这样的界面。

某些应用程序具有非GUI界面-无论是可以驱动的命令行popen,还是可以通过加载的DLL / SO / DYLIB ctypes。或者,理想情况下,其他人已经为您编写了Python绑定。

有些应用程序除了GUI外没有其他任何东西,而且无法进行GUI自动化。您可以通过pywin32在Windows上制作WM_消息以进行发送,使用Mac上的可访问性API等来在较低级别上执行此操作,或者使用诸如的库在较高级别上执行此操作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,那么至少还有一些工具,比如AutoItActions比使用swapyand更容易pywinauto,至少在开始时如此。这样,脚本的最后一部分可能看起来像:

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。

python 2022/1/1 18:51:14 有382人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶