社区首页 >问答首页 >使用Python与其他程序交互

使用Python与其他程序交互
EN

Stack Overflow用户
提问于 2013-01-11 15:13:18
回答 4查看 95.1K关注 0票数 28

我想用Python编写一个程序,它会找到我提供的一首歌曲的歌词。我认为整个过程应该归结为以下几点。当我运行程序时,我希望程序能够这样做:

  • 提示我输入一首歌的名字
  • 复制这个名字
  • 打开网页浏览器(例如google)
  • 将该名称粘贴在地址栏中,并查找有关歌曲的信息。
  • 打开包含歌词的页面。
  • 抄写歌词
  • 运行文本编辑器(例如Microsoft )
  • 粘贴歌词
  • 用歌曲的名称保存新的文本文件

当然,我不是在要求密码。我只想知道关于如何使用python与其他程序交互的概念或想法。

更具体地说,我想我想知道,福克斯例子,我们如何指出谷歌Chrome中的地址栏在哪里,并告诉python将名称粘贴在那里。或者我们如何告诉python如何复制歌词,并将其粘贴到Microsof Word的工作表中,然后保存它。

我一直在读(我还在读)关于python的几本书: Python的字节,艰难地学习python,用Python和Pygame开始游戏开发。然而,我发现我似乎只(或者说几乎只)学会了创建能够自己工作的程序(我不能告诉我的程序用已经安装在我计算机上的其他程序做我想做的事情)。

我知道我的问题听起来有些傻,但我真的想知道它是如何工作的,我们告诉Python重新定义Google chrome浏览器的这一部分是地址栏,它应该在其中粘贴歌曲的名字。让python与另一个程序交互的整个想法对我来说真的很模糊,我非常想理解这一点。

谢谢大家,不管是谁花时间读我这么长的问题。

ttriet204

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-01-11 15:32:24

如果你真正研究的是一个很好的借口来教自己如何与其他应用程序交互,那么这可能不是最好的借口。Web浏览器是混乱的,时间将是不可预测的,等等。所以,你已经承担了一项非常艰巨的任务--如果你按照通常的方式(直接与服务器对话,直接创建文本文件等等),这将是非常容易的,所有这些都不涉及任何其他程序。

但是,如果你真的想和其他应用程序交互,有多种不同的方法,哪种方法是合适的,取决于你需要处理的应用种类。

  • 有些应用程序是从外部自动设计的。在Windows上,这几乎总是意味着它们是COM接口,通常带有IDispatch接口,您可以使用pywin32的COM包装器;在Mac上,它意味着使用ScriptingBridgeappscript的AppleEvent接口;在其他平台上,没有通用标准。例如(但可能没有Chrome)和Word都有这样的接口。
  • 有些应用程序有一个非GUI界面--无论是可以使用popen驱动的命令行,还是可以通过ctypes加载的DLL/SO/DYLIB。或者,理想情况下,其他人已经为您编写了Python绑定。
  • 有些应用程序除了GUI什么都没有,没有办法实现GUI自动化。您可以在较低的级别上这样做,方法是在WM_上手工制作通过pywin32发送的消息,使用Mac上的可访问性API等等,或者在更高的级别上使用pywinauto等库,或者可能在非常高级别的selenium或类似的工具中实现特定应用程序的自动化。

所以,从Chrome的selenium到Word的COM自动化,再到自己制作所有的WM_消息,您都可以做到这一点。如果这是一次学习练习,那么问题在于你今天想要学的东西中的哪一件。

让我们从COM自动化开始。使用pywin32,您可以直接访问应用程序自己的脚本接口,而不必从用户手中控制GUI,不需要知道如何导航菜单和对话框等等。这是编写"Word宏“-the宏的现代版本,可以是外部脚本而不是内部Word,它们不必用VB编写,但它们看起来非常相似。脚本的最后一部分如下所示:

代码语言:javascript
代码运行次数:0
复制
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的人编写的。微软不断改变一切名称的事实使得搜索变得更加困难--你怎么会猜到谷歌搜索OLE自动化、ActiveX脚本、等等与学习COM自动化有什么关系呢?所以,我不知道该推荐什么开始。我可以保证,这一切都像上面的例子一样简单,一旦你学会了所有的废话,但我不知道如何跨越最初的障碍。

无论如何,并不是每个应用程序都是自动化的。有时候,即使是这样,用应用程序的对象模型来描述GUI操作(用户在屏幕上点击什么)也比思考更简单。“选择第三段”很难用GUI来描述,但是“选择整个文档”很容易--只需点击控件-A,或者转到编辑菜单并选择所有。GUI自动化要比COM自动化难得多,因为您要么必须向应用程序发送与Windows本身表示用户操作相同的消息(例如,请参阅"菜单通知"),或者更糟的是,您必须从左上角创建"go (32,4)像素,单击鼠标向下16个像素,再单击“以”打开文件“菜单,然后单击”新建“。

