簡體   English   中英

為什么我會收到 Promise { 待定}?

[英]Why am I getting Promise { Pending }?

我正在使用 puppeteer 在 Javascript 中開發 web 刮板,每當我嘗試記錄元素的文本內容時,它都會顯示“Promise { Pending }”。 我看過其他答案,但沒有一個有效

const element = await page.$("#ctl00_ContentPlaceHolder1_NameLinkButton");

const text = await page.evaluate(element => element.textContent, element);

console.log(text);

你的答案是正確的。 但我認為您忘記在page.evaluate()之前添加await


有三種方法可以做到這一點。

  • 第一種方式。 就像你在做什么。 但我不喜歡它,因為您不需要調用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');
    }
});


  • 第三種方式。 您將通過 puppeteer 選擇器獲取 select 元素,然后使用await element.getProperty('textContent')獲取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

參考

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM