【问题标题】:Python: Click by coordinate inside a windowPython:在窗口内按坐标单击
【发布时间】:2015-02-23 02:04:56
【问题描述】:

我正在尝试编写的程序的目标是一个机器人,即使我没有选择窗口,它也可以点击和玩 Flash 游戏并在窗口网页内按键。我的问题与this 非常相似。我想知道的是如何使用 win32、selenium 和 PIL 来截取屏幕截图,分析屏幕截图,然后从 bot 中相应地单击并按下按钮。我浏览了 win32api 文档,并没有找到关于如何在后台窗口内单击的信息。

如果有人可以给以前做过这个的人提供一个链接,或者只是朝着正确的方向轻轻一点,那就太棒了!

【问题讨论】:

    标签: python-3.x selenium pywin32


    【解决方案1】:

    pywinauto 更简单,但它可能无法识别 Flash 控件。代码应该看起来更短一点:

    import pywinauto
    app = pywinauto.Application().connect(path='process_name.exe')
    app.MainDialog.click_input(coords=(953, 656))
    

    检查哪些控件可见:

    app.MainDialog.print_control_identifiers()
    

    附:如果您使用 Python 3.x,this clone 与 Py3 兼容。

    【讨论】:

      【解决方案2】:

      如果您的目标是检测屏幕上的图像并与之交互,您可能想看看 Sikuli。这正是它的作用。 Sikuli 将您在屏幕上看到的任何内容自动化。它使用图像识别来识别和控制 GUI 组件。当无法轻松访问 GUI 的内部或源代码时,它特别有用。更多信息here

      【讨论】:

      • 我真的只是想与 Flash 对象进行交互,但由于没有可以帮助我的模块,我只能求助于图像分析 (PIL) 和 SendKeys (win32api)。 import win32com,win32api,win32gui,import ctypes shell = win32com.client.Dispatch("WScript.Shell") hwnd = win32gui.GetForegroundWindow() win32gui.ShowWindow(hwnd, win32con.SW_MAXIMIZE) sleep(3) user32 = ctypes.windll.user32 user32.SetCursorPos(953, 656) sleep(1) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,0,0) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0,0) ^作品
      • 它让事情变得更容易和更干净,所以是的,Sikuli 很棒,但是我想看看是否有办法用纯 python 来做。
      猜你喜欢
      • 1970-01-01
      • 2018-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多