PhantomJs 将参数传递给内部函数 page.evaluate

PhantomJs passing parameters to inner function page.evaluate

使用 PhantomJs,我试图创建一个函数,它接受一个 select 标签 ID 和一个选项文本内容的字符串,以及 returns 相关选项的值。我不确定如何将参数从最外层函数传递到传递给 page.evaluate 的函数。以下是我尝试过的方法,但变量在 page.evaluate.

中未定义
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";
    });
}

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 
}