Node.js Puppeteer Web爬虫出现TypeError: text is not iterable错误是什么原因?
错误原因
- CSV分隔符传参错误
你调用readCsvAsync('Book_Bulk.csv', ':')时指定分隔符为冒号,但你提供的CSV文件实际是逗号分隔的,csv-parse无法正确拆分字段,导致读取到的row对象不存在CODECONTENT属性,+row.CODECONTENT就会返回NaN。 - 传入
page.type的参数类型错误
Puppeteer的page.type(selector, text)方法要求第二个参数text必须是字符串类型,你传递的是数字/NaN,方法内部迭代输入字符时就会抛出TypeError: text is not iterable的错误。
修复方案
- 修正CSV分隔符参数,把
upcData函数里的调用改成逗号分隔:
const rows = await readCsvAsync('Book_Bulk.csv', ',');
- 不要对UPC做强制转数字处理,UPC是13位数字字符串,转数字之后可能出现精度丢失,而且不符合
page.type的参数要求,修改readCsvAsync里的data事件回调:
.on('data', (row) => rows.push(row.CODECONTENT.trim())) // 保留字符串格式,去掉首尾空格
- 可选优化:在循环遍历UPC前加个校验,过滤空值,避免异常:
const allupcs = await upcData(); const validUpcs = allupcs.filter(upc => typeof upc === 'string' && upc.length === 13); for(let upc of validUpcs){ // 原有抓取逻辑 }
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

