噩梦 - 文件来自哪里?

nightmare - where does document come from?

下面的代码片段来自 https://github.com/segmentio/nightmare

const Nightmare = require('nightmare')
const nightmare = Nightmare({ show: true })

nightmare
  .goto('https://duckduckgo.com')
  .type('#search_form_input_homepage', 'github nightmare')
  .click('#search_button_homepage')
  .wait('#r1-0 a.result__a')
  .evaluate(() => document.querySelector('#r1-0 a.result__a').href)
  .end()
  .then(console.log)
  .catch(error => {
    console.error('Search failed:', error)
  })

我无法理解这一行:

.evaluate(() => document.querySelector('#r1-0 a.result__a').href)

document 是从哪里来的?代码是 运行 on Node.js,因此没有浏览器上下文。我检查过 document 不是全局变量。显然也不是参数。我还验证了示例代码是否有效。怎么可能?

在 Nightmare 无头浏览器中,箭头函数作为参数传递为 运行,其中定义了 document

.evaluate(() => document.querySelector('#r1-0 a.result__a').href)

您还可以像这样向该函数传递额外的参数:

.evaluate((arg) => {
  document.querySelector('#r1-0 a.result__a').href);
}, 'test');