Javascript 木偶演员无法控制第三个标签

Javascript 木偶演员无法控制第三个标签,javascript,node.js,puppeteer,Javascript,Node.js,Puppeteer,我试图让我的木偶脚本打开4个标签,每个标签指向不同的url。我遇到的是,我可以让脚本成功地控制在我的chrome驱动程序中打开的前两个选项卡。然而,每当它进入第三个选项卡时,我都会得到一个错误,即 “(节点:8141)未处理的PromiserEjectionWarning:未处理的承诺 拒绝(拒绝id:1):TypeError:无法读取的属性“goto” 未定义(节点:8141)[DEP0018]弃用警告:未处理的承诺 拒绝是不推荐的。将来,承诺拒绝 not handled将以非零出口终止Nod

我试图让我的木偶脚本打开4个标签,每个标签指向不同的url。我遇到的是,我可以让脚本成功地控制在我的chrome驱动程序中打开的前两个选项卡。然而,每当它进入第三个选项卡时,我都会得到一个错误,即

“(节点:8141)未处理的PromiserEjectionWarning:未处理的承诺 拒绝(拒绝id:1):TypeError:无法读取的属性“goto” 未定义(节点:8141)[DEP0018]弃用警告:未处理的承诺 拒绝是不推荐的。将来,承诺拒绝 not handled将以非零出口终止Node.js进程 代码。”


这些问题可能是由于http错误或浏览版本造成的。请检查下面的链接,这些可能会帮助你

如果是http错误,请尝试

const browser = await puppeteer.launch({ignoreHTTPSErrors: true});
或者,如果它与浏览器相关,请查看此帖子

问题 由于解析为当前打开的所有页面的数组,因此引发错误。如果我们逐行查看,会发生以下情况(假设您从“全新”浏览器开始):

let pages=wait browser.pages();
页面
现在是一个包含一个页面的数组(启动浏览器后的默认空白页面)

等待browser.newPage();
等待browser.newPage();
等待browser.newPage();
等待browser.newPage();
您创建了四个新页面,但这不会自动更新
页面
数组<代码>页面仍然只包含一个页面

wait pages[0].goto(p1,{waitUntil:'load'});
第一个调用的作用是
pages[0]
包含一个页面

wait pages[1].goto(p1,{waitUntil:'load'});
这将抛出一个错误(
无法读取未定义的
的属性“goto”),因为
页面[1]
未定义

修复(和代码改进) 移动行
let pages=wait browser.pages()在使用页面之前,将在代码中调用。要改进代码,您还可以删除一个
浏览器.newPage()
调用,因为已经存在一个页面(现在您实际上有五个打开的页面),为了加快代码速度,您可以使用
承诺。所有

const p1=https://www.page.com/tab1';
常数p2=https://www.page.com/tab2';
常数p3=https://www.page.com/tab3';
常数p4=https://www.page.com/tab4';
常数https://www.test.com';
等待承诺。全部([//立即打开所有页面
browser.newPage(),
browser.newPage(),
browser.newPage(),
]);
let pages=等待浏览器。pages();//现在用四页纸解决
等待页面[0]。转到(p1,{waitUntil:'load'});
等待页面[1].goto(p1,{waitUntil:'load'});
等待页面[2].goto(p1,{waitUntil:'load'});
等待页面[3].goto(p1,{waitUntil:'load'});
const browser = await puppeteer.launch({ignoreHTTPSErrors: true});