J'essaie de faire un peu de grattage avec nightmare
et mon travail est presque fonctionnel. Le problème est que je suis confronté à un problème lorsque j'essaie d'effectuer un click()
après le evaluate()
et run()
ont été appelés. Après avoir exécuté ces deux fonctions, j'essaie d'effectuer un autre clic pour me déplacer vers une autre partie du site Web, mais je n'exécute pas le click()
.Cliquez sur la fonction n'exécutant pas l'exécution Nightmare.js
À ce stade, je suis sûr que ce qui est noter la question, j'ai quelques hypothèses, peut-être ces fonctions sont asynchrones et je suis en train de click()
quand les callbacks ne coûtent pas encore prêt ou l'une de ces fonctions se termine de l'objet courant et nightmare
Je n'ai plus la portée.
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"]');