使用jQuery抓取亚马逊搜索结果价格报.find is not a function错误如何解决
问题原因
- 你在获取子元素时误用了原生DOM的
children属性而非jQuery的children()方法:$('选择器').children返回的是原生HTMLCollection集合,集合内都是原生DOM节点,原生节点没有jQuery的find方法,直接调用就会报错。 - 选择器语法错误:你要匹配的是类名为
a-price的元素,需要加类选择器前缀.,find('a-price')是匹配标签名为a-price的元素,匹配不到对应内容。 - 普通for循环中
this指向全局对象(浏览器环境下为window),而非当前遍历的结果项,$(this).find()自然无法拿到目标元素。
可行解决方案
推荐使用jQuery内置的each方法遍历,语法更简洁,也避免this指向问题:
// 搜索'keyboards'场景下的抓取代码 // 获取jQuery封装的结果项集合 const $resultItems = $('.s-main-slot.s-result-list.s-search-results.sg-row').children(); $resultItems.each(function () { // 此处this指向当前遍历的原生商品项节点,包装为jQuery对象后匹配价格元素 const $price = $(this).find('.a-price'); // 建议增加非空判断,跳过无价格的商品项 if ($price.length) { console.log($price.text().trim()); } });
如果你要保留for循环写法,修正后的代码如下:
const resultItems = $('.s-main-slot.s-result-list.s-search-results.sg-row').children(); for (let i = 0; i < resultItems.length; i++) { const $price = $(resultItems[i]).find('.a-price'); if ($price.length) { console.log($price.text().trim()); } }
内容的提问来源于stack exchange,提问作者deepfriedchicken
相关产品推荐
相关产品推荐

