web-dev-qa-db-ja.com

Pythonを使用して他のプログラムと対話する

私はPythonを使用してプログラムを書くというアイデアを持っています。これは、名前を指定した曲の歌詞を見つけるものです。全体のプロセスは、次の2つに要約されると思います。これらは、実行時にプログラムに実行させたいことです。

  • 曲の名前を入力するように促します
  • その名前をコピーする
  • webブラウザを開きます(たとえば、Google chrome)
  • その名前をアドレスバーに貼り付けて、曲に関する情報を見つけます
  • 歌詞を含むページを開きます
  • その歌詞をコピー
  • テキストエディタを実行します(たとえば、Microsoft Wordなど)
  • 歌詞を貼り付けます
  • 曲の名前で新しいテキストファイルを保存します

もちろん、コードを要求しているわけではありません。 pythonを使用して他のプログラムと対話する方法に関する概念またはアイデアを知りたいだけです。

具体的には、フォックスの例のように、Google Chromeのアドレスバーの場所を指摘し、pythonに名前を貼り付けるように伝えたいと思います。または、歌詞をコピーしてMicrosof Wordのシートに貼り付けて保存する方法をpythonに伝える方法。

私はPythonに関するいくつかの本を読んでいます(まだ読んでいます):Byte of python、Learn python the hard way、Python for dummies、Beginning Game Development Beginning with PythonおよびPygame。しかし、自分で動作するプログラムを作成することだけを学んでいるようです(既にコンピューターにインストールされている他のプログラムで自分のプログラムに希望することを指示することはできません)

私の質問はどういうわけか馬鹿げているように聞こえますが、Google Pythonブラウザのこの部分がアドレスであることを確認するためにchromeに伝える方法で、それがどのように機能するかを本当に知りたいですバーと曲の名前を貼り付けます。 pythonを別のプログラムと対話させるという考え全体は本当に私にはあいまいであり、私はそれを非常に把握したいだけです。

私の長い質問を読んで時間を割いてくれた皆さん、ありがとう。

ttriet204

21
ttriet204

次のスクリプトは、 Automa を使用して、希望どおりに実行します(Word 2010でテスト済み)。

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キーを2回押して、ウィンドウ内の最後の...を取り除き、プロンプト>>>に戻ります。開いている他のすべてのウィンドウを閉じて、入力します

>>> find_lyrics()

これにより、必要な手順が実行されます。

Automa is Python library :そのまま使用するには、行を追加する必要があります

from automa.api import *

スクリプトの先頭と、Automaのインストールディレクトリから環境変数PYTHONPATHへのlibrary.Zipファイル。

他に質問がある場合は、私に知らせてください:-)

15

以下にPython @ Matteo Italiaのコメント の実装を示します。

「プログラマー」の観点からアプローチする必要がある場合、「ユーザー」の観点から問題にアプローチしています。ブラウザを開いたり、テキストをコピーしたり、Wordなどを開いたりする必要はありません。適切なHTTPリクエストを実行し、関連するHTMLを解析し、テキストを抽出して、Pythonスクリプト:これを行うためのすべてのツールは、Python(特にurllib2とBeautifulSoupが必要です)で利用できます。

#!/usr/bin/env python
import codecs
import json
import sys
import urllib
import urllib2

import bs4  # pip install beautifulsoup4

def extract_lyrics(page):
    """Extract lyrics text from given lyrics.wikia.com html page."""
    soup = bs4.BeautifulSoup(page)
    result = []
    for tag in soup.find('div', 'lyricbox'):
        if isinstance(tag, bs4.NavigableString):
            if not isinstance(tag, bs4.element.Comment):
                result.append(tag)
        Elif tag.name == 'br':
            result.append('\n')
    return "".join(result)

# get artist, song to search
artist = raw_input("Enter artist:")
song = raw_input("Enter song:")

# make request
query = urllib.urlencode(dict(artist=artist, song=song, fmt="realjson"))
response = urllib2.urlopen("http://lyrics.wikia.com/api.php?" + query)
data = json.load(response)

if data['lyrics'] != 'Not found':
    # print short lyrics
    print(data['lyrics'])
    # get full lyrics
    lyrics = extract_lyrics(urllib2.urlopen(data['url']))
    # save to file
    filename = "[%s] [%s] lyrics.txt" % (data['artist'], data['song'])
    with codecs.open(filename, 'w', encoding='utf-8') as output_file:
        output_file.write(lyrics)
    print("written '%s'" % filename)
else:
    sys.exit('not found')

$ printf "Queen\nWe are the Champions" | python get-lyrics.py 

出力

会費を支払った
何度も
刑を終えました
しかし犯罪は犯していません
 
そして悪い間違い
私はいくつかのことをしました
私は自分の分量の砂を蹴った[...] 
「[クイーン] [We are the Champions]」の歌詞を書きました。 txt'
11
jfs

ブラウザなどを本当に開きたい場合は、 Selenium をご覧ください。しかし、それはあなたの目的には行き過ぎです。 Seleniumは、ボタンのクリックなどをシミュレートして、さまざまなブラウザーなどでWebサイトの外観をテストするために使用されます。 Mechanize は、これではあまりやりすぎではありません。

あなたが本当にしたいことは、ブラウザ(または他のプログラム)がフードの下でどのように機能するかを理解することです。つまり、マウスをクリックするかキーボードを入力するかSaveを押すと、プログラムは舞台裏で何をしますか? pythonコードに実行させたいのは、この舞台裏の作業です。

そのため、urlliburllib2または requests (または一体 scrapy )でWebページを要求する(学習するGoogle検索のURLまたは歌詞ウェブサイトのGETリクエストをまとめる方法)。 Googleには、Google検索を実行するために利用できる search API もあります。

ページリクエストから結果が得られたら、xmlbeautifulsouplxlmlなどを使用して解析し、リクエスト結果の中で必要な情報を含むセクションを見つけます。

歌詞ができたので、最も簡単なことはテキストファイルを開き、そこに歌詞をダンプしてディスクに書き込むことです。ただし、MS Wordで本当にやりたい場合は、docファイルをメモ帳またはnotepad ++で開き、その構造を確認してください。ここで、pythonを使用して、コンテンツがダウンロードされた歌詞になる類似の構造を持つドキュメントを作成します。
この方法が失敗した場合、 pywinauto などを調べて、MS Wordドキュメントへのテキストの貼り付けを自動化し、Saveをクリックすることができます。

引用:Matteo Italia、g.d.d.c、OPのコメントから

5
inspectorG4dget

Webブラウザーと対話するためにSeleniumというパッケージを調べる必要があります

0
Cameron Sparr