launch
方法打开的,可以传入 launchOptions,是否 headless 就是通过这个 launchOptions 控制;newContext
方法创建的,可以传入很多 options,包括 isMobile、viewport、userAgent 等,通过 Playwright.devices["iPhone 12"]
拿到的对象其大部分属性可作为 options 的属性(如下所示,除了 defaultBrowserType
),options 中没有 incognito 相关属性,因为 newContext 默认就创建隐私 context:{
userAgent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.0 Mobile/15E148 Safari/604.1',
viewport: { width: 390, height: 664 },
screen: { width: 390, height: 844 },
deviceScaleFactor: 3,
isMobile: true,
hasTouch: true,
defaultBrowserType: 'webkit'
}
newPage
方法创建,如果通过 browser 的 newPage 方法创建,也可以接受很多 options,大概和 newContext 可接受的 options 一样,如果通过 context 的 newPage 方法创建,则不能传入 options,因为这时候创建的 page 会自动继承 context 的 options;page.goto
,注意不要用 page.$
或 page.$$
等返回值是 ElementHandle 的那些方法,因为官方建议使用 Locator;APIRequestContext.get()
等返回 APIResponse 对象,它有 body 等方法;page.on('request')
进行监测,对于 response,需要 page.on('response')
。page.locator()
创建,它有很多方法;page.locator()
接受一个 selector 参数,这个参数非常多变; await page.locator("text=新闻").getAttribute("href");
这行代码中,page.locator("text=新闻")
返回 Locator,getAttribute()
就是这个 Locator 的方法,返回被 select 的元素的 href 属性值;page.locator()
返回了多个 Locator,即选中了多个元素,那 Locator 的某些方法无法被正常调用,例如 click 方法,因为通常我们不会同时 click 多个 Locator,Locator 的某些方法,例如 count、allTextContents 等方法可以使用,详情。通常建议你熟悉哪个就用哪个,但如果你都熟悉,或者都不熟悉需要重新学习,那优先考虑 Playwright。根据 Crawlee 开发者的说法,大多数情况下 Playwright 都好过 Puppeteer,它们的一个显著区别是:
The big difference between them is that Playwright will automatically wait for elements to appear, whereas in Puppeteer, you have to explicitly wait for them. 出处
相关文章: