You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 23:48:14