TypeError: null не является объектом (оценивается как document.querySelector («input [id $ = 'auth_login_submit']"). Click ») - PullRequest
0 голосов
/ 12 февраля 2020

Доброе утро,

У меня есть проект на 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 создать страницу правильно

...