Puppeteer调用自定义函数报错:无效选择器问题咨询
问题分析与解决
错误原因
你调用getTextExceptChild时参数传递错误:函数定义的第一个参数是Puppeteer的page对象,但你传入的是timeItem(一个HTMLLIElement类型的DOM元素)。当这个DOM元素被传到page.evaluate中时,会被自动转换为字符串[object HTMLLIElement],当成选择器使用,从而触发"无效选择器"的错误。
解决方案
根据你的实际需求,有两种处理方式:
方式1:基于整个页面查询选择器
修正调用参数,将Puppeteer的page对象作为第一个参数传入:
const selector = 'a > strong'; console.log(await getTextExceptChild(page, selector));
方式2:在指定DOM元素下查询选择器
如果你需要在timeItem这个元素范围内查询选择器,需要修改函数逻辑,使其支持接收ElementHandle类型的元素对象:
// 修改后的函数 async function getTextFromElement(elementHandle, selector) { const text = await elementHandle.evaluate((el, sel) => { const targetElement = el.querySelector(sel); return targetElement ? targetElement.textContent.trim() : null; }, selector); return text; } // 调用方式不变 const selector = 'a > strong'; console.log(await getTextFromElement(timeItem, selector));
内容的提问来源于stack exchange,提问作者allNighter
相关产品推荐
相关产品推荐

