public void configure()

in core/src/main/java/org/apache/stormcrawler/protocol/selenium/RemoteDriverProtocol.java [66:128]


    public void configure(Config conf) {
        super.configure(conf);

        final String userAgentString = getAgentString(conf);

        // custom capabilities
        final Map<String, Object> confCapabilities =
                (Map<String, Object>) conf.get("selenium.capabilities");

        substituteUserAgent(confCapabilities, userAgentString);

        // see https://github.com/SeleniumHQ/selenium/wiki/DesiredCapabilities
        final DesiredCapabilities capabilities = new DesiredCapabilities();

        confCapabilities.forEach((k, v) -> capabilities.setCapability(k, v));

        LOG.info("Configuring Selenium with {}", capabilities);

        // load addresses from config
        List<String> addresses = ConfUtils.loadListFromConf("selenium.addresses", conf);
        if (addresses.size() == 0) {
            throw new RuntimeException("No value found for selenium.addresses");
        }

        final boolean tracing = ConfUtils.getBoolean(conf, "selenium.tracing", false);

        // TEMPORARY: draw attention to config change
        for (String p : new String[] {"implicitlyWait", "pageLoadTimeout", "scriptTimeout"}) {
            if (conf.containsKey("selenium." + p)) {
                String message = "selenium." + p + " is deprecated. Please use selenium.timeouts!";
                LOG.error(message);
                throw new RuntimeException(message);
            }
        }

        for (String cdaddress : addresses) {
            try {
                RemoteWebDriver driver =
                        new RemoteWebDriver(new URL(cdaddress), capabilities, tracing);
                // setting timouts
                // see https://www.browserstack.com/guide/understanding-selenium-timeouts
                Timeouts touts = driver.manage().timeouts();
                Map<String, Number> timeouts = (Map<String, Number>) conf.get("selenium.timeouts");
                if (timeouts != null) {
                    long implicitTimeout = timeouts.getOrDefault("implicit", -1).longValue();
                    long pageLoadTimeout = timeouts.getOrDefault("pageLoad", -1).longValue();
                    long scriptTimeout = timeouts.getOrDefault("script", -1).longValue();
                    if (implicitTimeout != -1) {
                        touts.implicitlyWait(Duration.ofMillis(implicitTimeout));
                    }
                    if (pageLoadTimeout != -1) {
                        touts.pageLoadTimeout(Duration.ofMillis(pageLoadTimeout));
                    }
                    if (scriptTimeout != -1) {
                        touts.scriptTimeout(Duration.ofMillis(scriptTimeout));
                    }
                }
                drivers.add(driver);
            } catch (Exception e) {
                LOG.error(e.getLocalizedMessage(), e);
            }
        }
    }