iMacros提取TAG CONTENT前100字符报错,求可行替代方案
问题分析与解决方法
脚本问题根源
报错TypeError: Cannot read properties of null (reading 'join')的原因是:当TAG命令提取失败(比如目标DIV不存在、内容为空),{{!EXTRACT}}会是空字符串。此时执行x.match(/^.{100}/)会返回null,调用join('')自然触发空指针错误。另外原正则^.{100}要求必须匹配恰好100个字符,若内容长度不足100,同样会返回null。
替代实现方案
方案1:修复正则逻辑(添加空值判断+匹配1-100字符)
修改EVAL语句,先检查匹配结果是否存在,同时调整正则匹配1到100个字符,兼容内容长度不足的场景:
TAG POS=1 TYPE=DIV ATTR=ID:title EXTRACT=TXT SET titlu100 EVAL("var x=\"{{!EXTRACT}}\"; var matchResult = x.match(/^.{1,100}/); matchResult ? matchResult.join('') : '';")
方案2:使用字符串截取方法(更简洁可靠)
直接用JavaScript的slice()或substring()方法截取前100字符,无需处理正则匹配失败的情况,空字符串调用该方法也不会报错:
TAG POS=1 TYPE=DIV ATTR=ID:title EXTRACT=TXT SET titlu100 EVAL("var x=\"{{!EXTRACT}}\"; x.slice(0, 100);")
或者:
TAG POS=1 TYPE=DIV ATTR=ID:title EXTRACT=TXT SET titlu100 EVAL("var x=\"{{!EXTRACT}}\"; x.substring(0, 100);")
方案3:提前判断提取结果
先检查{{!EXTRACT}}是否为空,仅在提取成功时执行截取逻辑:
TAG POS=1 TYPE=DIV ATTR=ID:title EXTRACT=TXT SET titlu100 "" SET !ERRORIGNORE YES IF {{!EXTRACT}} != "" THEN SET titlu100 EVAL("var x=\"{{!EXTRACT}}\"; x.slice(0, 100);") ENDIF SET !ERRORIGNORE NO
内容的提问来源于stack exchange,提问作者Ionut Bejinariu
相关产品推荐
相关产品推荐

