在网站上的文本框中输入数字

时间:2013-07-11 19:07:41

标签: python python-2.7 input textbox

我正在为游戏创建一个脚本,因为我想自动化它的某个部分。到目前为止,我有:

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语句。

1 个答案:

答案 0 :(得分: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)

这不会处理tab,escape或return等特殊键。为此,您需要发送WM_KEYDOWNWM_KEYUP。但是为了您的使用,WM_CHAR就是您想要的。

您还需要一个函数来查找字符串中每个字符的keycode。对于'100',它实际上只是ord('1')ord('0')ord('0'),但事实并非如此。


您可能需要查看SendKeys以及为您提供所有这些内容的类似模块。

或者您可能希望使用更高级别的自动化库,例如AutoPy(其中有很多,如果您搜索SO,您将找到有关所有这些的详细信息)。

或者您可能想要忘记在鼠标点击和关键事件方面尝试自动化浏览器,而是使用selenium在适当的(网络)级别处理它。

或者您可能想要忘记自动化浏览器,而只是使用mechanize在您自己的脚本中模拟浏览器。