使用Nightmare/Electron动态分页(分页)
Dynamic paging with Nightmare / Electron (page scrape)
我正试图用噩梦/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);
});
下面的代码示例是segmentio/梦魇项目的roshinkley提供的解决方案的修改版本。这仍然需要一些工作,因为从我对噩梦2.1.2版本的测试来看,它不是100%可靠的,但这是一个很好的起点。
注意:当测试时,如果你运行它超过X次,谷歌将需要一个captcha。
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();
}
相关文章:
- 目录和动态分页PHP
- 根据角度范围值动态更改分页页面大小
- 谷歌图表与动态数据和分页是可能的
- angularjs html中动态表的分页
- AngularJS 服务器端排序与分页 - 动态值
- jQuery 分页与动态
- .
- 分页动态加载的 Webix 树节点
- 在包含来自 JSON 的动态条目的表中进行分页
- 分页表的动态索引
- 可脚分页在动态数据轨道上不起作用
- 使用余烬的动态分页
- angularjs不显示动态搜索结果的分页
- 使用Nightmare/Electron动态分页(分页)
- 在弹出窗口中分页和网页抓取的CasperJS步骤的动态数量
- 动态检查文本是否转到下一页,并使用pdfmake在pdf中添加分页符
- 动态分页
- 动态插入分页符
- 动态Angular表没有分页过滤
- 为什么引导动态表分页不能工作
- 如何在进行自定义分页时动态应用类