У меня есть сайт с формой входа. Если пользователь не вошел в систему и попытается получить доступ к внутренней странице, он будет перенаправлен на страницу по умолчанию. Например, если я попытаюсь получить доступ к http://siteURL.PhantomPrint.aspx
, я буду перенаправлен на http://siteURL/Default.aspx?ReturnUrl=PhantomPrint.aspx.
, а после входа в систему произойдет автоматическое перенаправление на страницу.
После перенаправления я хочу отобразить страницу с помощью Phantomjs и сохранить ее в формате pdf. Проблема в том, что рендеринг происходит до завершения загрузки страницы, и я могу правильно отобразить страницу, только если использую тайм-ауты. В этом случае, если загрузка страницы занимает больше времени, чем обычно, полученный PDF-файл не является правильным.
Ниже вы можете найти код java-скрипта:
var page = require('webpage').create();
var index = 0,
page.onConsoleMessage = function (msg) {
console.log(msg);
};
var steps = [
function () {
//Load Login Page
page.open("http://siteURL.PhantomPrint.aspx", function () {
//Enter Credentials
page.evaluate(function () {
console.log("filling inputs");
var usernameInput = document.getElementById("txtUsername");
usernameInput.value = "user";
var passwordInput = document.getElementById("txtPassword");
passwordInput.value = "password";
var loginButton = document.getElementById("btnLogin");
loginButton.click();
console.log("login button was submitted");
});
});
},
function () {
// page.onLoadFinished = function () {
// Render the page to pdf
page.render('example.png');
phantom.exit();
console.log("rendering finished");
//});
}
];
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();
}
}, 1000);
Любые предложения о том, как я могу гарантировать, что рендеринг выполняется только после завершения загрузки перенаправленной страницы, приветствуются.