Playwright
Playwright是微软源的一个Web测试和自动化框架。支持 Chromium、Firefox和WebKit浏览器,Linux、macOS和Windows平台,Python、.NET和Java等多语言。
简介
时间轴
安装
安装Python版本:
# 安装pytest插件版playwright
# pip install pytest-playwright
# 安装Pytest
pip install playwright
# 安装所有支持的浏览器及配置驱动
# playwright install
# 只安装chrome浏览器及配置驱动,使用playwright install -h可以查看帮助
# 目前支持chromium, chrome, chrome-beta, msedge, msedge-beta, msedge-dev, firefox, webkit浏览器。
playwright install chrome
快速入门
同步模式
from playwright.sync_api import sync_playwright
playwright = sync_playwright().start()
# 使用playwright.chromium, playwright.firefox or playwright.webkit
# 默认无界面模式,launch使用headless=False设置有界面
browser = playwright.firefox.launch(headless=False)
page = browser.new_page()
page.goto("https://www.baidu.com")
page.screenshot(path="截图.png")
browser.close()
playwright.stop()
更常用使用with语句:
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.firefox.launch(headless=False)
page = browser.new_page()
page.goto("https://www.baidu.com/")
# 输入框输入文字
# page.locator('//input[@id="kw"]').fill('playwright')
page.fill('//input[@id="kw"]', 'playwright')
# 点击搜索按钮
# page.locator('//input[@id="su"]').click()
page.click('//input[@id="su"]')
# 延迟5秒,单位毫秒
page.wait_for_timeout(5*1000)
page.screenshot(path="截图.png")
browser.close()
代码在Jupyter中运行会出现错误:Error: It looks like you are using Playwright Sync API inside the asyncio loop.Please use the Async API instead.
。解决办法:代码保存到测试.py
,在终端运行python 测试.py
。
了解更多 >> Playwright Python 文档:入门
异步模式
使用with语句
import asyncio
from playwright.async_api import async_playwright
async def main():
async with async_playwright() as p:
browser = await p.firefox.launch(headless=False)
page = await browser.new_page()
await page.goto("https://wwww.baidu.com")
print(await page.title())
await browser.close()
asyncio.run(main())
了解更多 >> Playwright Python 文档:入门
浏览器
安装和使用
名称 | 描述 |
---|---|
chromium | 使用playwright install chromium 安装好浏览器和驱动
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
page = browser.new_page()
page.goto("https://www.baidu.com/")
page.wait_for_timeout(5*1000) # 等待5秒
page.screenshot(path="截图.png")
browser.close()
|
chrome | 使用playwright install chrome 自动安装浏览器和驱动,也可以自己安装浏览器和驱动。
browser = p.chromium.launch(
channel="chrome",
headless=False,
slow_mo=10,
# 跳过检测
args=['--disable-blink-features=AutomationControlled']
)
|
firefox | 使用playwright install firefox 自动安装浏览器和驱动browser = p.firefox.launch(headless=False)
|
检测与防检测
防检测
名称 | 描述 | 示例 |
---|---|---|
设置参数,运行add_init_script | 删除一些特征。
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(
channel="chrome",
headless=False,
slow_mo=10,
# 防检测
args=['--disable-blink-features=AutomationControlled']
)
page = browser.new_page()
page.add_init_script("""
Object.defineProperties(navigator, {webdriver:{get: () => undefined}});
""")
page.goto("https://wwww.baidu.com")
page.wait_for_timeout(5*1000)
page.screenshot(path="截图.png")
browser.close()
| |
资源
官网
- Playwright 官网:https://playwright.dev
- Playwright 源代码:https://github.com/microsoft/playwright
- Playwright Python版源代码:https://github.com/microsoft/playwright-python
- Playwright Python 文档:https://playwright.dev/python/docs/intro