Answer a question

I need to open moz-extension://internal-uuid page after my Selenium script is started to have an access to the extension's storage API, to set some prefs there, that this extension will read later and use to do some actions. But when I use selenium.webdriver.Firefox.add_addon(...) it returns the Extension ID that differs and can't be used to open the moz-extension:// page. Is there any way to get this Internal UUID from my code (not manually by inspecting about:debugging#addons). Or may be some way to pass the data I need from Selenium to Web Extension?

Answers

This code is working for me in Linux and 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();
}
Logo

Python社区为您提供最前沿的新闻资讯和知识内容

更多推荐