You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JMeter中用正则提取指定下拉框的option名称?

在JMeter中提取无效XML格式HTML的下拉列表值

针对无法用XPath提取的情况,以下几种方法可实现从id为tutu的<select>标签中提取所有<option>的name属性值:

方法1:CSS/JQuery提取器(推荐)

CSS选择器不依赖XML有效性,是最简便的方案:

  • 在目标请求下添加「CSS/JQuery提取器」
  • 配置参数:
    • 引用名称:tutu_names(自定义变量前缀)
    • CSS/JQuery表达式:select#tutu option(定位tutu下的所有option)
    • 属性:name(指定提取的属性名)
    • 匹配数字:-1(提取所有匹配项,写1则只取第一个)

配置完成后,JMeter会生成变量:tutu_names_1=name1、tutu_names_2=name2、tutu_names_3=name3,以及tutu_names_matchNr=3(匹配总数)。

方法2:正则表达式提取器

通过正则定位目标内容:

  • 在目标请求下添加「正则表达式提取器」
  • 配置参数:
    • 引用名称:tutu_names
    • 正则表达式:<select id="tutu"[\s\S]*?option selected name="(.*?)"(匹配tutu块内的option的name值)
    • 模板:$1$(提取括号内的内容)
    • 匹配数字:-1
    • 勾选「单行」模式(让.匹配换行符)

方法3:JS223提取器(Groovy脚本)

用脚本灵活处理非标准HTML:

  • 在目标请求下添加「JS223提取器」,选择语言为Groovy
  • 输入以下脚本:
def response = prev.getResponseDataAsString()
// 截取id为tutu的select区块
def tutuMatcher = response =~ /<select id="tutu"[\s\S]*?<\/select>/
if (tutuMatcher.find()) {
    // 提取区块内所有name属性值
    def nameMatcher = tutuMatcher.group() =~ /name="(.*?)"/
    def index = 1
    while (nameMatcher.find()) {
        vars.put("tutu_names_${index}", nameMatcher.group(1))
        index++
    }
    vars.put("tutu_names_matchNr", String.valueOf(index - 1))
}

内容的提问来源于stack exchange,提问作者Olof

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 20:55:31