Javascript 转到下一页并在噩梦中删除链接

Javascript 转到下一页并在噩梦中删除链接,javascript,node.js,nightmare,Javascript,Node.js,Nightmare,我正试图转到下一页,并使用噩梦ejs将链接刮到最后一个可用的页面。尽管我遇到了一些问题,而且在如何让它发挥作用方面没有任何运气 代码 const Nightmare = require('nightmare'); const nightmare = Nightmare({ show: true, executionTimeout: 3000}) const imageUrl = []; function getImages() { const images = document.quer

我正试图转到下一页,并使用
噩梦ejs
将链接刮到最后一个可用的页面。尽管我遇到了一些问题,而且在如何让它发挥作用方面没有任何运气

代码

const Nightmare = require('nightmare');
const nightmare = Nightmare({ show: true, executionTimeout: 3000})
const imageUrl = [];


function getImages() {
  const images = document.querySelectorAll('.item a img');
  const img = [];
  for(let i = 0; i<images.length; i++) {
      img.push(images[i].src);
  }
  return img;
}


nightmare
    .goto('https://hidurl/images/search/dogs/')
    .scrollTo(20368, 0)
    .wait(1000)
    .evaluate(getImages)
    .then(a => {
      const aFiltered = a.filter(word => word.includes('.jpg'));
      for(let i = 0; i<aFiltered.length; i++) {
        imageUrl.push(aFiltered[i]);
        }
      console.log(imageUrl);     
         return nightmare
                .click('#content > div > a')
                .scrollTo(20368, 0)
                .wait(1000)
                .evaluate(getImages)
                .then( a => {

                    const aFiltered = a.filter(word => word.includes('.jpg'));
                    for(let i = 0; i<aFiltered.length; i++) {
                      imageUrl.push(aFiltered[i]);
                      }
                    console.log(imageUrl);


            })    
})
.catch(error => {
    console.error(error)
})
const噩梦=require(“噩梦”);
常量噩梦=噩梦({show:true,executionTimeout:3000})
常量imageUrl=[];
函数getImages(){
const images=document.queryselectoral('.item a img');
常数img=[];
for(设i=0;i{
常量aFiltered=a.filter(word=>word.includes('.jpg'));
for(设i=0;i{
常量aFiltered=a.filter(word=>word.includes('.jpg'));
for(设i=0;i{
控制台错误(错误)
})

我想获得一个包含页面上所有可用链接的数组。目前我最多只能访问两个页面,而无需重复代码。我正从噩梦开始,希望能找到一些帮助,帮助我在移动时浏览多个页面并填充数组。

好的,使用生成器函数和控制流修复了问题否去图书馆

const噩梦=require(“噩梦”);
const vo=要求('vo');
const噩梦=噩梦({show:true,executionTimeout:3000});
常量imageUrl=[];
函数getImages(){
const images=document.queryselectoral('.item a img');
常数img=[];
for(设i=0;idiv>a”);
while(nextExists&¤tPage{
常量aFiltered=a.filter(word=>word.includes('.jpg'));
for(设i=0;i分区>a”)
.wait(‘body’)
.等待(1000);
currentPage++;
nextExists=yield dream.exists(“#content>div>a”);
}
console.table(imageUrl);
结束();
}        

现在可以使用梦魇EJS进入任何网站上的多个分页页面。

你在哪里附加了单击功能?它给了你什么错误?评估后,它给了catch claw错误。我还添加了等待,看看它是否单击,但没有。具体错误是什么?你能将代码更改为
.catch(console.error)吗
并分享错误?@Md.AbuTaher我已经更新了问题和代码,但无法确定如何重复这些过程,直到最后一页。
const Nightmare = require('nightmare');
const vo = require('vo');
const nightmare = Nightmare({ show: true, executionTimeout: 3000 });
const imageUrl = [];


function getImages() {
    const images = document.querySelectorAll('.item a img');
    const img = [];
    for (let i = 0; i < images.length; i++) {
        img.push(images[i].src);
    }
    return img;
}


vo(run)(function(err, result) {
    if (err) throw err;
});


function* run() {
    let MAX_PAGE = 5,
        currentPage = 0,
        nextExists = true;


    yield nightmare
        .goto('https://someurl/images/search/dogs/')
        .scrollTo(20368, 0)
        .wait(1000);

    nextExists = yield nightmare.exists('#content > div > a');

    while (nextExists && currentPage < MAX_PAGE) {
        yield nightmare
            .scrollTo(20368, 0)
            .wait(1000)
            .evaluate(getImages)
            .then(a => {
                const aFiltered = a.filter(word => word.includes('.jpg'));
                for (let i = 0; i < aFiltered.length; i++) {
                    imageUrl.push(aFiltered[i]);
                }
            });

        yield nightmare
                    .click('#content > div > a')
                    .wait('body')
                    .wait(1000);

        currentPage++;
        nextExists = yield nightmare.exists('#content > div > a');
    }

    console.table(imageUrl);
    yield nightmare.end();
}