pupetteer-获取内部文本返回JSHandle前缀

时间:2019-11-22 20:23:52

标签: typescript puppeteer

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


// 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前缀是什么?

我只想要文字内容。我该怎么办?

1 个答案:

答案 0 :(得分:2)

您的findElementByText函数返回items[i],它是ElementHandle返回的page.$$(selector)。然后,您在此getProperty上调用ElementHandle,这反过来又返回jsHandle。当console.log jsHandle时,您会得到jsHandle对象。要从jsHandle获取文本,您必须通过调用jsHandle获得jsonValue()的JSON表示形式。

因此,结论:

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

查看伪造者文档:puppeteer

快乐编码?