由于Babel移植到ES2015,木偶评估失败

时间:2018-09-16 19:23:24

标签: javascript node.js babeljs puppeteer

这很奇怪,有一段时间我以为我犯了一个非常愚蠢的错误,引发了这个错误。但是在网上查找后,我发现其他一些用户也遇到了类似的问题。

import puppeteer from 'puppeteer'
import cheerio from 'cheerio'

(async () => {
    const browser = await puppeteer.launch({
        waitUntil: 'load',
        ignoreHTTPSErrors: true,
        args: ['--disable-setuid-sandbox', '--no-sandbox'],
        headless: true
      })
    const page = await browser.newPage()
    await page.setJavaScriptEnabled(false)
    await page.goto(`https://sc.olx.com.br/florianopolis-e-regiao/autos-e-pecas/carros-vans-e-utilitarios`)
    const html = await page.evaluate(() => document.querySelector('#vehicle_brand_vb').innerHTML)
    await browser.close()

    const $ = cheerio.load(html)
    const options = $('option')
    console.log( Object.values(options)
          .map( option => option.attribs )
          .filter( val => val && val.title && val.value ))
})()

上面的代码正常工作,它基本上读取select组件的选项并将其打印为json数组。

import puppeteer from 'puppeteer'
import cheerio from 'cheerio'

(async () => {
    const browser = await puppeteer.launch({
        waitUntil: 'load',
        ignoreHTTPSErrors: true,
        args: ['--disable-setuid-sandbox', '--no-sandbox'],
        headless: true
      })
    const selector = '#vehicle_brand_vb'
    const page = await browser.newPage()
    await page.setJavaScriptEnabled(false)
    await page.goto(`https://sc.olx.com.br/florianopolis-e-regiao/autos-e-pecas/carros-vans-e-utilitarios`)
    const html = await page.evaluate(() => document.querySelector(selector).innerHTML)
    await browser.close()

    const $ = cheerio.load(html)
    const options = $('option')
    console.log( Object.values(options)
          .map( option => option.attribs )
          .filter( val => val && val.title && val.value ))
})()

在上述修改后的版本中,querySelector被提取到局部变量selector,但是如果我尝试运行它,则会得到:

(node:3569) UnhandledPromiseRejectionWarning: Error: Evaluation failed: ReferenceError: selector is not defined
    at __puppeteer_evaluation_script__:2:39
    at ExecutionContext.evaluateHandle (/Volumes/safezone/oriumtech/node_modules/puppeteer/lib/ExecutionContext.js:106:13)

在google上搜索后,最接近我发现的地方是this issue,其中用户遇到babel + puppeteer的问题(我不知道这与它有什么关系,因为代码会被罚款,只会在运行时引发错误。

如果有人有想法,请告诉我。

0 个答案:

没有答案