簡體   English   中英

從JavascriptExecutor返回JSONArray

[英]Returning a JSONArray from JavascriptExecutor

我正在嘗試從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.
//
// 

unknown error: Maximum call stack size exceeded原因unknown error: Maximum call stack size exceeded拋出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);

我只是在這里拉第一個屬性。從我所看到的,除非我遍歷整個對象,否則我將無法獲得正確的順序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM