为什么我不能在Nightmare.evaluate()中使用我的课程?

时间:2019-09-17 16:54:42

标签: javascript node.js nightmare

我正在尝试使用Nightmare抓取有关动漫的数据的网站,并正在使用evaluate函数在文档中运行querySelectorAll。我想在Anime函数中创建并返回一个evaluate(非常简单的类,只有两个属性)数组。

这是我的代码:

const Nightmare = require('nightmare')

const URL = 'https://horriblesubs.info/shows/'

const browser = Nightmare({
    show: true
})

class Anime {
    constructor(name, url) {
        this.name = name
        this.url = url
    }
}

browser
    .goto(URL)
    .evaluate(() => {
        let shows = document.querySelectorAll('.ind-show')
        var array = new Array()
        shows.forEach((e, i) => {
            array.push(
                new Anime(e.textContent, e.firstChild.href)
            )
        })
        return array
    })
    .then(shows => {
        console.log(shows)
    })

不幸的是,NodeJS告诉我未定义Anime类。如何解决或获得相同的结果?

1 个答案:

答案 0 :(得分:0)

evaluate函数参数是在浏览器上下文而不是测试中执行的。

您将返回一个简单的数组,并在Anime函数中创建then实例。

有关更多信息,请参见Nightmare evaluate docsthis Nightmare issue discussion