gpt4 book ai didi

javascript - 使用 PhantomJS 桥序列化函数

转载 作者:行者123 更新时间:2023-11-30 17:54:00 24 4
gpt4 key购买 nike

我有一个链接数组,这些链接使用链接参数来实现由 PhantomJS 抓取数据的功能。如何序列化此功能?此 for 语句一次运行 paralely 3 个函数,我收到一个事件错误

在这种情况下,使用 async 是合适的,但如何串联使用呢?运行函数的时间总是不同的,但是async 应该如何理解它已经完成并从新的 URL 开始?

var phantom = require('phantom')
, async = require('async');

var urls = [
'http://en.wikipedia.org/wiki/Main_Page',
'http://es.wikipedia.org/wiki/Wikipedia:Portada',
'http://de.wikipedia.org/wiki/Wikipedia:Hauptseite'
];

async.mapSeries(urls, getTitle, function(err, result){
console.log(result);
})

function getTitle (link, callback) {
phantom.create(function(ph) {
return ph.createPage(function(page) {
return page.open(link, function(status) {
return page.evaluate((function() {
return document.title;
}), function(result) {
callback(null, result);
return ph.exit();
});
});
});
});
};

最佳答案

我会尝试这样的事情:

var links = []
var _ph

function init(cb) {
phantom.create(function(ph) {
//for each link in links call doStuff()
_ph = ph
doStuff(ph, link, cb)
})
}

function doStuff(ph, link, cb) {
ph.createPage(function(page) { //does things in parallel?
page.open(link, function(status) {
page.evaluate((function() {
document.title;
}), function(result) {
cb(null, result);
page.close();
});
});
}

var counter = links.length
var titles;

function results(err, res) {
titles.push(res)

if(--counter == 0) {
//done
_ph.exit()
}
}

init(results)

可能不是工作代码(我在这里写的),但我希望你明白了。如果您只想使用一页,例如:

var links = []
var _ph
var _page

function init(cb) {
phantom.create(function(ph) {

_ph = ph
ph.createPage(function(page) {
_page = page
doStuff(link, cb)
}
})
}

function doStuff(page, link, cb) {
page.open(link, function(status) {
page.evaluate((function() {
document.title;
}), function(result) {
cb(null, result);
page.close();
});
});
}

var counter = links.length
var titles;

function results(err, res) {
titles.push(res)

if(--counter == 0) {
//done
_ph.exit()
return
}

doStuff(links[counter], results)
}

init(results)

关于javascript - 使用 PhantomJS 桥序列化函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18418982/

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