Python 如何在Windows中获取活动Google Chrome选项卡的URL?
我的Python脚本如何在Windows中获取当前活动的Google Chrome选项卡的URL?必须在不中断用户的情况下完成此操作,因此发送按键以复制/粘贴不是一个选项。首先,您需要下载并安装。在脚本中导入以下模块:Python 如何在Windows中获取活动Google Chrome选项卡的URL?,python,winapi,google-chrome,Python,Winapi,Google Chrome,我的Python脚本如何在Windows中获取当前活动的Google Chrome选项卡的URL?必须在不中断用户的情况下完成此操作,因此发送按键以复制/粘贴不是一个选项。首先,您需要下载并安装。在脚本中导入以下模块: import win32gui import win32con 如果Google Chrome是当前活动窗口,首先通过以下方式获取窗口句柄: hwnd = win32gui.GetForegroundWindow() (否则,在查找windows的类名时,可以使用.来查找Go
import win32gui
import win32con
如果Google Chrome是当前活动窗口,首先通过以下方式获取窗口句柄:
hwnd = win32gui.GetForegroundWindow()
(否则,在查找windows的类名时,可以使用.来查找Google Chrome窗口句柄。)
似乎获取URL的唯一方法是获取URL中的文本。这通常是选项卡的URL,但也可以是用户当前键入的任何部分URL或搜索字符串
此外,omnibox中的URL不会包含“http://”前缀,除非用户已明确键入它(并且尚未按下enter键),但如果使用这些协议,它实际上会包含“https://”或“ftp://”
因此,我们在当前Chrome窗口中找到omnibox子窗口:
omniboxHwnd = win32gui.FindWindowEx(hwnd, 0, 'Chrome_OmniboxView', None)
如果Google Chrome团队决定重命名他们的窗口类,这当然会中断
然后我们得到omnibox的“窗口文本”,这似乎对我不起作用。好事情是有一个替代方案确实有效:
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)
这个小函数将消息发送到窗口并返回窗口文本(在本例中为omnibox中的文本)
好了 Christian的回答对我来说不起作用,因为Chrome的内部结构完全改变了,你不能再使用win32gui访问Chrome窗口的元素了 我找到的唯一可能的方法是通过UI自动化API,它有一些使用示例 运行此命令并切换到要从中获取地址的Chrome窗口:
from time import sleep
import uiautomation as automation
if __name__ == '__main__':
sleep(3)
control = automation.GetFocusedControl()
controlList = []
while control:
controlList.insert(0, control)
control = control.GetParentControl()
if len(controlList) == 1:
control = controlList[0]
else:
control = controlList[1]
address_control = automation.FindControl(control, lambda c, d: isinstance(c, automation.EditControl) and "Address and search bar" in c.Name)
print address_control.CurrentValue()
我对StackOverFlow很陌生,因此,如果评论语调不对,我深表歉意 在看了以下内容后:
- 硒
- 发射chrome://History 直接,
- 做一些键盘模拟:用Pywinauto复制/粘贴
- 尝试使用SOCK_RAW connections根据DevTool的Network选项卡捕获报头(这一个非常有趣)
- 试图获取综合/搜索栏窗口元素的文本
- 关闭并重新打开chrome以读取历史记录表,
希望能有所帮助。你能澄清这样的“棘手”问题吗:当某个“恶棍应用”(python脚本、WindowDetective等)试图从“受害者应用”(Chrome,IE,“某些偏执狂应用”)读取任何数据(hwnd、class、text、smth.else)时,“受害者”是否可能可以感觉/看到/检查ih是否已被扫描?这是否仅适用于Windows平台或此库跨平台工作?如果没有,是否有适用于Mac OS的等效库。这是否回答了您的问题?