【发布时间】:2020-10-27 16:50:06
【问题描述】:
“很可能是由于页面导航”
我尝试使用的页面具有以下行为。要获得我想要的内容,我必须单击一个按钮。但是在单击该按钮时,我想要的内容会加载到新选项卡上。我当前所在的标签导航到一个无用的广告。当我尝试对“page”(page.eval,page.url())做任何事情时,它给了我上面的错误(实际的浏览器给出了一个关于页面已被永久移动的错误)。
如何让 puppeteer 跟随新标签而不是卡在旧标签上?
我尝试使用 puppeteer newPage 和 goto 创建一个单独的第三个选项卡,这有点用,但是会遇到其他问题。我正在寻找一种不同的方式。
编辑:
我按照下面的答案做了这个:
const [newPage, oldPage] = await Promise.all([getNewPage(), getOldPage()]);
console.log("new page", newPage.url());
console.log("old page", oldPage.url());
function getOldPage() {
return new Promise((resolve) => {
page.evaluate(function () {
let element = document.querySelector("button[class*=OfferCta__]");
element.click();
});
resolve(page);
});
}
function getNewPage() {
return new Promise((resolve) => {
browser.on("targetcreated", checkNewTarget);
function checkNewTarget(target) {
if (target.type() === "page") {
browser.off("targetcreated", checkNewTarget);
resolve(target.page());
}
}
});
}
没有用。我得到了这个控制台:
3:17:40 PM web.1 | new page https://www.nike.com/register?cid=4942550&cp=usns_aff_nike__PID_2210202_WhaleShark+Media%3A+RetailMeNot.com&cjevent=3a020cab18a211eb830d00030a1c0e0c
3:17:40 PM web.1 | old page chrome-error://chromewebdata/
所以当 Promise 检查我需要的旧网址时,它已经出错了。
编辑: 事实证明,当我试图阻止第三方脚本时,我阻止了导航请求。这导致我的按钮按下失败。
【问题讨论】:
标签: javascript node.js web-scraping automation puppeteer