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

如何用Python获取当前运行浏览器的所有URL(不使用Selenium)

已运行浏览器实时打开标签页URL获取方案

报错原因说明

你遇到的sqlite3.OperationalError: database is locked报错,是因为Chromium内核浏览器(包括Brave)运行时会对历史记录数据库文件加独占锁,禁止外部进程直接读写。且即便你复制数据库副本读取,拿到的也是历史访问记录,不是当前实时打开的标签页URL,不符合需求。

可行实现方案

两种方案均满足不是通过Selenium启动浏览器再获取链接的要求,可直接读取已运行浏览器的标签页URL:

方案1:基于Windows UI自动化获取(无需修改浏览器配置)

通过pywinauto库调用Windows原生UI接口,直接读取Brave窗口地址栏的内容,无需改动浏览器启动参数,适合临时使用。

  • 依赖安装:
pip install pywinauto
  • 实现代码:
from pywinauto import Application

# 连接到正在运行的Brave浏览器进程
app = Application(backend='uia').connect(title_re='.*Brave', class_name='Chrome_WidgetWin_1')

all_urls = []
# 遍历所有打开的Brave窗口获取地址栏内容
for window in app.windows(class_name='Chrome_WidgetWin_1'):
    # 定位Chromium内核浏览器的地址栏控件
    address_bar = window.child_window(control_type='Edit', name='地址和搜索栏')
    if address_bar.exists():
        url = address_bar.get_value()
        if url:
            all_urls.append(url)

print("当前打开的所有URL:")
for url in all_urls:
    print(url)
  • 注意:如果Brave设置了多用户配置,仅需调整窗口匹配规则即可正常使用。

方案2:基于浏览器远程调试接口获取(数据更准确)

通过开启Brave的远程调试端口,调用官方调试接口直接获取所有标签页的URL,不受UI层级、窗口状态影响,数据准确性更高。

  1. 配置浏览器启动参数:
    • 右键Brave桌面快捷方式,选择「属性」
    • 在「目标」输入框的原有内容末尾,添加空格后输入--remote-debugging-port=9222
    • 关闭所有Brave进程后,通过该快捷方式重启浏览器
  2. 依赖安装:
pip install requests
  1. 实现代码:
import requests

# 调用本地调试接口获取所有标签页信息
res = requests.get('http://127.0.0.1:9222/json')
tabs = res.json()

# 筛选页面类型的标签页,排除插件、后台进程等非页面内容
all_urls = [tab['url'] for tab in tabs if tab['type'] == 'page']

print("当前打开的所有URL:")
for url in all_urls:
    print(url)
  • 注意:9222端口如果被占用,可以替换为其他未被占用的端口,确保和启动参数里的端口一致即可。

两种方案都适用于所有Chromium内核浏览器,包括Chrome、Edge等,仅需调整窗口匹配规则或对应浏览器的启动参数即可,无需改动核心逻辑。

内容的提问来源于stack exchange,提问作者Johan Jomy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 09:45:03