Skip to content

Instantly share code, notes, and snippets.

@dskyyy
Created January 18, 2016 07:35
Show Gist options
  • Select an option

  • Save dskyyy/991666915cbb0ba2302a to your computer and use it in GitHub Desktop.

Select an option

Save dskyyy/991666915cbb0ba2302a to your computer and use it in GitHub Desktop.
var utils = require('utils');
var casper = require('casper').create({
pageSettings: {
loadImages: false,
loadPlugins: false,
userAgent: 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1'
}
});
//
// casper.options.onResourceRequested = function(C, requestData, request) {
// utils.dump(requestData.headers);
// };
// casper.options.onResourceReceived = function(C, response) {
// utils.dump(response.headers);
// };
var dailyNewsUrl = 'https://news.yandex.ru/yandsearch?rpt=nnews2&catnews={cid}&grhow=clutop&rel=tm&p={page}&within=7';
var cid = casper.cli.get('cid') || null;
var dueUrl = casper.cli.get('due-url') || null;
var subjects = [];
var proxyList = [
'185.67.247.1:1080',
'78.31.21.174:1080',
'77.87.113.113:15398',
'176.28.43.210:1080',
'94.41.225.232:1080',
'91.156.185.219:10200'
];
var parseSubjectLinks = function() {
var subjectSelector = document.querySelectorAll('.story-item__title > a');
return Array.prototype.map.call(subjectSelector, function(e) {
return e.getAttribute('href');
});
};
var countButtons = function() {
return document.querySelectorAll('.pager__group > a').length;
};
function fromRange(min, max) {
return Math.round(Math.random() * (max - min)) + min;
}
var parsePages = function(obj) {
var page = -1;
var loop = function() {
page++;
obj.handler(loop, page);
};
loop();
};
casper.start();
casper.then(function() {
parsePages({
handler: function(loop, page) {
var delay = fromRange(1500, 3000);
casper.wait(delay, function() {
var url = dailyNewsUrl.replace(/\{cid}/g, cid).replace(/\{page}/g, page);
this.thenOpen(url, function(response) {
//utils.dump(this.getPageContent());
// this.echo(url);
// this.echo(utils.dump(response));
var btnCount = this.evaluate(countButtons);
if (btnCount === 0) {
this.exit();
}
this.waitFor(function() {
return btnCount !== 6;
},
function success() {
this.echo(this.evaluate(parseSubjectLinks).join('\n'));
},
function fail() {
this.exit();
}
);
});
loop();
});
}
});
});
casper.run();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment