0
NightmareJSを初めて使い、ウェブサイトをスクラップするためのスクリプトを書いています。 これはそのように機能します。私は自分のプロフィールにログインし、サイトが読み込まれるのを待ってから、自分の好きなプロフィールに行きます。そこで、私はサイトの終わりまでスクロールします。現時点で私はこの種の醜い作業を使用し、すべての結果を得るためにページの一番下までスクロールして次のステップに進む方法があるのだろうかと思います。ナイトメアのレイジーロードスクロールJS
var Nightmare = require('nightmare');
var vo = require('vo');
vo(run)(function(err, result) {
if (err) throw err;
});
function *run() {
var nightmare = Nightmare({ show: true,
webPreferences: { partition: 'your-custom-partition'}});
yield nightmare
.goto('https://facebook.com/login')
.type('input[id="email"]', "user")
.type("input[id='pass']", "pass")
.click('#loginbutton')
.wait('._8u._42ef')
.goto('https://www.facebook.com/myprofile/likes')
.wait(1000)
yield nightmare
.evaluate(function() {
window.document.body.scrollTop = document.body.scrollHeight;
})
.wait(3000)
.evaluate(function() {
window.document.body.scrollTop = document.body.scrollHeight;
})
.wait(3000)
.evaluate(function() {
window.document.body.scrollTop = document.body.scrollHeight;
})
.wait(3000)
.evaluate(function() {
window.document.body.scrollTop = document.body.scrollHeight;
})
.wait(3000)
.evaluate(function() {
window.document.body.scrollTop = document.body.scrollHeight;
})
.wait(3000)
.evaluate(function() {
window.document.body.scrollTop = document.body.scrollHeight;
})
.wait(3000)
.evaluate(function() {
window.document.body.scrollTop = document.body.scrollHeight;
})
.wait(3000)
.evaluate(function() {
window.document.body.scrollTop = document.body.scrollHeight;
})
.wait(3000)
.evaluate(function() {
window.document.body.scrollTop = document.body.scrollHeight;
})
.wait(3000)
.evaluate(function() {
window.document.body.scrollTop = document.body.scrollHeight;
})
.wait(3000)
.evaluate(function() {
window.document.body.scrollTop = document.body.scrollHeight;
})
.wait(3000)
.evaluate(function() {
window.document.body.scrollTop = document.body.scrollHeight;
})
.wait(3000)
.evaluate(function() {
window.document.body.scrollTop = document.body.scrollHeight;
})
.wait(3000)
.evaluate(function() {
window.document.body.scrollTop = document.body.scrollHeight;
})
.wait(3000)
.evaluate(function() {
window.document.body.scrollTop = document.body.scrollHeight;
})
.wait(3000)
.evaluate(function() {
window.document.body.scrollTop = document.body.scrollHeight;
})
.wait(3000)
var title = yield nightmare
.evaluate(function() {
var jsonObject = new Array('');
var links = document.getElementsByClassName("_5rz _5k3a _5rz3 _1v6c");
var numProfiles = links.length;
for(var i = 0; i< numProfiles; i++){
var elem;
elem = links[i].querySelector(".fsl.fwb.fcb a").href;
console.log(elem);
jsonObject.push(elem);
}
if(numProfiles > 0) {
//then delete that element, so we don't overlaod the page
for(var j = 0; j < numProfiles; j++){
links[0].parentNode.removeChild(links[0]);
}
window.document.body.scrollTop = document.body.scrollHeight;
}
return jsonObject;
});
console.log(title);
yield nightmare.end();
}
ありがとう、多くの仲間、それは素晴らしい解決策です。これまでになかった要素を検出する方法と、次のブロックに進むトリガーとなるヒントはありますか? – Saibottrenham