user8210794
user8210794

Reputation:

Selenium JavascriptExecutor doesnt return anything

I initialized a JavascriptExecutor but it doesn't return me what I want. Object is always null.

SeleniumDriver driver = new SeleniumDriver(DriverType.ChromeDriver);
    driver.get("https://www.xxxxxx.info/");
    driver.waitForPageToBeLoaded();
        
    JavascriptExecutor js = (JavascriptExecutor) driver.getWebDriver();
    Object ob = js.executeScript("___grecaptcha_cfg.clients[0]");

Here what it gives me in console:

enter image description here

Why am I not able to get it via JavascriptExecutor?

Upvotes: 0

Views: 245

Answers (1)

Your js script should return it.try the below changes

Object ob = js.executeScript("return ___grecaptcha_cfg.clients[0]");

so that your code will be like

SeleniumDriver driver = new SeleniumDriver(DriverType.ChromeDriver);
driver.get("https://www.xxxxxx.info/");
driver.waitForPageToBeLoaded();
    
JavascriptExecutor js = (JavascriptExecutor) driver.getWebDriver();
Object ob = js.executeScript("return ___grecaptcha_cfg.clients[0]");

Since it is the JS object json it throws circular reference exception

You can convert to json using below js code

const getCircularReplacer = () => {
  const seen = new WeakSet();
  return (key, value) => {
    if (typeof value === "object" && value !== null) {
      if (seen.has(value)) {
        return;
      }
      seen.add(value);
    }
    return value;
  };
};
JSON.stringify(___grecaptcha_cfg.clients[0], getCircularReplacer());

Since it is cross origin iframe you can use it as chrome blocks it as shown in image below

enter image description here

Upvotes: 1

Related Questions