如何从JavascriptExecutor返回JSONArray?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (106)

我试图从JavascriptExecutor返回一个JSONArray。通常我可以转到chrome浏览器并转到chrome的dev控制台并输入:"___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

知道如何克服这个问题吗?

谢谢

UPDATE

好像我用了:

 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={}因此我可以构建一个字符串调用回调。

提问于
用户回答回答于

如果返回JSON对象很复杂,则可以将其转换为字符串并返回。然后用Java代码转换JSON字符串。

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.
//
// 

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励