如何不通过字符串处理或Selenium,用RestAssured解析HTML获取Option键值映射?
解析RestAssured返回HTML中的
我通过RestAssured获取到的响应为如下HTML代码:
<html> <body> <div class="col-md-5 no-left-padding"> <select class="form-control selectpicker" id="organizationId" name="organizationId" data-live-search="true" data-none-results-text="Nothing found"> <option value="3">OptionName</option> <option value="12">AnotherOptionName</option>请问除了将其当作字符串处理之外,是否有更优的方法来解析该HTML,获取Option的value与名称的映射?另外我可以通过Selenium获取选项,但此处也不想使用该工具。
推荐使用Jsoup这个专门的HTML解析库,它是Java生态里处理HTML解析的首选工具之一,完全不需要做繁琐的字符串匹配,也不用依赖Selenium。它能自动处理不完整的HTML标签,支持CSS选择器精准定位元素,可读性和维护性都很强。
步骤1:引入Jsoup依赖
如果用Maven,在pom.xml中添加:
<dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.17.2</version> <!-- 可替换为最新稳定版 --> </dependency>
步骤2:结合RestAssured+Jsoup解析代码
import io.restassured.RestAssured; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import java.util.HashMap; import java.util.Map; public class HtmlOptionParser { public static void main(String[] args) { // 1. 用RestAssured获取目标接口的HTML响应 String htmlContent = RestAssured.get("你的目标接口URL") .then() .extract() .asString(); // 2. 用Jsoup解析HTML文档 Document doc = Jsoup.parse(htmlContent); // 3. 定位到id为organizationId的select元素 Element select = doc.getElementById("organizationId"); if (select == null) { System.out.println("未找到目标select元素"); return; } // 4. 提取所有option元素,构建value与名称的映射 Map<String, String> optionMap = new HashMap<>(); Elements options = select.select("option"); for (Element option : options) { String value = option.attr("value"); String label = option.text().trim(); optionMap.put(value, label); } // 5. 输出结果示例 optionMap.forEach((value, label) -> System.out.printf("value: %s, 名称: %s%n", value, label)); } }
补充说明
- Jsoup会自动修复不完整的HTML结构(比如你提供的代码缺少
</select>、</div>等闭合标签),无需手动补全 - 如果select元素的id不唯一,可以用CSS选择器更灵活地定位,比如
doc.select("select[name=organizationId]") - 相比字符串处理,Jsoup能轻松应对HTML结构变化的情况,代码更健壮
内容的提问来源于stack exchange,提问作者Kosh
相关产品推荐
相关产品推荐

