从JavascriptExecutor返回JSONArray

时间:2018-09-29 02:47:48

标签: javascript java selenium callback selenium-chromedriver

我正在尝试从JavascriptExecutor返回JSONArray。通常,我可以转到chrome浏览器并转到chrome的dev控制台,然后键入:"___grecaptcha_cfg.clients[0]",它返回与此类似的内容:

enter image description here

尽管我尝试这样做:

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格式,我只需要能够通过正则表达式或其他解析即可: 我可以通过查找callback={}sitekey={}来找到'Cy.C',这样我就可以构建一个字符串来调用回调。

2 个答案:

答案 0 :(得分:0)

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

cv::Mat1s a = {1,2,3,4,5};
cv::Mat1s b = {6,7,8,9,10};
cv::Mat1s c = {11,12,13,14,15};

cv::Mat1f tmp = cv::Mat1f::zeros(a.size()); // or cv::Mat1f tmp = a*b+c;
for(int i=0;i<a.total();i++)
   tmp(i) = a(i)*b(i)+c(i);

cv::Mat1s d = tmp;

答案 1 :(得分:0)

抛出IEnumerable<char> query = "Text result"; string illegals = "abcet"; for (int i = 0; i < illegals.Length; i++) { query = query.Where(c => c != illegals[i]); } foreach (var item in query) { Console.Write(item); } 的原因是因为我要搜索的对象太复杂了。

由于我看到很多与类似事情有关的未回答的帖子,因此我将发布解决该问题的方法:

unknown error: Maximum call stack size exceeded

我只是在这里拉第一个属性。.从我所看到的,除非我遍历整个对象,否则我不会得到正确的顺序。