Доброе утро,
У меня есть проект на windows 10. Проблема в том, что если я запустил его через "npm start" с git bash, у меня нет проблем и это работает отлично. Если он запускается из службы windows, возвращается соответствующая ошибка. (Он запускается с помощью службы windows, созданной с помощью "node- windows".)
TypeError: null не является объектом (оценивает document.querySelector ("input [id $ =") 'auth_login_submit'] "). click ')
Я использую фантом js, и это код сценария
"use strict";
var phantom = require('phantom');
var http = require('http');
var db = require('../database/users_db');
var loadInProgress =false;
var _ph;module.exports = function(url, number) {
var _page;
console.log("auto-confirm...");
console.log(url);
phantom
.create(["--ignore-ssl-errors=yes"])
.then( ph => {
_ph=ph;
return ph.createPage()
})
.then( page => {
console.log("dovrei aver creato la pagina...");
_page = page;
return page.open(url);
})
.then( status =>{
var page = _page;
console.log("inject");
page.injectJs('./mail/jquery.js');
page.on("onConsoleMessage",function(msg) {
console.log(msg);
});
page.on('onLoadStarted',function() {
loadInProgress = true;
console.log("load started");
});
var countload = 0;
var interval;
page.on('onLoadFinished',function(result) {
countload+=1;
if(countload>=2){
console.log(`chiamata onloadfinished ${countload}`);
clearInterval(interval);
return;
}
loadInProgress = false;
console.log("load finished");
console.log(result);
var conferma= function(result) {
console.log("sono nella funzione");
console.log(result);
var cont=0;
var ifSuccess = function() {
console.log("ifSuccess");
interval = setInterval(function() {
cont=cont+1;
var page = _page;
page.evaluate(function() {
console.log("sono nella page-evaluate");
if(!document)
{
console.log("documento non trovato");
return false};
if(!document.querySelector("button[id$='confirm_submit']"))
{
console.log("non ho trovato il tasto confirm");
//return new Error("ERRORE GRAVISSIMOOOOO");
//return false;
}
document.querySelector("button[id$='confirm_submit']").click();
return true;
})
.then(()=>{
console.log("sono nella .then");
clearInterval(interval);
})
.catch(e => {
console.log("sono nella catch");
console.error(e)});
if (cont>=3)
{
console.log("Sono nella if cont della then");
clearInterval(interval);
_ph.exit();
}
}, 5000);
};
var ifNotSuccess = function() {
console.log("not success");
interval = setInterval(function() {
cont=cont+1;
var page = _page;
page.evaluate(function() {
if(!document)
{
console.log("documento non trovato");
return false;}
if(!document.querySelector("button[id$='register_reject']"))
{
console.log("bottone reject non trovato");
return false;
}
document.querySelector("button[id$='register_reject']").click();
return true;
}, function(answer) {
console.log("callback ifNOTSuccess");
if(answer) {
clearInterval(object);
/* setTimeout(function() {
console.log("controllo seconda exit");
phhantom.exit();
},6000);*/
}
})
.then(()=>{
console.log("sono nella .then");
if (cont>=3)
{
console.log("Sono nella if cont della then");
clearInterval(interval);
_ph.exit();
}
})
.catch(e => {
console.log("sono nella catch ifnotsuccess");
console.error(e)});
}, 5000);
};
page.on('onLoadFinished',function() {
console.log("callback onloanfinished");
//console.log(phantom);
setTimeout(()=> {
console.log('timeout completed');
// console.log(_ph);
page.close();
_ph.exit();
},600);
});
db(number, ifSuccess, ifNotSuccess);
}
conferma(result);
});
var result= page.evaluate(function() {
console.log("Pagina credenziali...");
$("input[id$='auth_login_username']").val('XXXX');
console.log("username");
console.log($("input[id$='auth_login_username']").value);
$("input[id$='auth_login_password']").val('XXXX');
console.log("password");
document.querySelector("input[id$='auth_login_submit']").click();
console.log("login");
return true;
});
})
.catch(e => {
console.log("sono nella catch finale");
console.error(e)})
проблема может возникнуть здесь:
document.querySelector("input[id$='auth_login_submit']").click();
но я повторяю, начиная с git bash все работает!
NB
db(number, ifSuccess, ifNotSuccess);
Это делает запросы к БД, чтобы увидеть, все ли хорошо и затем вызывает две функции
EDIT 1:
после некоторой отладки, я обнаружил, что фантом js с сервисом windows не создает страницу .. но тот же код с git bash создать страницу правильно