Puppeter waitfornavigation在确定页面url时的可靠性

goqiplq2  于 2021-09-29  发布在  Java
关注(0)|答案(0)|浏览(584)

我有一个Puppeter node js应用程序,给定一个起始url,它跟随url并从它标识的每个页面中获取窗口的url。原来我用的是 setInterval 每250毫秒获取一次当前的url,但却偶然发现了 waitForNavigation 选择和需要知道我所拥有的是否可靠?
给定起始url,我需要识别所有页面,以及Puppeter通过的页面,然后使用 setTimeout 假设 puppet 演员在给定的时间段内没有重定向到新页面,假设没有更多的重定向。
意志 page.waitForNavigation 为这种预期行为工作?
我目前的工作是:

let evalTimeout;

// initiate a Puppeteer instance with options and launch
const browser = await puppeteer.launch({
  args: argOptions,
  headless: (config.puppeteer.run_in_headless === 'true') ? true : false
});

// launch a new page
const page = await browser.newPage();

// go to a URL
await page.goto(body.url);

// create a function to inject into the page to scrape data
const currentUrl = () => {
  return window.location.href;
}

// log the current page every 250ms
async function scrapePageUrl (runOnce = false) {
  try {
    console.log('running timeout...')

    if (!runOnce) {
      evalTimeout = setTimeout(() => {
        console.log('6s reached, running omce')
        scrapePageUrl(true) // assumes no more redirections after 6s, get final URL
      }, 6000)
    }

    const url = await page.evaluate(currentUrl);
    if (!runOnce) await page.waitForNavigation();

    console.log(`url: ${url}`)

    if (!runOnce) {
      clearTimeout(evalTimeout)
      scrapePageUrl()
    }

  } catch (err) { }
}

scrapePageUrl()

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题