【问题标题】:Python Win32 send keystrokes to ChromePython Win32 向 Chrome 发送击键
【发布时间】:2016-09-26 08:52:45
【问题描述】:

我正在尝试在 Windows 中运行 python 脚本以将 F5 命令发送到 Google Chrome v53 窗口。但不幸的是,什么也没发生。但它对Internet Explorer v11 的作用就像一个魅力(在更改Class Name 之后)。

Python 代码

import win32gui, win32api, win32con
hwnd = win32gui.FindWindow("Chrome_WidgetWin_1", None)
print hwnd
# Sending command to the main windows also does not work
win32api.PostMessage(hwnd, win32con.WM_KEYDOWN, win32con.VK_F5, 0)
hwnd = win32gui.FindWindowEx(hwnd, None, "Chrome_RenderWidgetHostHWND", None)
print hwnd
win32api.PostMessage(hwnd, win32con.WM_KEYDOWN, win32con.VK_F5, 0)

Python 输出

1181972
0

编辑:包括隐藏窗口

There seems to be more windows, that have the same Class Name. 因此,我现在不仅搜索Class Name,还搜索Text。第一次尝试只找到了一个没有孩子的窗口。因此输出的第二行有一个0

修改后的 Python 代码

import win32gui, win32api, win32con
hwnd = win32gui.FindWindow("Chrome_WidgetWin_1", "Stack Overflow - Google Chrome")
print hwnd
# Sending command to the main windows also does not work
win32api.PostMessage(hwnd, win32con.WM_KEYDOWN, win32con.VK_F5, 0)
hwnd = win32gui.FindWindowEx(hwnd, None, "Chrome_RenderWidgetHostHWND", None)
print hwnd
win32api.PostMessage(hwnd, win32con.WM_KEYDOWN, win32con.VK_F5, 0)

Python 输出

1247302
1509536

编辑:SetForegroundWindow 解决方案

解决问题的方法是先通过win32gui.SetForegroundWindow(Handle)方法将窗口设置为前台,然后发送键盘命令。

但仍然没有命令传递到窗口,网站也没有刷新。

【问题讨论】:

  • 可能与 Chrome 在单独的进程中运行每个标签页有关。
  • @ElmoVanKielmo:谢谢你的提示,我刚刚更新了我的问题。不幸的是,它没有帮助。
  • 您没有使用 UI 自动化来触发 重新加载此页面 按钮的原因是什么?该按钮显示在可访问的树中,因此可以与 UI 自动化一起使用。
  • @IInspectable:该问题的解决方案是在发送命令之前将窗口设置为前台(参见最新编辑)。我实际上正在进一步使用浏览器的 CEF 版本,因此没有可访问的自动化按钮。因此,我想在后台发送命令。
  • 我希望您了解适用的限制,当一个进程可以成功调用SetForegroundWindow。另请记住,您不是发送命令。你在伪造输入,而且 - 众所周知 - you can’t simulate keyboard input with PostMessage

标签: python google-chrome winapi winspector


【解决方案1】:

你可以用这个

import pyautogui
pyautogui.hotkey('f5')

这将模拟您的刷新键,将信号发送到 chrome。
如果您不想激活 chrome 窗口,那么当您启动 chrome 时,请在命令提示符下键入以下内容来启动它:

start /B chrome.exe

然后关闭chrome。它将在后台运行。工作完成后,进入任务管理器并关闭 chrome。
或者您可以转到 Chrome>Advanced>System 并查看第一个选项。

【讨论】:

  • 如何通过 Python 脚本将此击键专门发送到 Chrome 窗口(并且可能不会手动将焦点更改到此窗口)?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-21
  • 1970-01-01
  • 2014-05-26
  • 2018-09-19
  • 1970-01-01
  • 1970-01-01
  • 2010-12-25
相关资源
最近更新 更多