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

时间:2017-03-20 21:12:08

标签: javascript web-scraping phantomjs casperjs

使用PhantomJs,我正在尝试创建一个函数,该函数接受选择标记id和选项文本内容的String,并返回相关选项的值。我不确定如何将参数从最外层函数传递给传递给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";
    });
}

1 个答案:

答案 0 :(得分:1)

PhantomJS有很好的文档,包括page.evaluate功能,请务必先检查它。

您的功能可以通过这种方式修复(为简洁起见,删除了console.log):

WHERE t1.Name = @name
AND 
( 
    (          t1.Type      = 1 AND (t1.Amount > 0 AND @valueB < 0) ) 
 OR ( COALESCE(t1.Type, 0) != 1 AND (t1.Amount <= @valueB)          ) 
)