javascript - puppeteer page.evaluate() 的返回值
问题描述
所以,我有一个函数返回page
下一个函数所需的函数:
async function browser(){
const browser = await puppeteer.launch({args: ['--no-sandbox', '--disable-setuid-sandbox'], headless: false, devtools : true});
const incog = await browser.createIncognitoBrowserContext();
const page = await incog.newPage();
await page.goto('web')
.then(function(){
page.evaluate(function(){
$(document).ready(function(){
$('input[name ="username"]').val("a");
$('input[name ="password"]').val("b");
$(document).ready(function(){
$('#loginbtn').click();
});
});
});
});
await page.waitForNavigation({waitUntil : 'load'});
return page;
所以,我通过browser()
这样做
browser().then(result => nextFunction(result)
最终将页面传递到nextFunction()
async function nextFunction(page){
await page.goto('web')
.then(function(){
var msg = "Test : \n\n";
page.evaluate(function(){
var num = 1;
$('.card').each(function(i, e){
msg += "======= Activity "+num+" ========\n";
msg += "Subject : " + $(this).find('.name').text() + "\n";
msg += "Due : " + $(this).find('.date').text() + "\n";
msg += "===== End Activity "+num+" ======\n\n";
num++;
});
});
console.log(msg);
});
}
我试图从 打印msg
,nextFunction()
但它只打印Test:
我试图实现的是:msg
从返回值获取结果或分配变量nextFunction()
有没有解决方案或更好的方法来做到这一点?
解决方案
- 要获得更简洁的代码和更轻松的故障排除,请选择一条通道,异步/等待或与
then
. 两者都使用会使代码难以阅读。async/await 更易读,错误处理更简单。在这里阅读更多 - 要在 中查看
console.log
,请evaluate
收听“控制台”事件:
const page = await browser.newPage();
page.on('console', msg => console.log(msg.text()));
page.evaluate
context 与 Puppeteer 是分开的,所以评估的msg
将是undefined
. 移动msg
进行评估,然后将结果返回给 puppeteer。
let msg = await page.evaluate(function(){
let msg = "Test : \n\n";
let num = 1;
$('.card').each(function(i, e){
msg += "======= Activity "+num+" ========\n";
msg += "Subject : " + $(this).find('.name').text() + "\n";
msg += "Due : " + $(this).find('.date').text() + "\n";
msg += "===== End Activity "+num+" ======\n\n";
num++;
});
return msg;
});
推荐阅读
- content-management-system - Opencart:安装后模块不显示
- python - 有没有办法在同一个列表上进行多次插入?
- python - 在 Tensorflow 2 中手动设置 trainable_variables 权重
- c# - Unity Editor 场景为黑色
- reactjs - ant 子菜单无法更改为垂直
- javascript - 网格容器内的卡片:列表中的每个孩子都应该有一个唯一的“key”道具
- bash - 作为兄弟运行 docker
- c++ - C++ 无法打开源文件“time.h”
- macos - 无论如何在MacOS中隐藏菜单栏项目?
- swift - 可选发布者的默认空值扩展?