Я пытаюсь войти в Aliexpress через PhantomJS, но мой скрипт не работает, и я не могу понять, почему.Форма входа в iframe из Aliexpress не работает в PhantomJS
Я использую версию PhantomJS 2.0.0.
Форма входа находится внутри iframe, возможно, это проблема.
Это код:
var page = new WebPage(), step = 0, loadInProgress = false, timeOut = false;
var url = 'https://login.aliexpress.com/buyer.htm?spm=2114.11040108.1000002.7.8yVuzJ&return=http%3A%2F%2Fcl.aliexpress.com%2F';
Функция заполнить и отправить форму внутри I-Frame.
var sendForm = function(){
var iframeRef = function(frameRef) {
return frameRef.contentWindow
? frameRef.contentWindow.document
: frameRef.contentDocument;
};
var iframe = iframeRef(document.getElementById('alibaba-login-box'));
var arr = iframe.getElementById('login-form');
arr.elements["fm-login-id"].value="my-email";
arr.elements["fm-login-password"].value="my-password";
iframe.getElementById('login-form').submit();
console.log("Form submitted.");
};
Эти шаги, которые следующим образом моя программа:
var onFinishedSteps = [
//Opens the web to log-in.
function(){
page.open(url);
},
//Fills the form and submits it.
function(){
page.render('0before fill.png');
page.evaluate(sendForm);
page.render('1just after submit.png');
},
//Renders the web ~10 seconds after submitting.
function(){
console.log("timeout setted");
timeOut = true;
window.setTimeout(
function() {
console.log("timeout function");
page.render('2timeout.png');
timeOut = false;
},
10000 // wait 5,000ms (5s)
);
}
];
Первая веб-страница загружена, то форма заполняется и представляется (и услуг). Эти два шага работают нормально. Изображенные изображения отображают заполненные входы (адрес электронной почты и пароль) и содержимое i-кадра правильно.
Третий шаг должен предоставить программе достаточно времени для обработки формы и входа в систему, но отображаемое изображение по-прежнему показывает форму, на этот раз с пустым паролем и без сообщения (например, «неправильный пароль» или что-то в этом роде) ,
Это остальная часть программы:
page.onNavigationRequested = function(url, type, willNavigate, main) {
console.log('Trying to navigate to: ' + url);
console.log('Caused by: ' + type);
console.log('Will actually navigate: ' + willNavigate);
console.log('Sent from the page\'s main frame: ' + main);
};
page.onLoadStarted = function() {
loadInProgress = true;
};
page.onLoadFinished = function(status) {
loadInProgress = false;
};
interval = setInterval(function() {
if (!loadInProgress && typeof onFinishedSteps[step] == "function") {
console.log("----------------------- Step " + (step + 1));
onFinishedSteps[step]();
step++;
}
if (!loadInProgress && !timeOut && typeof onFinishedSteps[step] != "function") {
console.log("test complete!");
phantom.exit();
}
}, 50);
Вот ссылка с полным файлом, если вы хотите, чтобы проверить его. Github: https://github.com/xAlstrat/PhantomJsFunctions/blob/master/aliexlogin.js
Вы действительно должны добавить '&&!timeOut' для обоих условий, а не только для одного из них. –
Я использую версию 2.0.0. Я обновил код с этими событиями, но программа не обнаруживает ошибок. И вы правы с булевым состоянием, спасибо! Я добавил ссылку на весь код в описании вопроса. – Alstrat