如何依次打开几个页面(PhantomJS)?
How to open few pages in sequence (PhantomJS)?
如我所见,您不能在一个 phantomjs 脚本中使用 page.open() 打开几个页面。因为他们开始同时工作。我尝试了 seTtimeout() 的变体,但它们没有用。所以我需要的是打开第一页,做一些动作,然后关闭它。之后我需要打开另一个页面。我怎样才能做到这一点?
var url = 'url-address-';
var referrer = '-url-address-/path';
page.customHeaders={'Authorization': 'Basic '+btoa(login+":"+password), 'Referer': referrer};
page.open(url, function(status){
if(status === 'fail')
{
console.log('Status: ' + status);
phantom.exit();
}
console.log('Status: ' + status);
page.render("1.png");
page.evaluate(function() {
var form = document.forms[0];
form.data1.value = 'mydata_name';
form.data2.value = 'mydata_surname';
form.submit();
});
setTimeout(function(){
var url = 'post-url-address';
var referrer = '-url-address-/refpath';
page.customHeaders={'Authorization': 'Basic '+btoa(login+":"+password), 'Referer': referrer};
body = 'submit-url=mydata_to_submit';
page.open(url, 'POST', body, function (status) {
//
// Here goes the error
// unable to load url: "post-url-address"
// error code: 5, description: Operation canceled
//
//
//setTimeout(function(){}, 5000)
console.log('Status: ' + status);
});
page.render("2.png");
var fs = require('fs');
fs.write(result, page.content, 'w');
console.log('Finished');
phantom.exit();
}, timeout);
});
所以一切顺利,直到我打开 post 数据页面。不知道为什么会这样。尝试将超时更改为 20-30 秒 - 问题仍然存在。为什么会这样,不是很明显吗?
你退出得太早了。
您在打开第二个页面后中断了控制流。您必须将文件写入和退出移动到 page.open()
回调中。发生该错误的原因可能是 PhantomJS 当前正在尝试下载页面,同时试图退出执行。这就是为什么第二个页面加载被取消的原因。
使用:
// second page.open ...
page.open(url, 'POST', body, function (status) {
console.log('Status: ' + status);
page.render("2.png");
var fs = require('fs');
fs.write(result, page.content, 'w');
console.log('Finished');
phantom.exit();
});
如我所见,您不能在一个 phantomjs 脚本中使用 page.open() 打开几个页面。因为他们开始同时工作。我尝试了 seTtimeout() 的变体,但它们没有用。所以我需要的是打开第一页,做一些动作,然后关闭它。之后我需要打开另一个页面。我怎样才能做到这一点?
var url = 'url-address-';
var referrer = '-url-address-/path';
page.customHeaders={'Authorization': 'Basic '+btoa(login+":"+password), 'Referer': referrer};
page.open(url, function(status){
if(status === 'fail')
{
console.log('Status: ' + status);
phantom.exit();
}
console.log('Status: ' + status);
page.render("1.png");
page.evaluate(function() {
var form = document.forms[0];
form.data1.value = 'mydata_name';
form.data2.value = 'mydata_surname';
form.submit();
});
setTimeout(function(){
var url = 'post-url-address';
var referrer = '-url-address-/refpath';
page.customHeaders={'Authorization': 'Basic '+btoa(login+":"+password), 'Referer': referrer};
body = 'submit-url=mydata_to_submit';
page.open(url, 'POST', body, function (status) {
//
// Here goes the error
// unable to load url: "post-url-address"
// error code: 5, description: Operation canceled
//
//
//setTimeout(function(){}, 5000)
console.log('Status: ' + status);
});
page.render("2.png");
var fs = require('fs');
fs.write(result, page.content, 'w');
console.log('Finished');
phantom.exit();
}, timeout);
});
所以一切顺利,直到我打开 post 数据页面。不知道为什么会这样。尝试将超时更改为 20-30 秒 - 问题仍然存在。为什么会这样,不是很明显吗?
你退出得太早了。
您在打开第二个页面后中断了控制流。您必须将文件写入和退出移动到 page.open()
回调中。发生该错误的原因可能是 PhantomJS 当前正在尝试下载页面,同时试图退出执行。这就是为什么第二个页面加载被取消的原因。
使用:
// second page.open ...
page.open(url, 'POST', body, function (status) {
console.log('Status: ' + status);
page.render("2.png");
var fs = require('fs');
fs.write(result, page.content, 'w');
console.log('Finished');
phantom.exit();
});