0

ゲームの特定の部分を自動化したいので、ゲームのスクリプトを作成しています。これまでのところ、私は持っています:

import win32api, win32con, time
def click(x,y):
    win32api.SetCursorPos((x,y))
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)
click(100,655)
time.sleep(3)
click(740,580)
time.sleep(1)
raw_input(100) 

これまでのところ、移動する必要がある正しいページをクリックしてから、数字を入力できるテキストボックスをクリックしましたが、テキストボックスを選択した後、数字の入力方法がわかりません。raw_input を使おうと思ったのですが、代わりに print ステートメントのように振る舞いました。

4

1 に答える 1

1

このraw_input関数は、別のプログラムへのキーストロークをシミュレートしません。プロンプトをコンソールに出力し、そのコンソールに応答を入力するのを待って、入力した内容をスクリプトに返します。ここでは完全に役に立ちません。

実際に必要なのは、マウス イベントを送信するのと同じ方法で、キーボード イベントをアプリに送信する方法です。


Windows Scripting Host が存在することに依存できる場合 (Vista および XPSP3 以降には常に存在し、それ以前の XP にはインストールできると思います)、低レベルで処理を行う代わりにそれを使用できます。

wshell = win32com.client.Dispatch("WScript.Shell")
wshell.SendKeys("foo")

それ以外の場合は、ウィンドウへのハンドルを取得する必要があります (これは win32api ドキュメントで説明されているため、既に知っていると思います)。次に、次のようにします。

def sendkey(hwnd, keycode):
    win32api.PostMessage(hwnd, win32con.WM_CHAR, keycode, 0)

これは、タブ、エスケープ、またはリターンなどの特殊キーを適切に処理しません。そのためには、代わりに と を送信する必要がありWM_KEYDOWNますWM_KEYUP。しかし、あなたの使用のために、WM_CHARあなたが望むものです。

また、文字列内の各文字のキーコードを検索する関数も必要です。というのは、'100'実際には , , にすぎord('1')ませord('0')ord('0')が、すべてに当てはまるわけではありません。


SendKeysこれらすべてをまとめた同様のモジュールを見たいと思うかもしれません。

または、次のような高レベルの自動化ライブラリを使用することもできますAutoPy(これらには多くのものがあり、SO を検索すると、それらすべての詳細が表示されます)。

または、マウス クリックやキー イベントに関してブラウザーを自動化しようとすることを忘れて、代わりに を使用して適切な (Web) レベルで処理することをお勧めしますselenium

または、ブラウザの自動化を忘れて、代わりに を使用して独自のスクリプトでブラウザをシミュレートしたい場合がありますmechanize

于 2013-07-11T19:16:15.080 に答える