Я пытаюсь вернуть JSONArray из JavascriptExecutor.Обычно я могу перейти в браузер chrome и в консоль разработчика goto chrome и набрать: "___grecaptcha_cfg.clients[0]"
, который возвращает что-то похожее на это:
Хотя, когда я пытаюсь это сделать:
JavascriptExecutor js = (JavascriptExecutor) Browser;
Object o = (Object) js.executeScript("return ___grecaptcha_cfg.clients[0];");
Я получаю:
Exception in thread "main" org.openqa.selenium.WebDriverException: unknown error: Maximum call stack size exceeded (Session info: chrome=69.0.3497.100) (Driver info: chromedriver=2.41.578737 (49da6702b16031c40d63e5618de03a32ff6c197e),
platform=Windows NT 6.1.7601 SP1 x86_64) (WARNING: The server did not provide any stacktrace information) Command duration or timeout: 0 milliseconds
Есть идеи, как мне это преодолеть?
Спасибо
ОБНОВЛЕНИЕ
Кажется, если я использую:
Object o = (Object) js.executeScript("return ___grecaptcha_cfg.clients[0].Cy.C;");
Я получаю обратно:
{action=null, badge=bottomright, bind=null, callback={}, content-binding=null, pool=null, preload=null, s=null, sitekey=flkgjsfldkjgsfdg, size=invisible, stoken=null, tabindex=null, theme=null, type=image}
, что я и ищу, но Cy.C
постоянноменяется.Мне нужно иметь возможность разобрать правильное значение, которое может измениться, которое в настоящее время:
Cy.C
Я предполагаю, что значение слишком длинное?Как я могу исправить эту проблему?
Обновление 2
с использованием:
String script = "return JSON.stringify(___grecaptcha_cfg.clients[0]);";
String str = (String) js.executeScript(script);
возвращает меня unknown error: Converting circular structure to JSON
ОтПоиск вокруг кажется, что моя проблема может быть бесконечной рекурсии?Любые предложения о том, как обойти это?Мне не нужно, чтобы возвращаемый объект был в формате json, мне просто нужно иметь возможность разобрать, с помощью выражения регулярного выражения или чего-то еще: 'Cy.C', который я могу найти, ища callback={}
или sitekey={}
поэтому я могу построить строку для обратного вызова.