Ubuntu+Python3+Selenium+Chromium下如何获取Chrome当前活动标签页?
获取Chrome当前活动标签页(适配Selenium半自动化场景)
要获取Chrome中用户实际切换后的活动标签页(而非Selenium内部标记的“活动页”),最可靠的方式是利用Chrome DevTools Protocol (CDP),它能直接和Chrome内核交互,拿到浏览器真实的标签页状态。
两种场景的实现方案
场景1:Selenium启动的Chrome浏览器
如果你的Chrome是由Selenium启动的,直接通过CDP调用Target.getTargets接口就能筛选出活动标签页:
from selenium import webdriver from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager # 启动Chrome浏览器 driver = webdriver.Chrome(service=Service(ChromeDriverManager().install())) # 模拟打开多个标签页(实际场景中由用户操作) driver.get("https://www.google.com") driver.execute_script("window.open('https://www.github.com');") driver.execute_script("window.open('https://www.stackoverflow.com');") # 调用CDP获取所有标签页/目标的信息 all_targets = driver.execute_cdp_cmd("Target.getTargets", {}) # 筛选出当前活动的页面标签页 active_tab = None for target in all_targets["targetInfos"]: # 只筛选类型为page(排除后台服务、扩展等)且处于active状态的目标 if target["type"] == "page" and target["active"]: active_tab = target break if active_tab: print(f"当前活动标签页URL: {active_tab['url']}") print(f"当前活动标签页标题: {active_tab['title']}") print(f"标签页唯一ID: {active_tab['targetId']}") else: print("未找到处于活动状态的标签页")
场景2:用户手动打开的Chrome浏览器
如果Chrome是用户手动打开的,需要先开启Chrome的远程调试模式,再让Selenium连接到这个浏览器实例:
开启远程调试:
- Windows:右键Chrome快捷方式 → 属性 → 目标栏末尾添加
--remote-debugging-port=9222(注意前面有空格),点击确定后重启Chrome。 - Mac:打开终端执行命令:
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222 - Linux:终端执行命令:
google-chrome --remote-debugging-port=9222
- Windows:右键Chrome快捷方式 → 属性 → 目标栏末尾添加
Selenium连接并获取活动标签页:
from selenium import webdriver from selenium.webdriver.chrome.options import Options # 配置Chrome选项,连接到远程调试端口 chrome_options = Options() chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222") # 连接到已打开的Chrome浏览器 driver = webdriver.Chrome(options=chrome_options) # 同样调用CDP获取活动标签页 all_targets = driver.execute_cdp_cmd("Target.getTargets", {}) active_tab = None for target in all_targets["targetInfos"]: if target["type"] == "page" and target["active"]: active_tab = target break if active_tab: print(f"当前活动标签页URL: {active_tab['url']}") print(f"当前活动标签页标题: {active_tab['title']}") else: print("未找到处于活动状态的标签页")
核心说明
Target.getTargets返回的targetInfos数组中,active字段对应Chrome真实的活动标签页状态,和用户手动切换的结果完全一致。- 整个过程不需要切换标签页,仅需读取状态即可,完全符合你的需求。
- 如果后续需要和该标签页交互,可通过
targetId调用Target.activateTarget接口,或通过窗口句柄切换,但这一步是可选的。
内容的提问来源于stack exchange,提问作者Massimo
相关产品推荐
相关产品推荐

