фантом js: мой page.evaluate (function ()) не принимает параметры, которые я передаю в качестве значений, и выдает нулевую ошибку - PullRequest
1 голос
/ 19 февраля 2020

Мой код выглядит следующим образом:

var page = new WebPage(), testindex = 0, loadInProgress = false;
var fs = require('fs');        
var sheet = fs.read('courtcalllist.csv').split("\n").map(function(row){
    return row.split(",");});



page.onConsoleMessage = function(msg) {
    console.log(msg);
};

page.onLoadStarted = function() {
    loadInProgress = true;
    console.log("load started");
};

page.onLoadFinished = function() {
    loadInProgress = false;
    console.log("load finished");
};


for (var i = 1; i < sheet.length - 1; i ++ ){ 

        year = sheet[i][8];
        district = sheet[i][9];
        casenumber = sheet[i][10];
var steps = [
    function () {//first function to open page 
        page.open("http://www.cookcountyclerkofcourt.org/CourtCaseSearch/CourtCallSearch.aspx");
    }, //first function bracket

    function () {// second function calls page to evaulate page input 

         page.evaluate(function(year, district, casenumber) {  
                    console.log("this is my test " + year, district, casenumber);

                    document.getElementById('ctl00_MainContent_txtCaseYear').value = year;  //'2018';
                    document.getElementById('ctl00_MainContent_txtCaseCode').value =  district;//'M3';
                    document.getElementById('ctl00_MainContent_txtCaseNumber').value = casenumber;//'005338';
                    return;

        },year, district, casenumber);

     }, //2nd function bracket
     function () { // 3rd function calls evaluate click 
        //click 
        page.evaluate(function() {

            document.getElementById('ctl00_MainContent_btnSearch').click();

        });
      }, //3rd function bracket 
      function  () { // 4th function calls the 2nd page after data
        // Output content of page to stdout after form has been submitted
        page.evaluate(function() {
            for (i = 1; i < 11; i++ ){
            console.log(document.querySelectorAll('td')[i].innerHTML);
        }
        });
    } //4thbracket 

];

    interval = setInterval(function() {
      if (!loadInProgress && typeof steps[testindex] == "function") {
        console.log("step " + (testindex + 1));
        steps[testindex]();
        testindex++;
      }
      if (typeof steps[testindex] != "function") {
        console.log("test complete!");
        phantom.exit();
      }
    }, 50);

}

По какой-то причине console.log будет печатать переменные, которые я передаю, так:

this is my test 2018 M3 005338

Что правильно, вот что Мне нужно, чтобы это было, но когда они оценены, я получаю:

TypeError: null is not an object (evaluating 'document.getElementById('ctl00_MainContent_txtCaseYear').value = year')

  undefined:3

Приведенный выше код работает, если я жестко закодирую в нем свои значения. Это то, что закомментировано, но это не займет переменные я даю это.

Моя переменная превращается из строки в объект, поэтому она не может быть прочитана? Я в растерянности, я даже пытался

                        document.getElementById('ctl00_MainContent_txtCaseYear').value = year.toString;
                        document.getElementById('ctl00_MainContent_txtCaseCode').value =  district.toString;
                        document.getElementById('ctl00_MainContent_txtCaseNumber').value = caenumber.toString;

И это просто возвращает мне ту же ошибку.

1 Ответ

1 голос
/ 21 февраля 2020
function () {
        page.evaluate(function(string1, string2, string3) {
             console.log("this is my test " + String(string1) + String(string2)  + String(string3));//, district, casenumber);
             document.getElementById('ctl00_MainContent_txtCaseYear').value = String(string1);//'2002';
            // console.log("this is my test " + String(string2));
             document.getElementById('ctl00_MainContent_txtCaseCode').value =  String(string2);//'M1';//
           //  console.log("this is my test " + String(string3));
             document.getElementById('ctl00_MainContent_txtCaseNumber').value = String(string3);//'144115'; // 
             return;
    },year, district, casenumber);

Как вы передаете переменные. Обратите внимание на аргументы go в конце, и они должны быть записаны как-то еще внутри функции ()

...