如何从 puppeteer 获取返回值? [复制]
Posted
技术标签:
【中文标题】如何从 puppeteer 获取返回值? [复制]【英文标题】:How do I get the return value from puppeteer? [duplicate] 【发布时间】:2021-10-04 18:40:06 【问题描述】:当以下构建运行时,我收到错误“错误:评估失败:ReferenceError:块未定义”作为控制台响应。在下一行中,我可以通过 console.log 访问 chunk[a],但是为什么我无法在 frame.evaluate 中访问呢?
const puppeteer = require('puppeteer');
const chunk= ["google.com","facebook.com","gmail.com","***.com"];
(async () =>
for(var a=0;a<chunk.length;a++)
const browser = await puppeteer.launch(headless:false)
const page = await browser.newPage();
const iframeHandle = await page.$("frame[name='main']");
const frame = await iframeHandle.contentFrame();
console.log(chunk[a]);
await frame.evaluate(() =>
if(document.querySelector("#content > table").innerhtml.indexOf(chunk[a]) > -1)
console.log(chunk[a]);
);
)()
结果:google.com 评估失败:ReferenceError:未定义块
【问题讨论】:
evaluate
的回调被序列化并在浏览器控制台中执行。这与您的 Node 应用程序完全不同,因此您必须使用 docs、frame.evaluate(chunk => ..., chunks[a])
中描述的 args
参数将可序列化数据传递给它(我会将 chunk
复数,因为它是一个数组)。
【参考方案1】:
我将块移动到异步中,chunk is not defined
消失了。但是,这次发生了关于您要访问的元素的另一个错误。我也尝试通过添加.waitForSelector
和删除page.$
来纠正这个问题,但我认为第三个错误是由于元素路径("frame[name='main']")
拼写错误造成的。您可以更改它并使用以下代码进行尝试:
(async () =>
const chunk= ["google.com","facebook.com","gmail.com","***.com"];
for(var a=0;a<chunk.length;a++)
const browser = await puppeteer.launch(headless:false)
const page = await browser.newPage();
const iframeHandle = await page.waitForSelector("frame[name='main']");
const frame = await iframeHandle.contentFrame();
console.log(chunk[a]);
await frame.evaluate(() =>
if(document.querySelector("#content > table").innerHTML.indexOf(chunk[a]) > -1)
console.log(chunk[a]);
);
)()
【讨论】:
以上是关于如何从 puppeteer 获取返回值? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 fetch 从 Promise 回调中返回返回值? [复制]
为啥从函数返回数组作为参数时,我会从函数中的数组中获取随机值? [复制]