Javascript Evaluation failed: ReferenceError: parameter is not defined
Javascript Evaluation failed: ReferenceError: parameter is not defined
我在javascript中写一个函数:
const getContent = async (page, element) => {
const contentStr = await page.evaluate(() => {
const contentEl = document.querySelector(element);
const content = contentEl?.getAttribute("content");
if (content != null && content.length > 0) {
return content;
} else {
return null;
}
});
return contentStr;
};
执行此函数时出现错误:
Error: Evaluation failed: ReferenceError: element is not defined
有人能帮忙吗?
这是puppeteer的函数签名page.evaluate
page.evaluate(pageFunction[, ...args])
如您所见,您可以在调用 page.evaluate 时将参数作为附加参数传递给 pageFunction。这是必要的原因是因为一个执行上下文是 node js 而另一个是 chromium 浏览器和这些上下文 运行 在不同的进程中并且不共享内存,除非你通过 puppeteer 传递变量 api.
所以在你的情况下这可能有效(未测试):
const getContent = async (page, element) => {
const contentStr = await page.evaluate((element) => {
const contentEl = document.querySelector(element);
const content = contentEl?.getAttribute("content");
if (content != null && content.length > 0) {
return content;
} else {
return null;
}
},element);
return contentStr;
};
我在javascript中写一个函数:
const getContent = async (page, element) => {
const contentStr = await page.evaluate(() => {
const contentEl = document.querySelector(element);
const content = contentEl?.getAttribute("content");
if (content != null && content.length > 0) {
return content;
} else {
return null;
}
});
return contentStr;
};
执行此函数时出现错误:
Error: Evaluation failed: ReferenceError: element is not defined
有人能帮忙吗?
这是puppeteer的函数签名page.evaluate
page.evaluate(pageFunction[, ...args])
如您所见,您可以在调用 page.evaluate 时将参数作为附加参数传递给 pageFunction。这是必要的原因是因为一个执行上下文是 node js 而另一个是 chromium 浏览器和这些上下文 运行 在不同的进程中并且不共享内存,除非你通过 puppeteer 传递变量 api.
所以在你的情况下这可能有效(未测试):
const getContent = async (page, element) => {
const contentStr = await page.evaluate((element) => {
const contentEl = document.querySelector(element);
const content = contentEl?.getAttribute("content");
if (content != null && content.length > 0) {
return content;
} else {
return null;
}
},element);
return contentStr;
};