我遇到了我不了解的情况。我正在使用评估函数来返回应用程序中下拉菜单中的链接。我传入一个变量数组,我想用它在下拉列表中检索这些部分的链接。 评估函数在调用时不会运行。我不明白为什么会这样。
这是我的代码,我们将不胜感激。
const selectAccount = await page.evaluate((depositAndCreditAccountIdentifier) => {
console.log(`depositAndCreditAccountIdentifier ${depositAndCreditAccountIdentifier}`);
var returnLinks = [];
for(dn in depositAndCreditAccountIdentifier){
sectionIdentifier = depositAndCreditAccountIdentifier[dn];
var varContainer = $('div[ng-if="' + sectionIdentifier + '"]>div[class="multiselect-collection"]>a');
returnLinks.push(varContainer);
varContainer.each(function(elementIndex){
returnLinks.push(varContainer[elementIndex].getAttribute('data-test'));
});
}
console.log(`returnLinks ${returnLinks}`);
return returnLinks;
}, depositAndCreditAccountIdentifier);
console.log(`selectAccount: ${selectAccount}`);
好的,
我发现它确实执行了将代码记录在浏览器控制台中的信息。感谢这个问题:Puppeteer: pass variable in .evaluate()
看来我的问题是一样的。基于此console.log('returnLinks ${returnLinks}');
,返回中没有任何内容。
我尝试了另一种方法。我正在返回一个Promise(),它再次收集了我正在寻找的所有内容,但没有返回任何内容。
exports.returnLinks = async function(page, sectionIdentifier) {
console.log(`sectionIdentifier: ${sectionIdentifier}`);
await page.evaluate(async (sectionIdentifier) => {
function grabAccountAttributes(sectionIdentifier){
return new Promise((resolve, reject)=> {
var returnLinks = [];
var varContainer = $('div[ng-if="' + sectionIdentifier + '"]>div[class="multiselect-collection"]>a');
console.log(`varContainer: ${varContainer}`);
varContainer.each(function(elementIndex){
var linkItem = varContainer[elementIndex].getAttribute('data-test');
console.log(`linkItem: ${linkItem}`);
returnLinks.push(linkItem);
});
setTimeout(()=>{
resolve(true)
}, 3000);
});
}
var linksAttributes = await grabAccountAttributes(sectionIdentifier);
// console.log(`returnLinks ${returnLinks}`);
return linksAttributes;
}, sectionIdentifier);