如何使用selenium从url中提取特定格式的日期?

sbtkgmzw  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(409)

使用:

String URL = driver.getCurrentUrl();

我得到这样的结果:

firstname=&lastname=&sex=Male&exp=1&datepicker=11%2F30%2F2020&photo=&continents=asia&submit=

我必须提取日期并按以下格式打印:yyyy-mm-dd,即得到2020-11-30。有人知道吗?谢谢!

bn31dyow

bn31dyow1#

我假设getcurrenturl()返回完整的url,而不仅仅是查询字符串。
在高层次上,我认为这个过程
url解码字符串
将查询字符串解析为Map
将datepicker值从mm dd yyyy转换为yyyy mm dd,即iso8601
步骤1和步骤2可以通过一个库来完成,比如okhttp

final HttpUrl currentUrl = HttpUrl.parse(driver.getCurrentUrl());
if (currentUrl != null) {
    final String inputDate = currentUrl.queryParameter("datepicker");
}

如果您不想使用该库,那么在另一个问题中有一些零依赖选项。
步骤3有一些选项,这取决于您需要的健壮程度。
直接字符串操作。
使用库或内置日期工具。
如果这无关紧要的话,字符串操作将是最简单的。只需创建一个带有yyyy、'-'和mm-dd的新字符串。
缺点是它没有提供任何验证日期的方法。
这是一个图书馆选项

SimpleDateFormat parseFormatter = new SimpleDateFormat("dd-MM-yyyy");
Date date = parseFormatter.parse(inputDate);

SimpleDateFormat outputFormatter = new SimpleDateFormat("yyyy-MM-dd");

String date = outputFormatter.format(date);
System.out.println(date);
anauzrmj

anauzrmj2#

您可以创建 Map<String, String> paramMap 超出给定的url字符串。
处理url字符串,并将参数名作为键和参数值作为值存储到 Map .
获取密钥的值, datepicker 从这个 Map 并将其解析为日期对象,并将日期对象格式化为所需格式的字符串。自api发布之日起 java.util 以及它们的格式化api, SimpleDateFormat 我建议您使用现代的日期时间api。在trail:date-time了解有关现代日期时间api的更多信息。
我写了两种方法的解决方案,现代的 java.time 日期时间api以及遗留的 java.util 日期时间api。

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.Map;

public class Main {
    public static void main(String[] args) throws UnsupportedEncodingException, ParseException {
        String strUrl = "https://www.google.com?firstname=&lastname=&sex=Male&exp=1&datepicker=11%2F30%2F2020&photo=&continents=asia";
        Map<String, String> map = getParams(strUrl);
        String strDate = map.get("datepicker");

        // Using Java-8
        System.out.println(LocalDate.parse(strDate, DateTimeFormatter.ofPattern("MM/dd/uuuu")));

        // Using legacy API
        DateFormat sdfInput = new SimpleDateFormat("MM/dd/yyyy");
        DateFormat sdfOutput = new SimpleDateFormat("yyyy-MM-dd");
        System.out.println(sdfOutput.format(sdfInput.parse(strDate)));
    }

    public static Map<String, String> getParams(String strUrl) throws UnsupportedEncodingException {
        Map<String, String> paramMap = new HashMap<String, String>();
        String[] parts = URLDecoder.decode(strUrl, StandardCharsets.UTF_8.name()).split("\\?");
        if (parts.length == 2) {
            String[] params = parts[1].split("&");
            for (String param : params) {
                String[] nameVal = param.split("=");
                if (nameVal.length == 2) {
                    String name = nameVal[0];
                    String value = nameVal[1];
                    paramMap.put(name, value);
                }
            }
        }
        return paramMap;
    }
}

输出:

2020-11-30
2020-11-30

相关问题