Sta*_*ith 7 javascript node.js web-scraping nightmare electron
我正试图用Nightmare/Electron刮掉动态的寻呼网站.我没有看到执行do ...的方法,直到使用噩梦函数或用逻辑链式评估调用.
这是一个简单的代码示例,只是谷歌搜索一个短语并返回页面1中的结果hrefs.我希望这个代码继续为结果中的每个页面.
var Nightmare = require('nightmare');
var vo = require('vo');
vo(function* () {
var nightmare = Nightmare({ show: true });
var links = yield nightmare
.goto('http://www.google.com')
.wait('input[title="Search"]')
.click('input[title="Search"]')
.type('input[title="Search"]', 'Anequim Project')
.click('input[name="btnK"]')
.wait(600)
.evaluate(function(){
var linkArray = [];
var links = document.querySelectorAll('h3.r a');
for (var i = 0; i < links.length; ++i) {
linkArray.push(links[i].getAttribute('href'));
}
return linkArray;
});
yield nightmare.end();
return links;
})(function (err, result) {
if (err) return console.log(err);
console.log(result);
});
Run Code Online (Sandbox Code Playgroud)
以下代码示例是segmentio/nightmare项目的rosshinkley提供的解决方案的修改版本.这仍然需要一些工作,因为在我使用Nightmare 2.1.2版本的测试中它不是100%可靠,但它是一个很好的起点.
注意:测试时如果运行时间超过X次,Google将需要验证码.
var Nightmare = require('nightmare');
var vo = require('vo');
vo(run)(function(err, result) {
if (err) throw err;
});
function* run() {
var nightmare = Nightmare({ show: true }),
MAX_PAGE = 100,
currentPage = 0,
nextExists = true,
links = [];
yield nightmare
.goto('http://www.google.com')
.wait('input[title="Search"]')
.click('input[title="Search"]')
.type('input[title="Search"]', 'Anequim Project')
.click('input[name="btnK"]')
.wait(2000)
nextExists = yield nightmare.visible('#pnnext');
while (nextExists && currentPage < MAX_PAGE) {
links.push(yield nightmare
.evaluate(function() {
var linkArray = [];
var links = document.querySelectorAll('h3.r a');
return links[0].href;
}));
yield nightmare
.click('#pnnext')
.wait(2000)
currentPage++;
nextExists = yield nightmare.visible('#pnnext');
}
console.dir(links);
yield nightmare.end();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2745 次 |
| 最近记录: |