gpt4 book ai didi

javascript - 使用 Nightmare/Electron 进行动态分页(页面抓取)

转载 作者:数据小太阳 更新时间:2023-10-29 04:43:47 26 4
gpt4 key购买 nike

我正在尝试使用 Nightmare/Electron 抓取动态分页网站。我看不到执行 do... 的方法,直到使用 Nightmare 函数或使用逻辑链接评估调用的方法。

这是一个简单的代码示例,它仅通过 Google 搜索一个短语并返回第 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);
});

最佳答案

以下代码示例是 solution 的修改版本由 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();
}

关于javascript - 使用 Nightmare/Electron 进行动态分页(页面抓取),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34596811/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com