node.js - Page.evaluate() 不会在 Promise 链中执行

标签 node.js promise puppeteer

刚刚开始使用 Puppeteer。尝试解析页面,但评估方法无法正常工作。

var Browser
var Page
var Result
puppeteer.launch()
  .then(function (browser) {
    console.log('Browser Created\nCreating Blank Page')
    Browser = browser
    return Browser.newPage()
  })
  .then(function (page) {
    console.log('Page Created\nVisiting URL')
    Page = page
    return Page.goto(URL)
  })
  .then(function (resp) {
    console.log('Website Loaded')
    return Page.evaluate(function () {
      // Completely Sync Stuff
      console.log('Evaluating Selectors')
      var myElems = document.getElementsByClassName('challenge-type light')
      Result = myElems
    })
  })
  .then(function (val) {
    console.log(Result)
    console.log('Done! Exiting')
    Browser.close()
    process.exit()
  })
  .catch(function (err) {
    Browser.close()
    console.log(err)
    process.exit(1)
  })

输出:

Browser Created
Creating Blank Page
Page Created
Visiting URL
Website Loaded
undefined
Done! Exiting

可能是什么错误?更喜欢没有异步/等待的解决方案。

编辑:“评估选择器”也没有记录到控制台,因此代码永远不会到达那里,这是我担心的问题。

最佳答案

我会仔细检查

document.getElementsByClassName('challenge-type light') 

返回结果。

我相信您使用的是 headless 浏览器,因此有时元素可能无法按您的预期加载。

关于node.js - Page.evaluate() 不会在 Promise 链中执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54029554/

相关文章:

Puppeteer:如何在page.goto().catch中获取httpcode?

node.js - 强类型语言和弱类型语言在测试上的区别

javascript - 在返回之前如何格式化 json 数组中的所有电话号码

javascript - Promise 加数字返回 Promise

javascript - 嵌套 .then() 的 Promise

puppeteer - 如何使用 Puppeteer 在选项卡之间切换?

node.js - 如何允许特定服务器访问我的API?

多个现有构造函数的 JavaScript 通用方法

javascript - 如何打破多个Ajax promise 链?

node.js - puppeteer.use(....) 不是 Puppeteer 中的函数错误 - Nodejs