簡體   English   中英

解析在 Selenium 中執行的 javascript 的響應

[英]Parse response of javascript that was executed in Selenium

我正在使用 java+selenium 自動化框架,我想嘗試一些不同的東西——在現有的 @Test 中使用 javascript 捕獲一些網絡流量。 Javascript 因為我在 browsermob 上遇到了太多問題。 我想捕獲一個或兩個網絡流量響應; 然后最終將其發送/存儲在 S3 之類的地方,以便由於傳播延遲而進行進一步的數據庫驗證。

得到網絡響應后,我被阻止了。

我已經將它作為列表 object 獲得,並且可以使用 if 語句循環遍歷它以獲得我想要的內容。

    JavascriptExecutor js = (JavascriptExecutor) driver;
    String javaScriptScript = "var performance = window.performance || window.mozPerformance || "
                              + "window.msPerformance || window.webkitPerformance || "
                              + "{}; var network = performance.getEntries() || {}; return JSON.stringify(network);";

    List<Object> results = (List<Object>) js.executeScript(javaScriptScript)


    for (Object result : results) {
        if (result.toString().contains("foo")) {
            System.out.println("foo=" + result.toString()); // foo = "name": "foo"
        }
        if (result.toString().contains("bar")) { // bar = "name": "bar"
            System.out.println("bar=" + result.toString());
        }
    }`

我什至發現我可以從以下位置更新 js: return network; to: return JSON.stringify(network);

雖然到目前為止我對此感到滿意,但我覺得我應該在這里使用 json。 所以我可以得到這個實現,它給出了更漂亮的 output:

    String results = (String) js.executeScript(javaScriptScript);

    Gson gson = new GsonBuilder().setPrettyPrinting().create();
    JsonParser jp = new JsonParser();
    JsonElement je = jp.parse(results);
    String prettyJsonString = gson.toJson(je);
    System.out.println(prettyJsonString);`

但是我不太舒服地遍歷 json 與列表,並挑選出我需要的東西(例如,名稱:foo),即使它應該更容易?

什么是最好的方法,如果是 json,我如何迭代和捕獲我需要的部分。

TIA。

https://stackoverflow.com/a/18998203/1387701

下面的示例代碼:

import org.json.*;

String jsonString = ... ; //assign your JSON String here
JSONObject obj = new JSONObject(jsonString);
String pageName = obj.getJSONObject("pageInfo").getString("pageName");

JSONArray arr = obj.getJSONArray("posts"); // notice that `"posts": [...]`
for (int i = 0; i < arr.length(); i++)
{
    String post_id = arr.getJSONObject(i).getString("post_id");
    ......
}

基本上,我使用 JSON 路徑從 JSON 獲取特定值。

這是一個示例用法

<dependency>
    <groupId>com.jayway.jsonpath</groupId>
    <artifactId>json-path</artifactId>
    <version>2.5.0</version>
</dependency>



 String json = "...";
    Object document = Configuration.defaultConfiguration().jsonProvider().parse(json);
    
    String author0 = JsonPath.read(document, "$.store.book[0].author");
    String author1 = JsonPath.read(document, "$.store.book[1].author");

在這里您將獲得更多示例用法https://github.com/json-path/JsonPath

為了獲得 JSON 路徑,我使用了這個對我來說很靈活的工具

https://jsonpathfinder.com/

暫無
暫無

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

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