gpt4 book ai didi

javascript - PhantomJS - onLoadFinished 无故调用两次

转载 作者:行者123 更新时间:2023-12-03 02:46:25 25 4
gpt4 key购买 nike

这是我的代码:

var system = require('system');
var page = require('webpage').create();
var server = require('webserver').create();
var system = require('system');
var someUrl = "http://sportfun.bg";
var port = 3000;
//Screen resolution
page.viewportSize = {
width: 1920,
height: 1080
};
//User agent
page.settings.userAgent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36';
page.onConsoleMessage = function(msg) {
system.stderr.writeLine('Console: ' + msg);
};
var service = server.listen(port, function (request, response) {
//console.log('Request received at ' + new Date());
//console.log("Request" + JSON.stringify(request.post));
var POST = request.post;
//console.log("Bank:" + POST.bank);
// TODO: parse `request` and determine where to go

var step = 0;

page.open(someUrl, function (status) {
if (status !== 'success') {
console.log('Unable to post!');
} else {
console.log("Here0");
page.onLoadFinished = function(status) {
if(status === "success"){
console.log("Here 1");
response.statusCode = 200;
response.headers = {
'Cache': 'no-cache',
'Content-Type': 'text/plain;charset=utf-8'
};

// TODO: do something on the page and generate `result`
response.write("We good");
//console.log(page.content);
response.close();
}
};

}
});


});
console.log("Server started!");

我正在使用 PhantomJS 2.1.1。

当我启动服务器并在控制台中向其发送发布请求时,我看到了奇怪的事情:

Server started!
Here0
Here 1
Here 1

为什么我看到两次 Here 1 而实际上页面应该加载一次?有什么原因吗?我该如何解决?

最佳答案

如果通过 iframe 嵌入多个小部件(例如 Facebook 小部件或 Google map ),则会发生 onLoadFinished 的多个回调。您可以通过将对这些网站的调用列入黑名单来摆脱它们:

block_urls = ['gstatic.com', 'google-analytics.com', 'tawk.to', 'perdeta.net', 'facebook.net', 'facebook.com'];

page.onResourceRequested = function(requestData, request){
for(url in block_urls) {
if(requestData.url.indexOf(block_urls[url]) !== -1) {
request.abort();
console.log(requestData.url + " aborted");
return;
}
}
}

如果您实现此解决方案,您会注意到“Here 1”不再被打印。这是因为第一个 onLoadFinished 实际上是在 page.open 之前 触发的,但您仅在 page.open 之后创建它> 被调用。

如果你想真正使用 page.onLoadFinished,你应该在 page.open 之前对其进行 decalre。

关于javascript - PhantomJS - onLoadFinished 无故调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48078202/

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