首页 > 解决方案 > pupetteer - 获取内部文本返回 JSHandle 前缀

问题描述

我正在使用此代码查找元素并获取其文本:


// helper method to find elements
async function findElementByText(page, tag, searchValue, conditionType) {
  const items = await page.$$(tag)
  for (var i = 0; i < items.length; i++) {
    let valueHandle = await items[i].getProperty('innerText');
    let itemText = await valueHandle.jsonValue();
    const text = getItemText(itemText);
    if(conditionType == 'contains'){
      if (text.indexOf(searchValue) !== -1) return items[i]
    }else if(conditionType == 'equals'){
      if (searchValue == text) return items[i]
    }
  }
  return false;
}

// find an element using helper
let searchResult = await findElementByText(parent, 'span', 'R$', 'contains')

// trying to get inner text
let itemText = await searchResult.getProperty('innerText');

console.log(itemText);

所以输出是JSHandle:R$ 594,60。这个 JSHandle 前缀是什么?

我只想要文本内容。我怎样才能做到这一点?

标签: typescriptpuppeteer

解决方案


您的findElementByText函数正在返回items[i],它是ElementHandlepage.$$(selector). 然后你调用getPropertythis ElementHandle,它又返回一个jsHandle. 当你得到console.log对象时。要从 jsHandle 获取文本,您必须通过调用.jsHandlejsHandlejsHandlejsonValue()

所以总而言之:

let itemJsHandle = await searchResult.getProperty('innerText');
let itemText = await itemJsHandle.jsonValue();

查看 puppeteer 文档:puppeteer

快乐编码


推荐阅读