求助:使用pywinauto获取Opera、Firefox、Brave当前标签页URL
获取多浏览器当前标签页URL的Python实现
以下是基于你现有代码,补充Opera、Firefox、Brave的URL获取实现,核心通过pywinauto的UIA后端定位浏览器地址栏控件:
依赖补充
确保安装所需库:
pip install pywin32 pywinauto psutil
完整实现代码
from win32gui import GetForegroundWindow from win32process import GetWindowThreadProcessId from pywinauto.application import Application import time import psutil def get_process_name(pid): try: return psutil.Process(pid).name().lower() except: return "" def get_chrome_edge_brave_url(app): # 适用于Chrome、Edge、Brave(Chromium内核) dlg = app.top_window() try: # 优先尝试Chrome/Brave的直接地址栏定位 url = dlg.child_window(title="Address and search bar", control_type="Edit").get_value() return url except: # 兼容Edge的ToolBar层级结构 wrapper = dlg.child_window(title="App bar", control_type="ToolBar") url = wrapper.descendants(control_type='Edit')[0].get_value() return url def get_opera_url(app): dlg = app.top_window() # Opera部分版本地址栏标题为"Address field" try: url = dlg.child_window(title="Address field", control_type="Edit").get_value() return url except: # 版本兼容:复用Chromium内核浏览器的定位逻辑 return get_chrome_edge_brave_url(app) def get_firefox_url(app): dlg = app.top_window() # Firefox地址栏固定标题为"Search or enter address" url = dlg.child_window(title="Search or enter address", control_type="Edit").get_value() return url time.sleep(3) window = GetForegroundWindow() tid, pid = GetWindowThreadProcessId(window) process_name = get_process_name(pid) app = Application(backend="uia").connect(process=pid, timeout=10) url = None if process_name in ["chrome.exe", "msedge.exe", "brave.exe"]: url = get_chrome_edge_brave_url(app) elif process_name == "opera.exe": url = get_opera_url(app) elif process_name == "firefox.exe": url = get_firefox_url(app) if url: print(f"当前标签页URL:{url}") else: print("无法识别浏览器或获取URL失败")
关键说明
- Chromium内核浏览器(Chrome/Edge/Brave):三者控件结构高度相似,共用一套定位逻辑,仅通过fallback处理不同版本的标题差异。
- Opera:部分版本地址栏标题为"Address field",若定位失败则复用Chromium内核的逻辑。
- Firefox:地址栏标题固定,直接通过标题定位即可。
若遇到浏览器版本更新导致定位失败,可通过以下代码查看控件树结构,调整定位参数:
# 在获取dlg对象后添加,打印所有控件信息 dlg.print_control_identifiers()
内容的提问来源于stack exchange,提问作者Shuvadip Ghosh
相关产品推荐
相关产品推荐

