等待一个URL下载一个网页的所有内容
Wait for a URL to download all the contents of a webpage
我要下载 HTML 个 URL 的内容。问题是 URL 需要一些时间来加载,所以在记录内容之前我必须等待/超时一段时间(~10 - 15 秒)。为此,我尝试了两种方法,但都无法产生预期的结果。
第一种方法是使用 setTimeOut:
var page = require('webpage').create()
page.open(url, function (status) {
if (status !== 'success') {
console.log('Unable to load the address!');
phantom.exit();
} else {
window.setTimeout(function () {
console.log(page.content);
phantom.exit();
}, 10000);
}
});
但是setTimeout 未能设置指定的超时时间。无论我将什么值设置为 Timeout ,它都会在小于页面加载时间的固定时间后超时。
第二种方法是使用 OnLoadFinished:
var page = new WebPage(), testindex = 0, loadInProgress = false;
page.onConsoleMessage = function(msg) {
console.log(msg)
};
page.onLoadStarted = function() {
loadInProgress = true;
console.log("load started");
};
page.onLoadFinished = function() {
loadInProgress = false;
console.log("load finished");
};
var steps = [
function() {
page.open("url");
},
function() {
console.log(page.content);
}
];
interval = setInterval(function() {
if (!loadInProgress && typeof steps[testindex] == "function") {
console.log("step " + (testindex + 1));
steps[testindex]();
testindex++;
}
if (typeof steps[testindex] != "function") {
console.log("test complete!");
phantom.exit();
}
}, 5000);
在这种方法中,OnLoadFinished 在加载整个页面之前触发。
我是phantomJS新手,所以上面两个解决方案也是来自stack overflow。有什么我遗漏的是我的案子特有的吗?还有其他方法可以达到相同的结果吗? (我也尝试 Waitfor 构造,但没有成功)。
好的,你的问题是在超时后加载内容。如果您正在寻找 DOM 元素,您必须使用已知的 WaitFor
函数。但是如果你只是想在超时后获取页面内容,那就简单多了。那么让我们开始吧。
var page = require("webpage").create();
var address = "http://someadress.com/somepath/somearticle";
var timeout = 10*1000;
page.open(address);
function getContent() {
return page.evaluate(function() {
return document.body.innerHTML;
});
}
page.onLoadFinished = function () {
setTimeout(function() {
console.log(getContent());
}, timeout);
}
注意! 如果您正在等待 HTML 正文中的大量内容,请使用 setInterval 函数,等待 document.body.innerHTML
比您想要的更多。
我要下载 HTML 个 URL 的内容。问题是 URL 需要一些时间来加载,所以在记录内容之前我必须等待/超时一段时间(~10 - 15 秒)。为此,我尝试了两种方法,但都无法产生预期的结果。
第一种方法是使用 setTimeOut:
var page = require('webpage').create()
page.open(url, function (status) {
if (status !== 'success') {
console.log('Unable to load the address!');
phantom.exit();
} else {
window.setTimeout(function () {
console.log(page.content);
phantom.exit();
}, 10000);
}
});
但是setTimeout 未能设置指定的超时时间。无论我将什么值设置为 Timeout ,它都会在小于页面加载时间的固定时间后超时。
第二种方法是使用 OnLoadFinished:
var page = new WebPage(), testindex = 0, loadInProgress = false;
page.onConsoleMessage = function(msg) {
console.log(msg)
};
page.onLoadStarted = function() {
loadInProgress = true;
console.log("load started");
};
page.onLoadFinished = function() {
loadInProgress = false;
console.log("load finished");
};
var steps = [
function() {
page.open("url");
},
function() {
console.log(page.content);
}
];
interval = setInterval(function() {
if (!loadInProgress && typeof steps[testindex] == "function") {
console.log("step " + (testindex + 1));
steps[testindex]();
testindex++;
}
if (typeof steps[testindex] != "function") {
console.log("test complete!");
phantom.exit();
}
}, 5000);
在这种方法中,OnLoadFinished 在加载整个页面之前触发。
我是phantomJS新手,所以上面两个解决方案也是来自stack overflow。有什么我遗漏的是我的案子特有的吗?还有其他方法可以达到相同的结果吗? (我也尝试 Waitfor 构造,但没有成功)。
好的,你的问题是在超时后加载内容。如果您正在寻找 DOM 元素,您必须使用已知的 WaitFor
函数。但是如果你只是想在超时后获取页面内容,那就简单多了。那么让我们开始吧。
var page = require("webpage").create();
var address = "http://someadress.com/somepath/somearticle";
var timeout = 10*1000;
page.open(address);
function getContent() {
return page.evaluate(function() {
return document.body.innerHTML;
});
}
page.onLoadFinished = function () {
setTimeout(function() {
console.log(getContent());
}, timeout);
}
注意! 如果您正在等待 HTML 正文中的大量内容,请使用 setInterval 函数,等待 document.body.innerHTML
比您想要的更多。