- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个正在使用 Puppeteer 测试的 React/Redux 应用程序。根据文档,我使用以下代码来显示控制台输出:
page.on('console', msg => {
for(let i = 0; i < msg.args().length; ++i) {
let text = msg.args()[i];
console.log(`${i}: ${text}`);
}
});
但是,当 redux-logger 将对象记录到控制台(prevState、nextState)时,Puppeeter 会在我的控制台输出中显示 JSHandle@object
。如何查看此对象中的键和属性?
最佳答案
你可以通过 await
从 JSHandle
获取 args
。
接下来对我来说最好的方法是描述来自浏览器的错误并捕获所需类型的 console
通知:
import { ConsoleMessage, Page, JSHandle } from 'puppeteer';
const chalk = require('chalk');
export const listenPageErrors = async (page: Page) => {
// make args accessible
const describe = (jsHandle) => {
return jsHandle.executionContext().evaluate((obj) => {
// serialize |obj| however you want
return `OBJ: ${typeof obj}, ${obj}`;
}, jsHandle);
}
const colors: any = {
LOG: chalk.grey, // (text: any) => text,
ERR: chalk.red,
WAR: chalk.yellow,
INF: chalk.cyan,
};
// listen to browser console there
page.on('console', async (message: ConsoleMessage) => {
const args = await Promise.all(message.args().map(arg => describe(arg)));
// make ability to paint different console[types]
const type = message.type().substr(0, 3).toUpperCase();
const color = colors[type] || chalk.blue;
let text = '';
for (let i = 0; i < args.length; ++i) {
text += `[${i}] ${args[i]} `;
}
console.log(color(`CONSOLE.${type}: ${message.text()}\n${text} `));
});
}
将它放在 const page = await browser.newPage();
和 page.goto(URL)
之间,它将正常工作
const page = await browser.newPage();
await listenPageErrors(page); // <- like there
page.goto(URL)
关于javascript - Puppeteer console.log - 如何查看 JSHandle@object 内部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51676159/
我正在尝试抓取一个单页网站。有多种选择组合会导致不同的搜索重定向。我在 page.evaluate 中写了一个 for 循环的回调函数来点击不同的选择,并在每个按钮中进行点击搜索。但是,我收到错误:将
我正在从 select -> option 中选择选项,每次重新加载页面时,首先单击下拉菜单时,我会收集所有要选择的元素句柄。我想经历所有这些。我只能选择第一个,然后出现此错误: JSHandles
我一直在阅读 Puppeteer API 文档,他们有 jsHandle 和 elementHandle(他们说这是 jsHandle 的扩展)。 好像page.evaluateHandle page
我可以很好地传递 native 对象(字符串、列表、数字等),但每当我尝试传递 JSHandle 或 ElementHandle 时,我都会收到此错误消息:“TypeError:将循环结构转换为 JS
我有一个正在使用 Puppeteer 测试的 React/Redux 应用程序。根据文档,我使用以下代码来显示控制台输出: page.on('console', msg => { for(le
我可以很好地传递 native 对象(字符串、列表、数字等)或 JSHandle(感谢 @hardkoded),但不知道如何同时低音这两个对象 这是我现在的代码,字符串 (deployName) 硬编
我是一名优秀的程序员,十分优秀!