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
}
使用 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
}