首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单击未执行Nightmare.js的函数

单击未执行Nightmare.js的函数
EN

Stack Overflow用户
提问于 2016-10-04 01:49:07
回答 1查看 712关注 0票数 1

我正在尝试使用nightmare进行一些刮擦,而且我的工作几乎是功能齐全的。问题是,在调用click()evaluate()之后,当我尝试执行evaluate()run()时,我将面临一个问题。在运行这两个函数之后,我尝试执行另一个单击,将自己移动到网站的另一个部分,但没有执行click()

在这一点上,我肯定有什么问题,我几乎没有假设,也许这些函数是异步的,当回调尚未准备好或其中一个函数结束当前的nightmare对象时,我尝试使用nightmare,而我已经没有范围了。

代码语言:javascript
复制
var Nightmare = require('nightmare');
//var nightmare = Nightmare({show:true})
var express = require('express');
var fs = require('fs');
var request = require('request');
var cheerio = require('cheerio');
var app     = express();

var urlWeb = "someurl";
var selectCity = "#ddl_city";
var selectTheater = "#ddl_theater";
var enterBtn = "#btn_enter";
var mainSelector = "#aspnetForm";
var flagReady = true;

new Nightmare({show:true})
.goto(urlWeb)
.wait(selectCity)
.select(selectCity, '19')
.wait(8000)
.select(selectTheater, '12')
.wait(1000)
.click(enterBtn)
.wait(mainSelector)
.evaluate(function(){

        //returning HTML for cheerio
        return document.body.innerHTML; 
})
.run(function(err, nightmare){
     if (err) return console.log(err);

    // Loading HTML body on jquery cheerio
     var $ = cheerio.load(nightmare);

    //Looping on each div for seccion de Carterla para Hoy
    $('.showtimeDaily').each(function(index, element){
        //spanish title
        console.log($(this).find('h3').children().text());
        //english title
        console.log($(this).find('h4').text());
        //schedule for today
        console.log($(this).find('li').children().text() + " ");
        //img for movie
        console.log($(this).find('img').attr('src'));
            //show time data such as gender, lenght, language
        console.log($(this).find('.showtimeData').text());
        var showtimeData = $(this).find('.showtimeData').text();
        //console.log(JSON.stringify(showtimeData.replace(/\t|\n/g, "")));
    })

        console.log('Done!');


})
//*****here is wen I try to click*****
.click('a[href="../showtimes/weekly.aspx"]');
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-04 02:40:03

我对异步回调有问题,所以我所做的是嵌套噩梦对象的调用,以确保任务一个接一个地运行。这是代码:

代码语言:javascript
复制
nightmare
.goto(urlWeb)
.wait(selectCity)
.select(selectCity, '19')
.wait(8000)
.select(selectTheater, '12')
.wait(1000)
.click(enterBtn)
.wait(mainSelector)
.evaluate(function(){

        //returning HTML for cheerio
        return document.body.innerHTML; 
})
.then(function(body){
    // Loading HTML body on jquery cheerio
     var $ = cheerio.load(body);

    //Looping on each div for seccion de Carterla para Hoy
    $('.showtimeDaily').each(function(index, element){
        //spanish title
        console.log($(this).find('h3').children().text());
        //english title
        console.log($(this).find('h4').text());
        //schedule for today
        console.log($(this).find('li').children().text() + " ");
        //img for movie
        console.log($(this).find('img').attr('src'));
            //show time data such as gender, lenght, language
        console.log($(this).find('.showtimeData').text());
        var showtimeData = $(this).find('.showtimeData').text();
        //console.log(JSON.stringify(showtimeData.replace(/\t|\n/g, "")));
    })
   //**Here I call nightmare to run after the first call back is done*****
    nightmare
        .goto('')
        .wait('body')
        .title()
        .then(function(title){
            console.log(title);
        });

        console.log('Done!');


});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39843019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档