将 Puppeteer 页面作为函数中的参数传递未按预期工作
Passing Puppeteer page as params in a function is not working as expected
简介
loginLinkedin
将我带到登录页面,然后 return 为我打开 puppeteer 页面,然后分配给 root,这样我仍然可以有更多的选择来使用它。
const root = await loginToLInkined("https://www.linkedin.com/login");
await root.goto(url);
max_page = await getMaxPage(root);
console.log("max page",max_page)
然后我goto(url)
url
是我需要去的另一个页面。
之后我用 root 作为参数调用 getMaxPage(root)
这样我就可以 evaluate()
在那个函数中
问题
const getMaxPage = async root => {
const maxPage = await root.evaluate(()=> {
return document.querySelector(
"li.artdeco-pagination__indicator:nth-last-Child(1)"
);
});
console.log(maxPage)
return parseInt(maxPage.innerText);
};
问题是,当我 console.log(maxPage) 它 return 未定义时,我意识到添加 root s 参数实际上并没有按照我应该做的方式工作。
我做错了什么以及如何正确完成。
请注意,我实际上已经尝试 root.evaluate 而不添加函数并将根作为参数添加,它实际上 return 为我编辑了 maxpage
问题出在 你 return 来自 page.evaluate()
:
const maxPage = await root.evaluate(()=> {
return document.querySelector(
"li.artdeco-pagination__indicator:nth-last-Child(1)"
);
});
这是一个DOM节点,是一个复杂对象,不能serialized,return值必须可序列化为了从 Chromium returned 回到节点。
因此,为了解决这个问题和所有未来的脚本,只需 return 仅需要和可以 JSON.stringify
编辑而不会出错的内容。正如 pguardiario 在评论中正确指出的那样,在这种情况下,从该节点 return innerText
就足够了:
const maxPage = await root.evaluate(()=> {
return document.querySelector("li.artdeco-pagination__indicator:nth-last-Child(1)").innerText;
});
简介
loginLinkedin
将我带到登录页面,然后 return 为我打开 puppeteer 页面,然后分配给 root,这样我仍然可以有更多的选择来使用它。
const root = await loginToLInkined("https://www.linkedin.com/login");
await root.goto(url);
max_page = await getMaxPage(root);
console.log("max page",max_page)
然后我goto(url)
url
是我需要去的另一个页面。
之后我用 root 作为参数调用 getMaxPage(root)
这样我就可以 evaluate()
在那个函数中
问题
const getMaxPage = async root => {
const maxPage = await root.evaluate(()=> {
return document.querySelector(
"li.artdeco-pagination__indicator:nth-last-Child(1)"
);
});
console.log(maxPage)
return parseInt(maxPage.innerText);
};
问题是,当我 console.log(maxPage) 它 return 未定义时,我意识到添加 root s 参数实际上并没有按照我应该做的方式工作。
我做错了什么以及如何正确完成。
请注意,我实际上已经尝试 root.evaluate 而不添加函数并将根作为参数添加,它实际上 return 为我编辑了 maxpage
问题出在 你 return 来自 page.evaluate()
:
const maxPage = await root.evaluate(()=> {
return document.querySelector(
"li.artdeco-pagination__indicator:nth-last-Child(1)"
);
});
这是一个DOM节点,是一个复杂对象,不能serialized,return值必须可序列化为了从 Chromium returned 回到节点。
因此,为了解决这个问题和所有未来的脚本,只需 return 仅需要和可以 JSON.stringify
编辑而不会出错的内容。正如 pguardiario 在评论中正确指出的那样,在这种情况下,从该节点 return innerText
就足够了:
const maxPage = await root.evaluate(()=> {
return document.querySelector("li.artdeco-pagination__indicator:nth-last-Child(1)").innerText;
});