幸运的是,有一些像pywinauto这样的工具可以将这两种GUI自动化功能都封装起来,从而使它变得简单得多。还有一些像swapy这样的工具可以帮助您了解您想要发送的命令。如果您不喜欢Python,那么还有一些像AutoItActions这样的工具比使用swapypywinauto更容易,至少在开始的时候是这样。这样做,您的脚本的最后一部分看起来可能是:

代码语言:javascript
代码运行次数:0
复制
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出现的原因--它的脚本web与pywinauto脚本Windows一样。

票数 44
EN

Stack Overflow用户

发布于 2013-01-13 06:35:54

下面的脚本使用自动机来做您想做的事情(在Word 2010上测试):

代码语言:javascript
代码运行次数:0
复制
def find_lyrics():
    print 'Please minimize all other open windows, then enter the song:'
    song = raw_input()
    start("Google Chrome")
    # Disable Google's autocompletion and set the language to English:
    google_address = 'google.com/webhp?complete=0&hl=en'
    write(google_address, into="Address")
    press(ENTER)
    write(song + ' lyrics filetype:txt')
    click("I'm Feeling Lucky")
    press(CTRL + 'a', CTRL + 'c')
    press(ALT + F4)
    start("Microsoft Word")
    press(CTRL + 'v')
    press(CTRL + 's')
    click("Desktop")
    write(song + ' lyrics', into="File name")
    click("Save")
    press(ALT + F4)
    print("\nThe lyrics have been saved in file '%s lyrics' "
          "on your desktop." % song)

要自己尝试一下,请从Automa.zip的下载页面下载并解压缩到,比如说,c:\Program Files。您将得到一个名为Automa 1.1.2的文件夹。在该文件夹中运行Automa.exe。通过右键单击控制台窗口,复制上面的代码并粘贴到Automa中.按Enter两次以摆脱窗口中的最后一个...,然后返回提示符>>>。关闭所有其他打开的窗口并键入

代码语言:javascript
代码运行次数:0
复制
>>> find_lyrics()

这将执行所需的步骤。

Automa 是Python库:要像这样使用它,必须添加行

代码语言:javascript
代码运行次数:0
复制
from automa.api import *

从Automa的安装目录到您的环境变量library.zip到脚本和文件PYTHONPATH的顶部。

如果你还有其他问题,请告诉我:-)

票数 15
EN

Stack Overflow用户

发布于 2013-01-11 15:28:58

如果您真的想打开浏览器等,请查看。但为了你的目的那太过分了。Selenium用于模拟按钮单击等,以测试各种浏览器上的网站外观,等等。机械化对此不太过分。

您真正想要做的是了解浏览器(或任何其他程序)如何在引擎盖下工作,即当您单击鼠标或在键盘上键入或按下Save时,程序在幕后做什么?您希望您的python代码能够完成这些幕后工作。

因此,可以使用urlliburllib2requests (或者见鬼,甚至是scrapy)来请求一个网页(学习如何将url放在谷歌搜索或歌词网站的php GET请求中)。谷歌也有一个搜索API,你可以利用它来执行谷歌搜索。

获得页面请求的结果后,使用xmlbeautifulsouplxlml等对其进行解析,并找到包含所需信息的请求结果部分。

既然你有了歌词,最简单的方法就是打开一个文本文件,然后把歌词转储到里面,然后写到磁盘上。但是如果您真的想使用MS,那么在记事本或doc中打开一个notepad++文件并查看它的结构。现在,使用python构建一个类似结构的文档,其中的内容将是下载的歌词。

如果此方法失败,您可以查看碧昂斯或类似的内容,以自动将文本粘贴到method文档并单击Save

引文:意大利Matteo,g.d.d.c,摘自对“任择议定书”的评论

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14288177

