当前位置: 首页 > 面试题库 >

使用Python与其他程序互动

梁丘翔
2023-03-14
问题内容

我有一个用Python编写程序的想法,该程序将查找我提供的歌曲的歌词。我认为整个过程应该归结为以下几件事。这些是我希望程序在运行时要执行的操作:

  • 提示我输入歌曲名称
  • 复制该名称
  • 打开网络浏览器(例如,谷歌浏览器)
  • 将该名称粘贴到地址栏中,然后找到有关歌曲的信息
  • 打开包含歌词的页面
  • 复制歌词
  • 运行文本编辑器(例如Microsoft Word)
  • 粘贴歌词
  • 用歌曲名称保存新的文本文件

我当然不要求代码。我只想了解有关如何使用python与其他程序进行交互的概念或想法

更具体地讲,我想我想知道一个狐狸示例,只是我们如何指出Google
Chrome浏览器中的地址栏在哪里,并告诉python在其中粘贴名称。或者我们如何告诉python如何复制歌词并将其粘贴到Microsof
Word的工作表中然后保存。

我已经读过(我仍在读)关于Python的几本书:python的字节,艰难地学习python,傻瓜的Python,从Python和Pygame开始游戏开发。但是,我发现似乎我仅(或几乎仅)学习创建可以在其自身上运行的程序(我无法告诉我的程序用我的计算机上已经安装的其他程序来做我想做的事情)

我知道我的问题听起来有点愚蠢,但是我真的很想知道它的工作原理,我们告诉Python重新确认Google
chrome浏览器的这一部分是地址栏,并且应该在其中粘贴歌曲名称它。使python与另一个程序交互的整个想法对我来说真的很模糊,我非常想抓住这一点。

谢谢大家,谁愿意花时间阅读我这么长的问题。

第204章


问题答案:

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

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

  • 有些应用程序设计为从外部自动化。在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。



 类似资料:
  • 以下是包含在Apache中的没有专门手册页的简单支持程序,这些程序不是自动安装的,而是在配置过程以后,装在"support"目录下的。 log_server_status 此perl脚本可以由频繁使用的诸如cron的工具所调用。它连接到服务器并下载状态信息,并格式化此信息为一行,并记录在一个文件中。要指定结果的输出文件的位置,可以调整该脚本首行中的变量。 split-logfile 此perl脚本

  • 让我们从建立一个计数器组件开始。这个组件将负责跟踪其被点击多少次并显示该数量。 app/components/counter-component.ts View Example 在这种情况下,点击事件绑定到从 ActionCreatorService调用我们的动作创建者的表达式。 让我们来看看@select的使用。 是Ng2-Redux的一个功能,它旨在帮助您以声明方式将 store 的状态附加到

  • 使用 Adobe Bridge 和 After Effects 使用 Adobe Bridge 可运行动画预设;运行跨产品工作流程自动化脚本;查看和管理文件和文件夹;通过将关键字、标签和等级分配给您的文件来组织这些文件;搜索文件和文件夹;以及查看、编辑和添加元数据。 要从 After Effects 打开 Adobe Bridge,请选择“文件”>“在 Bridge 中浏览”。 要在 Adobe

  • 我有Jasper Reports服务器(安装在www.example.net上)和一个单独的Java/JSP应用程序(安装在www.example.net上),我在寻找不同的选项来生成报告。 选项1(当前工作解决方案) 我目前的工作解决方案是用户登录到Java /JSP应用程序,并选择一个报告。应用程序创建报告的XML表示,并将其保存为,然后使用以下代码将其发送到Jasper报告服务器: (请注意

  • 我想直接从我的应用程序运行另一个应用程序(Polaris Office)。但它也应该直接打开PDF文件。 我尝试了以下代码: 知道我该怎么做吗?我当前的代码给出了错误消息: 原因:java。lang.SecurityException:权限拒绝:启动Intent{act=android.Intent.action.MAIN dat=file:///mnt/sdcard/pdf.pdftyp=app

  • 问题内容: 我已经尝试了每个存在的Python Web框架,花了很长时间我才意识到没有一个灵丹妙药的框架,每个框架都有其优点和缺点。我从Snakelets入手,非常高兴能够将几乎所有内容都控制在较低的水平上,而不必大惊小怪,但是后来我发现了TurboGears,从那时起我一直在使用它(1.x)。Catwalk和Web控制台之类的工具对我来说是无价的。 但是随着TurboGears 2的问世带来了W