如何获取Windows中活动Google Chrome标签的网址?

Chr*_*vén 9 python winapi google-chrome

我的Python脚本如何获取Windows中当前活动的Google Chrome选项卡的URL?这必须在不中断用户的情况下完成,因此不能选择发送复制/粘贴的击键.

Chr*_*vén 16

首先,您需要下载并安装pywin32.在脚本中导入这些模块:

import win32gui
import win32con
Run Code Online (Sandbox Code Playgroud)

如果Google Chrome是当前活动的窗口,请先通过以下方式获取窗口句柄:

hwnd = win32gui.GetForegroundWindow()
Run Code Online (Sandbox Code Playgroud)

(否则,请使用以下方法查找Google Chrome窗口句柄win32gui.FindWindow.在查找Windows的类名时,Windows Detective很方便.)

获取URL的唯一方法是获取"omnibox"(地址栏)中的文本.这通常是选项卡的URL,但也可以是用户当前正在键入的任何部分URL或搜索字符串.

此外,多功能框中的URL不包含"http://"前缀,除非用户明确键入了它(并且还没有按下回车键),但它实际上包括"https://"或"ftp: //"如果使用这些协议.

因此,我们在当前Chrome窗口中找到了多功能框子窗口:

omniboxHwnd = win32gui.FindWindowEx(hwnd, 0, 'Chrome_OmniboxView', None)
Run Code Online (Sandbox Code Playgroud)

如果谷歌Chrome团队决定重命名他们的窗口类,这当然会中断.

然后我们得到了多功能框的"窗口文本",这似乎win32gui.GetWindowText对我不起作用.好东西有另一种方法可行:

def getWindowText(hwnd):
    buf_size = 1 + win32gui.SendMessage(hwnd, win32con.WM_GETTEXTLENGTH, 0, 0)
    buf = win32gui.PyMakeBuffer(buf_size)
    win32gui.SendMessage(hwnd, win32con.WM_GETTEXT, buf_size, buf)
    return str(buf)
Run Code Online (Sandbox Code Playgroud)

这个小函数将WM_GETTEXT消息发送到窗口并返回窗口文本(在这种情况下,是多功能框中的文本).

你去!