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

如何在Python Selenium中激活带Browser Action的Chrome扩展?

问题描述

为满足测试需求,需在Selenium测试中激活一款Chrome扩展。已在扩展的manifest.json中配置_execute_browser_action快捷键(Windows为Ctrl+I,Mac为Control+I),手动触发正常,但用Selenium的ActionChains模拟快捷键无效果;尝试用pyautogui点击扩展图标也失败。优先寻求无需pyautogui的解决方案,优先修复ActionChains的问题。


方案一:修正ActionChains快捷键触发逻辑

问题根源

ActionChains的按键操作默认作用于当前页面的焦点元素,而扩展的全局快捷键需要确保浏览器窗口处于激活状态,且焦点未被页面内的输入框等元素抢占。

修复代码

from selenium import webdriver
from selenium.webdriver import ActionChains, Keys
import time

options = webdriver.ChromeOptions()
options.add_argument("--load-extension=./my-extension-chromium")
options.add_argument("--start-maximized")
driver = webdriver.Chrome(options=options)

url = "http://localhost:9000/"
driver.get(url)

# 点击页面空白处,确保焦点离开页面元素,让浏览器窗口获得全局焦点
driver.find_element("tag name", "body").click()
time.sleep(0.5)  # 短暂等待确保焦点切换完成

# 触发快捷键
ActionChains(driver)\
    .key_down(Keys.CONTROL)\
    .send_keys("i")\
    .key_up(Keys.CONTROL)\
    .perform()

# 若Mac系统实际需要Command+I触发,将Keys.CONTROL替换为Keys.COMMAND

方案二:直接调用扩展核心功能(最优解)

既然拥有扩展源码,完全可以跳过快捷键/点击图标的环节,直接通过Selenium执行扩展的后台脚本触发核心逻辑:

步骤1:获取扩展ID

扩展加载后,访问chrome://extensions/,开启开发者模式,即可看到扩展的唯一ID(格式类似abcdefghijklmnopqrstuvwxyzabcdef)。

步骤2:执行扩展脚本

from selenium import webdriver
import time

options = webdriver.ChromeOptions()
options.add_argument("--load-extension=./my-extension-chromium")
options.add_argument("--start-maximized")
driver = webdriver.Chrome(options=options)

url = "http://localhost:9000/"
driver.get(url)

# 替换为你的扩展ID
EXTENSION_ID = "abcdefghijklmnopqrstuvwxyzabcdef"

# 打开扩展后台页面,执行核心激活函数(假设后台有activateExtension()函数)
driver.get(f"chrome-extension://{EXTENSION_ID}/background.html")
driver.execute_script("activateExtension();")

# 若扩展功能在popup中,可打开popup页面并触发对应操作
# driver.get(f"chrome-extension://{EXTENSION_ID}/popup.html")
# driver.execute_script("document.getElementById('activate-btn').click();")

方案三:用Selenium直接定位扩展图标点击(替代pyautogui)

pyautogui依赖屏幕坐标稳定性差,用Selenium直接定位浏览器原生元素实现点击:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

options = webdriver.ChromeOptions()
options.add_argument("--load-extension=./my-extension-chromium")
options.add_argument("--start-maximized")
driver = webdriver.Chrome(options=options)

url = "http://localhost:9000/"
driver.get(url)
time.sleep(1)

# 点击右上角拼图样式的扩展按钮
extension_btn = driver.find_element(By.CSS_SELECTOR, "div[aria-label='扩展']")
extension_btn.click()
time.sleep(0.5)

# 点击你的扩展图标(替换为你的扩展名称)
my_extension = driver.find_element(By.XPATH, "//div[contains(text(), '你的扩展名称')]")
my_extension.click()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 16:27:47