如何使用selenium 4 - Chrome开发工具获取网络调用的有效负载?(Java)

q8l4jmvw  于 2023-02-18  发布在  Java
关注(0)|答案(1)|浏览(173)

我想使用Selenium 4 Chrome开发工具概念获取网络调用的有效负载部分。我使用带有java - eclipse的Selenium作为ide,使用Maven作为运行时环境。
想知道用于获取网络有效负载的命令

j8yoct9x

j8yoct9x1#

你可以使用chrome dev工具库与selenium 4.

步骤1:获取所有网络请求。

ArrayList<Request> requests = new ArrayList<>();
    
    chromeDevTools.addListener(Network.requestWillBeSent(),
            entry -> {
                
                requests.add(entry.getRequest());
                
                
    });

步骤2:迭代requests列表,获取每个post请求的post数据,使用正则表达式拆分字符串,并进一步应用正则表达式获取name字段。要获取每个name字段的值,请使用布尔标记。在map中捕获每一对。

for(Request r:requests){
    if(r.getMethod().equals("POST") && r.getHasPostData().isPresent() && r.getHasPostData().get()) {
        
            HashMap<String,String> reqPostDataM = new HashMap<>();
            
            //parse multipart form data from input stream
            //customrequest.setpostData(r.getPostData().get());
            
            String[] postDataNL = r.getPostData().get().split("\r\n");
            int reqBodyKeyFlag = 0;
            ArrayList<String> keys = new ArrayList<>();
            ArrayList<String> values = new ArrayList<>();
            for(String eachLine:postDataNL) {
                eachLine = eachLine.trim();
                
                //System.out.println(eachLine);
                
                String reqBodyKey = getNameFieldsRegex(eachLine);
                
                
                
                if(reqBodyKey.length()>0) {
                    if(reqBodyKeyFlag==0)
                    {
                        reqBodyKey = reqBodyKey.substring(1,reqBodyKey.length()-1);
                        keys.add(reqBodyKey);
                        reqBodyKeyFlag = 1;
                    }
                    
                }
                
                else if(reqBodyKeyFlag==1) {
                    if(eachLine.length()>0) {
                        System.out.println(eachLine);
                        values.add(eachLine);
                        reqBodyKeyFlag = 0;
                    }
                }
                
                
            }
            
            System.out.println("keys_Size: "+keys.size());
            System.out.println("values_Size: "+values.size());

            for(int itr=0;itr<keys.size();itr++) {
                reqPostDataM.put(keys.get(itr), values.get(itr));
            }

 }

请求后有效负载格式:

------WebKitFormBoundarySOSBRnoiHIwWKoVB
Content-Disposition: form-data; name="firstname"

Nishant 
------WebKitFormBoundarySOSBRnoiHIwWKoVB
Content-Disposition: form-data; name="lastname"

Bhat
------WebKitFormBoundarySOSBRnoiHIwWKoVB
Content-Disposition: form-data; name="email"

bhatianishant@gmail.com
------WebKitFormBoundarySOSBRnoiHIwWKoVB
Content-Disposition: form-data; name="telephone"

9012054765
------WebKitFormBoundarySOSBRnoiHIwWKoVB--

编辑获取名称字段正则表达式函数:

public static String getNameFieldsRegex(final String input) {
            // Compile regular expression
            final Pattern pattern = Pattern.compile("\"[^\"]*\"", Pattern.CASE_INSENSITIVE);
            // Match regex against input
            final Matcher matcher = pattern.matcher(input);
            // Use results...
            
            String  ans = "";
           // System.out.println(input);
            while(matcher.find()) {
                int start_idx = matcher.start();
                int len = input.length();
                
                System.out.println(start_idx);
                
                ans = input.substring(start_idx);
                break;
            }
            
            return ans;
        }

相关问题