用playwright爬虫经常需要打开浏览器页面,比如模仿点击超链接的动作,都需要打开新的窗口。本文中总结了test
中打开浏览器窗口的方式。
打开超链接一般会有两种需求或场景:
- 一是打开新的窗口
- 一是在当前窗口中打开某个连接
下列是一个test
的示例,这个示例演示的是遍历一个存放链接地址的数组arr,并依次在新的窗口中打开。执行完操作后,将打开的该页面关闭。
test("get started link", async({ page, context }) => {
test.setTimeout(100 * 60 * 1000)
for(let i = 0; i < arr.length; i++) {
const url = arr[i]
const new_page = await context.newPage(); // 创建新的页面
await new_page.goto(url) // 在新的页面中打开某个地址
await new_page.waitForLoadState('domcontentloaded')
// ...do something
await new_page.close()
}
})
可以看到,test
中自带两个参数:page
和context
,page
就是当前的浏览器窗口页面,context
是浏览器上下文。
在当前页面打开
如是在当前页面中打开,则直接使用page.goto(url)
即可。完整示例如下:
test("get started link", async({ page, context }) => {
test.setTimeout(100 * 60 * 1000)
for(let i = 0; i < len; i++) {
const url = arr[i]
await page.goto(url)
await new_page.waitForLoadState('domcontentloaded')
// ...do something
}
})
这个时候就不能够将页面关闭了。
打开新的窗口
打开新的窗口可以通过context
创建一个新的页面,然后再在该新的页面中打开指定的连接。具体实现方式如第一段代码所示,核心代码为:
const new_page = await context.newPage(); // 创建新的页面
await new_page.goto(url) // 在新的页面中打开某个地址
这种场景,在该页面不需要时,可以将打开的页面关闭,关闭方法为:await new_page.close()
题外
不使用test
时的方式和test同样的方法