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);
}
}
}