我正在尝试从JavascriptExecutor返回一个JSONArray。通常我可以进入chrome浏览器,进入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={}
找到它,这样我就可以构建一个字符串来调用回调。
发布于 2018-09-30 14:48:17
unknown error: Maximum call stack size exceeded
抛出的原因是因为我搜索的对象太复杂了。
因为我看到了很多关于类似事情的未回复的帖子,所以我会把我为解决这个问题所做的事情贴出来:
String script = "for (var prop in ___grecaptcha_cfg.clients[0])"
+"{"
+" return '___grecaptcha_cfg.clients[0].' + prop"
+"}";
System.out.println(script);
Object objects = (Object) js.executeScript(script);
System.out.printl(objects);
我只是在这里拉出第一个属性..从我看到的情况来看,除非我迭代了整个对象,否则我不会得到正确的顺序。
发布于 2018-09-29 14:16:33
如果返回的JSON对象很复杂,可以将其转换为字符串并返回。然后将JSON字符串转换为JAVA代码。
String script = "return JSON.stringify(___grecaptcha_cfg.clients[0].Cy.C);";
String str = (String) js.executeScript(script);
// Using JSON-Java lib to convert JSON string to JSON Java Object.
//
//
https://stackoverflow.com/questions/52564652
复制相似问题