puppeteer操作dom元素跳转页面遇到的问题
一般的跳转方式
// 创建页面对象
let page = await browser.newPage()
// 使用页面对象的goto方法进行跳转
await page.goto(url)
使用page.goto跳转到页面后,我们就可以使用选择器操作dom元素了。
操作dom元素跳转页面
页面中有a标签,那么我们可以获取到a标签了再使用点击事件触发跳转。但是有个问题:跳转后,page对象还是原来的页面对象。我们如果继续使用原来的page对象肯定是无法使用选择器获取新页面的dom的。
可以在跳转后更新page对象,代码如下:
await page.waitForSelector('tbody')
const link = await page.$('tbody a[target="_blank"]');
const newPagePromise = new Promise(x => browser.once('targetcreated', target => x(target.page()))); // 声明变量
await link.click(); // 点击跳转
let newPage = await newPagePromise; // newPage就是a链接打开窗口的Page对象
return newPage;
还可以使用page.waitForNavigation([options]),相关文档:puppeteerjs中文文档
const [response] = await Promise.all([
page.waitForNavigation(), // The promise resolves after navigation has finished
page.click('a.my-link'), // 点击该链接将间接导致导航(跳转)
]);
参考
[1]:https://segmentfault.com/q/1010000019135401