复制
相关文章
python3 TypeError: a
运行telnetlib的时候报错:TypeError: a bytes-like object is required, not ‘str’,原因是因为python2和python3的版本的差异。 在python2中可正常运行,而python3最重要的新特性也是对文本和二进制数据做了更清晰的区分。文本用unicode编码,为str类型,二进制数据则为bytes类型。
py3study
2020/01/03
1.1K0
Mac 安装Python3
Python 2.7.10 (default, Jul 15 2017, 17:16:57) 
星宇大前端
2019/01/15
2K0
Pygraphviz
代码越来越复杂,为了理清架构,需要搞清楚现有代码业务逻辑,没有很顺手的工具,简单写写学习一下。
vanguard
2020/12/30
5750
python3 调用heapq库 时遭遇 "TypeError: unorderable types"
同样的代码在LeetCode上提交,在 python3解释器 下报错,换成 python2解释器 下却好好的:
JNingWei
2018/09/27
7550
python3 调用heapq库 时遭遇 "TypeError: unorderable types"
mac python3 安装parami
$ git clone https://github.com/paramiko/paramiko.git
py3study
2020/01/03
4740
mac> python3 安装Djang
说明:mac系统自带了python2.x (在/System/Library/Frameworks/Python.Frameworks/Version/2.x/...)
py3study
2020/01/03
4990
安装python3(mac、使用brew
其中在最后一行/usr/local/Cellar/python/3.6.5这个便是使用brew安装python3的目录
py3study
2020/01/13
3.1K0
mac系统安装pycharm_mac下载python3
pycharm 是一款针对python开发的优秀的IDE, 以下是针对其在mac上的开发配置使用
全栈程序员站长
2022/09/28
5200
PyGraphviz 安装使用
PyGraphviz 对于图、点和边的设置,如颜色、样式、形状等属性,分别提供有 graph_attr、node_attr 和 edge_attr 属性设置函数。
zhipingChen
2018/09/13
2.2K0
PyGraphviz 安装使用
基础服务系列-Mac 安装Python3
前言 本例采用brew安装。未安装brew,参考Mac 安装Brew。 安装步骤 search brew search python3 ==> Formulae boost-python3 python3 ✔ python@3 ✔ python@3.8 If you meant "python3" specifically: It was migra
用户2146693
2021/12/28
3200
基础服务系列-Mac 安装Python3
mac安装虚拟环境python3
Virtaulenvwrapper是virtualenv的扩展包,可以更方便地新增,删除,复制,切换虚拟环境。
新人小试
2020/03/31
5980
python3搞系统里头之Mac篇
mac系统自带python2环境, 但现在一般使用的都是python3, 而且python2在2020.1.1以后不会再进行维护了, 所以安装个python3还是很有必要的
不止于python
2022/05/31
3140
python3搞系统里头之Mac篇
Mac下Python3安装及基于Idea开发
本篇文章带大家基于Mac OS操作系统,下载、安装Python环境,并基于Idea编写第一个Demo。
程序新视界
2023/04/09
1.1K0
Mac下Python3安装及基于Idea开发
MAC os :LightGBM Installation Error in MacOS with Anaconda Python3
macos 报错 OSError: dlopen(/Users/yanerrol/opt/anaconda3/envs/py366/lib/python3.6/site-packages/lightgbm/lib_lightgbm.so, 6): Library not loaded: /usr/local/opt/libomp/lib/libomp.dylib Referenced from: /Users/yanerrol/opt/anaconda3/envs/py366/lib/python3.6
AI拉呱
2021/03/04
1.5K0
linux下运行python3出现TypeError: a bytes-like object is required, not 'str'
 以上代码用python3运行后,出现TypeError: a bytes-like object is required, not 'str'
逆向小白
2018/09/12
13.8K0
linux下运行python3出现TypeError: a bytes-like object is required, not 'str'
mac os+selenium2+chrome驱动+python3
mac os 10.11.5 mac自带python2.7,自己下载了python3.5,pip list查看系统中的安装包,本人电脑中已经安装了pip和setuptools,若未安装,请先使用
全栈程序员站长
2022/09/07
4710
Mac上最简单配置python3开发环
网上有使用pyenv方式安装python3以实现与系统的python版本共存而不冲突,个人觉得其实没有必要,我们其实可以单独运行python3。 首先我们还是需要先安装python3,这里使用homebrew安装,方便快捷好管理,棒棒哒!
py3study
2020/01/05
1.3K0
Mac下安装Python3、pip、ipython的方法
1 安装Xcode 1.1 App Store 搜索Xcode 并安装 1.2 安装 Xcode command line tool 1.2.1 打开命令行terminal工具 control + space 输入terminal 回车 1.2.2 安装Xcode command line tool xcode-select --install 2 安装套件管理工具 Homebrew 2.1 安装 Homebrew /usr/bin/ruby -e "$(curl -fsSL https://raw
Python疯子
2018/09/06
1.7K0
python3在pycharm中为什么导入random模块不能用? TypeError: ‘module’ object is not callable…
新手学python求大神指导,也用sys导入了random.py的路径,仍然不行。
全栈程序员站长
2022/07/07
1.5K0
Django Models UML
Generate a class diagram based on GraphViz(pygraphviz) and django django-extensions
vanguard
2020/12/09
8260

相似问题

Python3,可除以3,typeError

12

Python3: TypeError:“TypeError”对象不可订阅

11

安装PyGraphviz时出错(Mac、Anaconda)

40

PySide & Python3: TypeError on QAction

10

Python3 Runserver TypeError {newbie}

15
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档