让Puppeteer等待给定文本在页面上显示/呈现?

时间:2018-06-11 12:44:21

标签: node.js puppeteer

我想加载页面,然后在获取内容之前等待文本(或本例中的类)呈现。

此示例有效。

async function test() {

    const browser = await puppeteer.launch();
    const page    = await browser.newPage();
    await page.goto('https://sunnythailand.com');

    // Wait until the page is fully rendered
    while (content.indexOf("scrapebot_description") < 0) {
        console.log("looking for scrapebot_description")    
        await new Promise((resolve)=>setTimeout(()=> resolve() ,1000));
        content = await page.content();
    }
    console.log("scrapebot_description FOUND!!!")   

    await browser.close();
}

我的问题是,我可以通过木偶操作者轻松完成这项工作吗?

我试过了:

    await page.waitForFunction('document.querySelector("scrapebot_description")');

但那只是永远挂在那里,什么都没发生...... (老实说,我不明白querySelector是什么,所以也许问题就在那里)

我也试过这个:

    var checkText = "scrapebot_description"
    await page.evaluate((checkText) => {
        console.log("scrapebot_description FOUND IT!!");
    },{checkText});

这也行不通。

这是在页面上呈现的最后一个等待的内容......

    <span class="hide scrapebot_description ng-binding" ng-bind="'transFrontDescription' | translate">

1 个答案:

答案 0 :(得分:2)

你可以这样做:

async function test() {
  const browser = await puppeteer.launch();
  const page    = await browser.newPage();
  await page.goto('https://sunnythailand.com');

  const selector = '.scrapebot_description' // or #scrapebot_description
  await page.waitForSelector(selector)

  console.log("scrapebot_description FOUND!!!")   

  await browser.close();
}