如何从 Selenium 脚本获取 Firefox Web Extension 的“内部 UUID”?

d-d*_*d-d 4 python firefox selenium firefox-addon-webextensions

我需要moz-extension://internal-uuid在我的 Selenium 脚本启动后打开页面,以访问扩展的storage API,在那里设置一些首选项,该扩展稍后将读取并用于执行一些操作。但是当我使用selenium.webdriver.Firefox.add_addon(...)它时,它会返回Extension ID不同的内容,并且无法用于打开页面moz-extension://。有什么方法可以Internal UUID从我的代码中获取它(而不是通过检查手动about:debugging#addons)。或者可能有某种方式将我需要的数据从 Selenium 传递到 Web 扩展?

Adi*_*ana 5

这段代码在 Linux 和 Mac 上适用于我:

    public static void main(String[] args) throws IOException {


    FirefoxOptions options = new FirefoxOptions();

    FirefoxDriver driver = new FirefoxDriver(options);

    String userPrefsFileContent = readFile(driver.getCapabilities().getCapability("moz:profile") + "/prefs.js");

    String extensionUuid = getExtensionUuid(userPrefsFileContent);

    driver.quit();

}

private static String getExtensionUuid(String userPrefsFileContent) {

    String uuid = null;

    String[] usersPrefsList = userPrefsFileContent.split(";");

    for (String currentPref : usersPrefsList) {

        if (currentPref.contains("extensions.webextensions.uuids")) {
            uuid = currentPref.split(":")[1].replaceAll("\"", "").replace("}", "")
                    .replace(")", "").replace("\\", "");
        }

    }

    if(uuid.contains(",")) {
        uuid = uuid.split(",")[0];
    }

    return uuid;

}

private static String readFile(String pathname) throws IOException {

    File file = new File(pathname);
    StringBuilder fileContents = new StringBuilder((int) file.length());
    String lineSeparator = System.getProperty("line.separator");

    try (Scanner scanner = new Scanner(file)) {
        while (scanner.hasNextLine()) {
            fileContents.append(scanner.nextLine()).append(lineSeparator);
        }
    }
    return fileContents.toString();
}
Run Code Online (Sandbox Code Playgroud)