0

早上好,

我在 Windows 10 上有一个项目。问题是,如果我通过 git bash 的“npm start”运行它,我没有问题,而且效果很好。如果它从 Windows 服务启动,它会返回有问题的错误。(它使用通过“node-windows”创建的 Windows 服务启动。)

TypeError:null 不是对象(评估'document.querySelector("input[id$='auth_login_submit']").click')

我使用 phantomjs,这是脚本代码

"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 启动它一切正常!

注意

db(number, ifSuccess, ifNotSuccess);

这会对数据库进行查询以查看是否一切正常,然后调用这两个函数

编辑1:

经过一些调试后,我发现带有 Windows 服务的 phantomjs 不会创建页面.. 但是使用 git bash 的相同代码可以正确创建页面

4

0 回答 0