我正在AWS Lambda上使用chromeless无头浏览器。

我正在尝试弄清楚如何对内容进行分页,但是我是Node和async / await的新手。

这是我的代码:

const Chromeless = require('chromeless').default

async function run() {
  const chromeless = new Chromeless({})

  var results = [];

  const instance = await chromeless
    .goto('https://www.privacyshield.gov/list')

  for (i = 0; i < 3; i++)
  {
    console.log('in for');
    instance
    .html()
    .click('a.btn-navigate:contains("Next Results")')
    .wait(3000)
    results.push(html)
  }

  await chromeless.end()
}

run().catch(console.error.bind(console))


但是我得到了错误:

TypeError: Cannot read property 'html' of undefined


这意味着没有在等待之外定义实例。我迫不及待地要在每个for循环迭代中创建单独的实例,因为我会失去在页面上的位置。

最佳答案

花了一些时间才弄清楚,但是很有趣,这也是我第一次从节点等待异步代码。

const { Chromeless } = require('chromeless')

async function run() {
  const chromeless = new Chromeless()
  let curpos = chromeless
    chromeless.goto('https://www.privacyshield.gov/list')
    .press(13)
    .wait(3000);
  const page1 = await curpos.html()

  curpos = curpos.click('a.btn-navigate')
    .wait(3000);
  const page2 = await curpos.html()

  curpos = curpos.click('a.btn-navigate')
    .wait(3000);
  const page3 = await curpos.html()

  console.log(page1)
  console.log("\n\n\n\n\n\n\n")
  console.log(page2)
  console.log("\n\n\n\n\n\n\n")
  console.log(page3)

  await chromeless.end()
}

run().catch(console.error.bind(console))


希望您能从那里开始。

有趣的是,我能够转换为ES5代码并对其进行调试。

希望能帮助到你。

关于javascript - 在node.js中使用chromeless分页,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46126596/

10-09 21:10