我有一个 React/Redux 应用程序,我正在使用 Puppeteer 进行测试。根据文档,我使用以下代码来显示控制台输出:
page.on('console', msg => {
for(let i = 0; i < msg.args().length; ++i) {
let text = msg.args()[i];
console.log(`${i}: ${text}`);
}
});
Run Code Online (Sandbox Code Playgroud)
但是,当 redux-logger 将对象记录到控制台(prevState、nextState)时,Puppeeter 会改为显示JSHandle@object在我的控制台输出中。如何查看此对象中的键和属性?
有人可以解释为什么这段代码不起作用。在运行之前我有一个控制台日志,它page.evaluate()记录了我期望的内容,但里面的控制台日志page.evaluate从未运行。
const puppeteer = require('puppeteer');
(async () => {
try {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://www.example.com');
page.on('response', async response => {
const url = response.url();
if (url.includes('something')) {
console.log('this code runs');
await page.evaluate(() => {
console.log("this code doesn't run");
});
}
});
} catch (err) {
console.log(err);
}
})();
Run Code Online (Sandbox Code Playgroud) 我一直看到这个错误代码
page.on('console', msg => console.log(msg.text()));
Run Code Online (Sandbox Code Playgroud)
这失败
console.log('Hello %s', 'World');
Run Code Online (Sandbox Code Playgroud)
产生
Hello World // browser
Hello %s World // puppeteer
Run Code Online (Sandbox Code Playgroud)
好,所以我想也许我可以做到
page.on('console', msg => console.log(...msg.args()));
Run Code Online (Sandbox Code Playgroud)
NOPE:那倒掉了一些巨大的JSHandle东西。
好吧,也许
page.on('console', msg => console.log(...msg.args().map(a => a.toString());
Run Code Online (Sandbox Code Playgroud)
NOPE:打印
JSHandle: Hello %s JSHandle: World
Run Code Online (Sandbox Code Playgroud)
我想我可以通过删除前9个字符来破解它。
我也试过
page.on('console', msg => console.log(...msg.args().map(a => a.jsonValue())));
Run Code Online (Sandbox Code Playgroud)
NOPE:打印
Promise { <pending> } Promise { <pending> }
Run Code Online (Sandbox Code Playgroud)
好吧
page.on('console', async(msg) => {
const args = Promise.all(msg.args().map(a => a.jsonValue()));
console.log(...args);
});
Run Code Online (Sandbox Code Playgroud)
不,那是打印
UnhandledPromiseRejectionWarning: TypeError: Found non-callable @@iterator
UnhandledPromiseRejectionWarning: Unhandled …Run Code Online (Sandbox Code Playgroud) 有没有一种方法可以在 Puppeteer 中的主进程和渲染器进程之间进行通信,类似于Electron 中的ipcMain和ipcRenderer函数。
这篇文章展示了一个简单的应用程序。我发现此功能可通过触发从page主函数到主函数的事件进行调试,反之亦然。
为什么我无法看到的console.log在我的消息page.evaluate,page.$,page.$$,page.$eval,page.$$eval
并不能以访问变量的是?
let variable = 0;
const divColors = await page.evaluate(() => {
const divs = Array.from(document.querySelectorAll('.map-filters div'));
let text = divs.map((element, index) => {
console.log(element.textContent)
variable =1;
return element.style.color;
})
return text;
})
Run Code Online (Sandbox Code Playgroud)
为什么我不能做variable=1,console.log(element.textContent)在这个例子中?
我在从 devoloper 工具的控制台日志中已存在的站点获取数据时遇到问题。我是 Puppeteer 的新手,所以我试图获取所有这些控制台日志结果,但它们都有字符串类型。你们能帮我找到一种方法来获取真实的对象或者一种解析它并使用它的方法吗,谢谢
puppeteer ×6
javascript ×5
node.js ×2
automation ×1
jestjs ×1
reactjs ×1
redux ×1
testing ×1
web-scraping ×1