Веб-сайт, который я использую Phantom JS для входа в систему и очистки таблицы, был недавно обновлен, и новая версия, похоже, требует, чтобы нажатия клавиш фактически выполнялись в полях имени пользователя и пароля для входа в систему сейчас.
Мой старый код выглядит следующим образом:
var page = require('webpage').create();
phantom.cookiesEnabled = true;
page.open("https://website.location.com/log", function(status) {
if (status === "success") {
page.evaluate(function() {
document.getElementsByName("username")[0].value = "uname";
document.getElementsByName("password")[0].value = "pass12";
document.getElementsByTagName("button")[0].click();
});
window.setTimeout(function() {
page.render("page.png");
page.open("https://website.location.com/log/#!/activity/search", function(status) {
window.setTimeout(function() {
page.render("profil.png");
console.log(page.content);
phantom.exit();
}, 5000);
});
}, 5000);
}
});
Старый код прекрасно работал со старым логином на странице и выводом console.log правильно в сценарий, который вызывал этот фантомный js код, но теперь я Я не уверен, где go отсюда. Я пытался использовать page.sendEvent ('keypress', page.event.key.U) несколькими различными способами, но каждый раз, когда я вставляю этот бит, кажется, он зависает. Когда я загружаю страницу, курсор автоматически попадает в правильное поле, но в противном случае я решил, что с помощью табуляции следует переключиться на следующее поле, и команда ввода сможет ввести мои данные.
Пример того, что я пробовал
var page = require('webpage').create();
phantom.cookiesEnabled = true;
page.open("https://website.location.com/log", function(status) {
if (status === "success") {
page.evaluate(function() {
page.sendEvent('keypress', page.event.key.U);
page.sendEvent('keypress', page.event.key.N);
page.sendEvent('keypress', page.event.key.A);
page.sendEvent('keypress', page.event.key.M);
page.sendEvent('keypress', page.event.key.E);
page.sendEvent('keypress', page.event.key.Tab);
page.sendEvent('keypress', page.event.key.P);
page.sendEvent('keypress', page.event.key.A);
page.sendEvent('keypress', page.event.key.S);
page.sendEvent('keypress', page.event.key.S);
page.sendEvent('keypress', page.event.key.1);
page.sendEvent('keypress', page.event.key.2);
document.getElementsByTagName("button")[0].click();
});
window.setTimeout(function() {
page.render("page.png");
page.open("https://website.location.com/log/#!/activity/search", function(status) {
window.setTimeout(function() {
page.render("search.png");
console.log(page.content);
phantom.exit();
}, 5000);
});
}, 5000);
}
});
Я также пробовал некоторые варианты, подобные этой, которые не кажутся лучше:
page.sendEvent('keypress', "uname");
page.sendEvent('keypress', page.event.key.Tab);
page.sendEvent('keypress', "pass12");
page.sendEvent('keypress', page.event.key.Enter);