Playwright驱动浏览器
安装 Playwright 时,Playwright默认自动安装了三种浏览器(Chromium、Firefox 和 WebKit)。我们可以驱动这三种浏览器中的任意一种。
使用with上下文管理器
启动chromium浏览器
```python
# '''
# author: 测试-老姜 交流微信/QQ:349940839
# 欢迎添加微信或QQ,加入学习群共同学习交流。
# QQ交流群号:877498247
# 西安的朋友欢迎当面交流。
# '''
from playwright.sync_api import sync_playwright,Playwright,expect
with sync_playwright() as p:
browser = p.chromium.launch(headless=False) # 设置有头模式启动chrome浏览器
context = browser.new_context() # 创建上下文,打开浏览器
page = context.new_page() # 打开标签页
page.goto('127.0.0.1')
page.wait_for_timeout(10000)
context.close()
browser.close()
启动firefox浏览器
```python
# '''
# author: 测试-老姜 交流微信/QQ:349940839
# 欢迎添加微信或QQ,加入学习群共同学习交流。
# QQ交流群号:877498247
# 西安的朋友欢迎当面交流。
# '''
from playwright.sync_api import sync_playwright,Playwright,expect
with sync_playwright() as p:
browser = p.firefox.launch(headless=False) # 设置有头模式启动chrome浏览器
context = browser.new_context() # 创建上下文,打开浏览器
page = context.new_page() # 打开标签页
page.goto('127.0.0.1')
page.wait_for_timeout(10000)
context.close()
browser.close()
启动webkit浏览器
'''
# '''
# author: 测试-老姜 交流微信/QQ:349940839
# 欢迎添加微信或QQ,加入学习群共同学习交流。
# QQ交流群号:877498247
# 西安的朋友欢迎当面交流。
# '''
from playwright.sync_api import sync_playwright,Playwright,expect
with sync_playwright() as p:
browser = p.webkit.launch(headless=False) # 设置有头模式启动chrome浏览器
context = browser.new_context() # 创建上下文,打开浏览器
page = context.new_page() # 打开标签页
page.goto('127.0.0.1')
page.wait_for_timeout(10000)
context.close()
browser.close()
不使用with上下文管理器
# '''
# author: 测试-老姜 交流微信/QQ:349940839
# 欢迎添加微信或QQ,加入学习群共同学习交流。
# QQ交流群号:877498247
# 西安的朋友欢迎当面交流。
# '''
from playwright.sync_api import sync_playwright,Playwright,expect
playwright = sync_playwright().start()
browser = playwright.chromium.launch(headless=False) # 设置有头模式启动chrome浏览器,没执行一个动作等待2秒
context = browser.new_context() # 创建上下文,打开浏览器
page = context.new_page() # 打开标签页
page.goto('127.0.0.1')
page.get_by_text('开源版').click()
page.locator('#account').fill('admin')
page.locator('[name="password"]').fill('Deshifuzhi01')
page.locator('#submit')
page.wait_for_timeout(10000)
context.close()
browser.close()
playwright.stop()
同时打开多个浏览器执行
# '''
# author: 测试-老姜 交流微信/QQ:349940839
# 欢迎添加微信或QQ,加入学习群共同学习交流。
# QQ交流群号:877498247
# 西安的朋友欢迎当面交流。
# '''
from playwright.sync_api import sync_playwright,Playwright,expect
with sync_playwright() as p:
browser = p.chromium.launch(headless=False,slow_mo=1000) # 启动本地的谷歌浏览器,设置有头模式启动chrome浏览器
context1 = browser.new_context() # 创建上下文,打开浏览器
context2 = browser.new_context() # 创建上下文,打开浏览器
page = context1.new_page() # 打开标签页
page2 = context2.new_page() # 打开标签页
page.goto('http://127.0.0.1/zentao/user-login-L3plbnRhby8=.html')
page2.goto('http://127.0.0.1:8080/oa/')
page.locator('#account').fill('admin')
page.locator('[name="password"]').fill('Deshifuzhi01')
page.locator('#submit')
page.wait_for_timeout(10000)
page2.locator('[name="loginId"]').fill('sup')
page2.locator('[name="password"]').fill('s1234567')
page2.locator('#button_submit').click()
page2.wait_for_timeout(10000)
context1.close()
context2.close()
browser.close()
一个浏览器中同时打开多个标签页分别执行
# '''
# author: 测试-老姜 交流微信/QQ:349940839
# 欢迎添加微信或QQ,加入学习群共同学习交流。
# QQ交流群号:877498247
# 西安的朋友欢迎当面交流。
# '''
from playwright.sync_api import sync_playwright,Playwright,expect
with sync_playwright() as p:
browser = p.chromium.launch(headless=False,slow_mo=1000) # 启动本地的谷歌浏览器,设置有头模式启动chrome浏览器
context = browser.new_context() # 创建上下文,打开浏览器
page = context.new_page() # 打开标签页
page2 = context.new_page() # 打开标签页
page.goto('http://127.0.0.1/zentao/user-login-L3plbnRhby8=.html')
page2.goto('http://127.0.0.1:8080/oa/')
page.locator('#account').fill('admin')
page.locator('[name="password"]').fill('Deshifuzhi01')
page.locator('#submit').click()
page.wait_for_timeout(10000)
page2.locator('[name="loginId"]').fill('sup')
page2.locator('[name="password"]').fill('s1234567')
page2.locator('#button_submit').click()
page2.wait_for_timeout(10000)
context.close()
browser.close()
slow_mo减慢执行速度
Playwright 打开浏览器运行脚本的速度那就是一个字:快!相对于selenium,playwright执行速度会更快,眨眼间就完事了。因此为了便于我们查看执行的过程,我们可以加上等待来减缓执行,但是与selenium不同,playwright通过slow_mo (单位是毫秒)减慢执行速度,它的作用范围是全局的,从启动浏览器到操作元素每个动作都会有等待间隔,方便在出现问题的时候看到页面操作情况。使用方法如下:
# '''
# author: 测试-老姜 交流微信/QQ:349940839
# 欢迎添加微信或QQ,加入学习群共同学习交流。
# QQ交流群号:877498247
# 西安的朋友欢迎当面交流。
# '''
from playwright.sync_api import sync_playwright,Playwright,expect
playwright = sync_playwright().start()
browser = playwright.chromium.launch(headless=False,slow_mo=2000) # 设置有头模式启动chrome浏览器,没执行一个动作等待2秒
context = browser.new_context() # 创建上下文,打开浏览器
page = context.new_page() # 打开标签页
page.goto('127.0.0.1')
page.get_by_text('开源版').click()
page.locator('#account').fill('admin')
page.locator('[name="password"]').fill('Deshifuzhi01')
page.locator('#submit')
page.wait_for_timeout(10000)
context.close()
browser.close()
playwright.stop()
以上案例为同步模式驱动浏览器,接下来我们看一下异步模式:
# '''
# author: 测试-老姜 交流微信/QQ:349940839
# 欢迎添加微信或QQ,加入学习群共同学习交流。
# QQ交流群号:877498247
# 西安的朋友欢迎当面交流。
# '''
import asyncio
from playwright.async_api import async_playwright,Playwright,expect
async def run(playwright):
browser =await playwright.chromium.launch(headless=False,slow_mo=1000) # 启动本地的谷歌浏览器,设置有头模式启动chrome浏览器
context =await browser.new_context() # 创建上下文,打开浏览器
page = await context.new_page() # 打开标签页
page2 = await context.new_page() # 打开标签页
await page.goto('http://127.0.0.1/zentao/user-login-L3plbnRhby8=.html')
await page2.goto('http://127.0.0.1:8080/oa/')
await page.locator('#account').fill('admin')
await page.locator('[name="password"]').fill('Deshifuzhi01')
await page.locator('#submit').click()
await page.wait_for_timeout(10000)
await page2.locator('[name="loginId"]').fill('sup')
await page2.locator('[name="password"]').fill('s1234567')
await page2.locator('#button_submit').click()
await page2.wait_for_timeout(10000)
context.close()
browser.close()
async def main() -> None:
async with async_playwright() as playwright:
await run(playwright)
asyncio.run(main())
启动本地浏览器
Playwright启动浏览器时,默认启动Playwright安装的浏览器,如果想要启动本地安装的浏览器,可在启动浏览器时通过channel 指定打开浏览器
Google Chrome 和 Microsoft Edge浏览器都是用的 chromium 内核,所以只需加一个channel=“chrome” 即可打开本地谷歌浏览器(需要将谷歌浏览器安装目录C:\Program Files\Google\Chrome\Application 添加到环境变量Path下)
browser=p.chromium.launch(channel="chrome",headless=False)