我正在使用此代码查找元素并获取其文本:
// 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前缀是什么?
我只想要文字内容。我该怎么办?
答案 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。
快乐编码?