我正在使用puppeteer使用Javascript进行网络抓取,每当我尝试记录元素的文本内容时,它都会显示“ Promise {Pending}”。我看了其他答案,但都没有用
const element = await page.$("#ctl00_ContentPlaceHolder1_NameLinkButton");
const text = await page.evaluate(element => element.textContent, element);
console.log(text);
答案 0 :(得分:0)
您的答案是正确的。但我认为您忘记在await
之前添加page.evaluate()
。
有三种方法可以实现。
page.evaluate()
即可获得.textContent
const puppeteer = require('puppeteer');
puppeteer.launch().then(async browser => {
const elementId = 'container';
const page = await browser.newPage();
await page.goto('https://metwally.me');
const element = await page.$(`#${elementId}`);
if (element) {
const text = await page.evaluate(element => element.textContent, element);
console.log(text);
} else {
// handle not exists id
console.log('Not Found');
}
});
page.evaluate()
并使用JavaScript Dom获取textContent
。像document.getElementById(elementId).textContent
。const puppeteer = require('puppeteer');
puppeteer.launch().then(async browser => {
const elementId = 'container';
const page = await browser.newPage();
await page.goto('https://metwally.me');
const text = await page.evaluate(
elementId => {
const element = document.getElementById(elementId);
return element ? element.textContent : null;
}, elementId);
if (text !== null) {
console.log(text);
} else {
// handle not exists id
console.log('Not Found');
}
});
textContent
获取await element.getProperty('textContent')
属性,然后从textContent._remoteObject.value
获取值。const puppeteer = require('puppeteer');
puppeteer.launch().then(async browser => {
const elementId = 'container';
const page = await browser.newPage();
await page.goto('https://metwally.me');
const element = await page.$(`#${elementId}`);
if (element) {
const textContent = await element.getProperty('textContent');
const text = textContent._remoteObject.value;
console.log(text);
} else {
// handle not exists id
console.log('Not Found');
}
});
注意:所有这些示例在我的机器上都能正常工作。
os ubuntu 20.04
nodejs v10.19.0
puppeteer v1.19.0
参考