要从Google Chrome浏览器中获取所有打开的标签页URL,需要通过浏览器提供的接口或操作系统级别的API来访问浏览器状态。在Python中,这通常涉及以下几种方法:
这是最可靠的方法,通过Chrome DevTools Protocol直接与浏览器交互。
import json
import websocket
import time
def get_chrome_tabs_urls(port=9222):
"""
获取Chrome所有打开的标签页URL
:param port: Chrome远程调试端口,默认为9222
:return: 所有标签页URL列表
"""
# 确保Chrome以远程调试模式启动:
# "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --remote-debugging-port=9222
# 获取所有可用的标签页
ws_url = f"ws://localhost:{port}/devtools/browser"
ws = websocket.create_connection(ws_url)
# 获取目标列表
targets = json.loads(ws.recv())
urls = []
for target in targets:
if target['type'] == 'page':
urls.append(target['url'])
ws.close()
return urls
# 使用示例
if __name__ == "__main__":
urls = get_chrome_tabs_urls()
print("当前打开的标签页URL:")
for url in urls:
print(url)
import os
import json
import sqlite3
from pathlib import Path
def get_chrome_tabs_from_session():
"""
通过解析Chrome会话文件获取打开的标签页
:return: 所有标签页URL列表
"""
# Chrome会话文件路径
if os.name == 'nt': # Windows
data_path = Path(os.getenv('LOCALAPPDATA')) / 'Google' / 'Chrome' / 'User Data' / 'Default'
else: # macOS/Linux
data_path = Path.home() / 'Library' / 'Application Support' / 'Google' / 'Chrome' / 'Default'
session_file = data_path / 'Current Session'
tabs_file = data_path / 'Current Tabs'
urls = []
# 尝试从会话文件读取
try:
with open(session_file, 'r', encoding='latin-1') as f:
content = f.read()
# 简单解析URL(实际解析会更复杂)
urls = [line.split('"')[1] for line in content.split('"http') if '"http' in line]
urls = ['http' + url for url in urls]
except Exception as e:
print(f"读取会话文件失败: {e}")
return urls
# 使用示例
if __name__ == "__main__":
urls = get_chrome_tabs_from_session()
print("从会话文件获取的标签页URL:")
for url in urls:
print(url)
import win32gui
import win32con
import re
def enum_window_titles():
"""
枚举所有窗口标题(包含URL)
:return: 窗口标题列表
"""
titles = []
def callback(hwnd, _):
if win32gui.IsWindowVisible(hwnd):
title = win32gui.GetWindowText(hwnd)
if title and ' - Google Chrome' in title:
titles.append(title.replace(' - Google Chrome', ''))
return True
win32gui.EnumWindows(callback, None)
return titles
def get_chrome_tabs_from_titles():
"""
从窗口标题中提取URL(适用于部分情况)
:return: URL列表
"""
titles = enum_window_titles()
urls = []
url_pattern = re.compile(r'https?://[^\s]+')
for title in titles:
match = url_pattern.search(title)
if match:
urls.append(match.group())
return urls
# 使用示例
if __name__ == "__main__":
urls = get_chrome_tabs_from_titles()
print("从窗口标题获取的标签页URL:")
for url in urls:
print(url)
| 方法 | 优点 | 缺点 | 适用场景 | |------|------|------|----------| | PyChromeDevTools | 最可靠,能获取完整URL | 需要Chrome以调试模式启动 | 开发环境,自动化测试 | | 会话文件解析 | 不需要修改Chrome启动参数 | 解析复杂,可能不完整 | 快速获取,不需要控制浏览器 | | pywin32窗口标题 | 简单直接 | 只能获取部分URL,不完整 | 简单场景,不需要完整URL |
--remote-debugging-port=9222
参数启动sudo
获取URL后,你可以进一步:
希望这些方法能帮助你实现从Chrome获取所有打开标签页URL的需求!
没有搜到相关的文章