NightmareJs + Jquery return 空 JSON 响应
NightmareJs + Jquery return empty JSON response
我正在尝试处理类似噩梦、幻影等测试工具。而且似乎受困于一些基本的 DOM 操作。我在这里使用 jquery 以便以后使用 $().parent() 方法。我已经尝试了集合中所有没有用的可能选择器。它只有 returns 一些数据。它实际完全存在于页面上的位置。
....
nightmare
.goto(link)
.inject('js', 'jquery-2.2.4.min.js')
.wait()
.evaluate( () => {
$('.sport--head:not(.folding--open)').click()
})
.wait(4000)
.evaluate( () => {
let events = [];
$('.view-wrapper .events--list > li').each( (i, elem) => {
let event = {
'name' : $(elem).text()
}
events.push(event);
});
let data = JSON.stringify(events, null, '\t');
return data;
})
.end()
....
它 returns 实际不存在的空字段:
[{ "name": "" }, { "name": "" }, { "name": "" }, { "name": "contents" } ]
为什么会这样?有什么想法吗?
您不知道页面会在 4 秒内完全加载。
要么有一些 Ajax 数据,并且在您抓取时它只出现在那个时刻。或者,选择器实际上是错误的。
而不是特定的数字,使用.wait
等待目标选择器,
.wait(4000)
.wait('.view-wrapper .events--list > li')
还要确保代码确实 returns 数据,方法是将其放在实际浏览器的 console.log 上。
我正在尝试处理类似噩梦、幻影等测试工具。而且似乎受困于一些基本的 DOM 操作。我在这里使用 jquery 以便以后使用 $().parent() 方法。我已经尝试了集合中所有没有用的可能选择器。它只有 returns 一些数据。它实际完全存在于页面上的位置。
....
nightmare
.goto(link)
.inject('js', 'jquery-2.2.4.min.js')
.wait()
.evaluate( () => {
$('.sport--head:not(.folding--open)').click()
})
.wait(4000)
.evaluate( () => {
let events = [];
$('.view-wrapper .events--list > li').each( (i, elem) => {
let event = {
'name' : $(elem).text()
}
events.push(event);
});
let data = JSON.stringify(events, null, '\t');
return data;
})
.end()
....
它 returns 实际不存在的空字段:
[{ "name": "" }, { "name": "" }, { "name": "" }, { "name": "contents" } ]
为什么会这样?有什么想法吗?
您不知道页面会在 4 秒内完全加载。
要么有一些 Ajax 数据,并且在您抓取时它只出现在那个时刻。或者,选择器实际上是错误的。
而不是特定的数字,使用.wait
等待目标选择器,
.wait(4000)
.wait('.view-wrapper .events--list > li')
还要确保代码确实 returns 数据,方法是将其放在实际浏览器的 console.log 上。