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

如何用JavaScript/Windows Batch提取HTML中的IPA值?代码报错求助

解决Batch+JScript混合代码提取HTML IPA音标报错问题

问题描述

要从剑桥词典页面的HTML中提取IPA音标buːm,编写的Windows Batch与JScript混合代码运行时提示Microsoft JScript runtime error: 对象不支持此属性或方法。

相关HTML片段:

</span><span class="pron dpron">/<span class="ipa dipa lpr-2 lpl-1">buːm</span>/</span></span></div><div class="pos-body">

原报错代码:

@if (@CodeSection == @Batch) @then

@echo off
setlocal

curl https://dictionary.cambridge.org/de/worterbuch/englisch/boom >phoneme.html

set "htmlfile=phoneme.html"

rem // invoke JScript hybrid code and capture its output
for /f %%I in ('cscript /nologo /e:JScript "%~f0" "%htmlfile%"') do set "converted=%%I"

echo %converted%

rem // end main runtime
PAUSE
goto :EOF

@end // end batch / begin JScript chimera

var fso = WSH.CreateObject('scripting.filesystemobject'),
    DOM = WSH.CreateObject('htmlfile'),
    htmlfile = fso.OpenTextFile(WSH.Arguments(0), 1),
    html = htmlfile.ReadAll();

DOM.write(html);
htmlfile.Close();

var scrape = DOM.getElementsByTagName('pron dpron').getElementsByClassName('ipa dipa lpr-2 lpl-1')[0].innerText;
WSH.Echo(scrape.match(/^.*=\s+(\S+).*$/)[0]);

错误原因分析

  1. 标签名与类名混淆:getElementsByTagName是按HTML标签名(如span、div)查找元素,而pron dpron是元素的class属性值,不能用此方法查找。
  2. 集合链式调用错误:getElementsByClassName返回的是元素集合,无法直接链式调用另一个getElementsByClassName,必须先取集合中的具体元素。
  3. 多余正则匹配:目标文本就是buːm,无需用正则表达式额外处理,反而会导致匹配失败。

修正后的代码

@if (@CodeSection == @Batch) @then

@echo off
setlocal

curl https://dictionary.cambridge.org/de/worterbuch/englisch/boom >phoneme.html

set "htmlfile=phoneme.html"

rem // invoke JScript hybrid code and capture its output
for /f %%I in ('cscript /nologo /e:JScript "%~f0" "%htmlfile%"') do set "converted=%%I"

echo %converted%

rem // end main runtime
PAUSE
goto :EOF

@end // end batch / begin JScript chimera

var fso = WSH.CreateObject('scripting.filesystemobject'),
    DOM = WSH.CreateObject('htmlfile'),
    htmlfile = fso.OpenTextFile(WSH.Arguments(0), 1),
    html = htmlfile.ReadAll();

DOM.write(html);
htmlfile.Close();

// 先获取外层class为pron dpron的span元素
var pronContainer = DOM.getElementsByClassName('pron dpron')[0];
// 在容器内查找目标IPA元素并提取文本
var scrape = pronContainer.getElementsByClassName('ipa dipa lpr-2 lpl-1')[0].innerText;
// 直接输出提取到的音标
WSH.Echo(scrape);

关键修改点

  • 替换getElementsByTagName('pron dpron')为getElementsByClassName('pron dpron'),正确按class查找元素。
  • 拆分元素查找步骤,先获取外层容器元素,再在容器内查找目标元素,避免集合直接链式调用的错误。
  • 移除多余的正则匹配代码,直接输出提取到的innerText,确保得到正确的buːm音标。

内容的提问来源于stack exchange,提问作者Franklyn W. R. Tigier

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 11:38:19