2017-03-20 14 views
2

PhantomJを使用して、選択タグidとオプションのテキストコンテンツのStringを取得し、関連するオプションの値を返す関数を作成しようとしています。一番外側の関数からpage.evaluateに渡された関数にパラメータを渡す方法がわかりません。以下は私が試したことですが、変数はpage.evaluateの中で未定義として出てきます。PhantomJsが内部関数にパラメータを渡していますpage.valuate

function getOptionValue(selectID, name) 
{ 
    console.log("Select ID: " + selectID); 
    console.log("name: " + name); 

    return tempPage.evaluate(function(selectID, name) { 
     console.log("SELECT ID: " + selectID); 
     var elem = document.getElementById(selectID); 
     console.log("elem type: " + elem.type); 
     for(var i = 0; i < elem.length; i++) 
     { 
      if(elem.options[i].text.toLowerCase() === name.toLowerCase()) 
      { 
       return elem.options[i].value; 
      } 
     } 

     return "nothing"; 
    }); 
} 

答えて

0

PhantomJSはpage.evaluate機能を含む優れたドキュメントを、持って、常に最初にそれを必ず確認してください。

あなたの関数は、この方法(簡潔にするために取り外さにconsole.log)に固定することができます。

function getOptionValue(selectID, name) 
{ 
    return tempPage.evaluate(function(selectID, name) { 

     var elem = document.getElementById(selectID); 
     for(var i = 0; i < elem.length; i++) 
     { 
      if(elem.options[i].text.toLowerCase() === name.toLowerCase()) 
      { 
       return elem.options[i].value; 
      } 
     } 

     return "nothing"; 
    }, selectID, name); // <-- parameters are passed to page.evaluate after the function 
}