Reputation:
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:
Why am I not able to get it via JavascriptExecutor?
Upvotes: 0
Views: 245
Reputation: 403
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
Upvotes: 1