Javascript 噩梦JS`.goto(url)`循环
我正在编写一个噩梦JS脚本,它登录到一个网站,根据表中的结果构建一个链接列表,然后打开每个链接。在每个打开的链接上,一些信息会被删除并添加到最终结果中 我在打开每个链接的循环中遇到了很多麻烦。由于网站的限制,此过程必须同步 下面是一个非常简单的例子,说明到目前为止我所拥有的,以及我得到的回报 我是这个图书馆的新手,在阅读文档的同时,我发现它非常混乱 关于让Javascript 噩梦JS`.goto(url)`循环,javascript,loops,web-scraping,nightmare,Javascript,Loops,Web Scraping,Nightmare,我正在编写一个噩梦JS脚本,它登录到一个网站,根据表中的结果构建一个链接列表,然后打开每个链接。在每个打开的链接上,一些信息会被删除并添加到最终结果中 我在打开每个链接的循环中遇到了很多麻烦。由于网站的限制,此过程必须同步 下面是一个非常简单的例子,说明到目前为止我所拥有的,以及我得到的回报 我是这个图书馆的新手,在阅读文档的同时,我发现它非常混乱 关于让.goto()循环工作有什么建议吗 const Nightmare = require('nightmare') const moment =
.goto()
循环工作有什么建议吗
const Nightmare = require('nightmare')
const moment = require('moment')
const opts = {
show: true,
openDevTools: { mode: 'detach' },
pollInterval: 250,
waitTimeout: 10000,
webPreferences: {
webSecurity: false
}
}
const nightmare = Nightmare(opts)
nightmare
.goto('https://www.google.co.nz/')
.evaluate(links => {
var allHrefs = document.querySelectorAll('#fbar #fsl a')
var allLinks = []
allHrefs.forEach(function(a) {
allLinks.push(a.href)
})
console.log('allLinks:', allLinks)
return allLinks
}, '.what')
.end()
.then(result => {
console.log('result:', result)
let titles = []
result.forEach(link => {
return nightmare
.goto(link)
.wait('#navheader')
.evaluate(getTitle => {
var thisTitle = document.title
console.log('this title:', thisTitle)
titles.push(thisTitle)
})
})
console.log('titles:', titles)
return titles
})
在这里,运行脚本后控制台将显示以下结果:
$ node scripts/nm_test.js
result: [ 'https://www.google.co.nz/intl/en/ads/?fg=1',
'https://www.google.co.nz/services/?fg=1',
'https://www.google.co.nz/intl/en/about.html?fg=1' ]
titles: []
由于网站的限制,必须是同步的。为什么网站会关心对它的请求是同步的还是异步的?它如何区分两者之间的区别?你确定你没有混淆速率限制和同步性吗?好问题-这个网站对登录进行速率限制:如果你使用相同的详细信息登录两次,第一次登录就会被淘汰。但是,如果你甚至在同一时间从网站上打开了多个链接,它似乎也很讨厌:我不知道他们是如何/为什么这么做的!使用承诺,这样你就不会同时多次连接到网站。您仍然可以异步执行。