我正在尝试从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
关于如何克服这个问题的任何想法吗?
谢谢
更新
如果我使用:
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',这样我就可以构建一个字符串来调用回调。
答案 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
我只是在这里拉第一个属性。.从我所看到的,除非我遍历整个对象,否则我不会得到正确的顺序。