Перейти к основному содержимому

Начало работы - Библиотека

Установка

Pip

PyPI version

pip install --upgrade pip
pip install playwright
playwright install

Conda

Anaconda version

conda config --add channels conda-forge
conda config --add channels microsoft
conda install playwright
playwright install

Эти команды загружают пакет Playwright и устанавливают бинарные файлы браузеров для Chromium, Firefox и WebKit. Чтобы изменить это поведение, см. параметры установки.

Использование

После установки вы можете import Playwright в Python-скрипт и запускать любой из 3 браузеров (chromium, firefox и webkit).

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
browser = p.chromium.launch()
page = browser.new_page()
page.goto("http://playwright.dev")
print(page.title())
browser.close()

Playwright поддерживает две вариации API: синхронную и асинхронную. Если ваш современный проект использует asyncio, вы должны использовать асинхронное API:

import asyncio
from playwright.async_api import async_playwright

async def main():
async with async_playwright() as p:
browser = await p.chromium.launch()
page = await browser.new_page()
await page.goto("http://playwright.dev")
print(await page.title())
await browser.close()

asyncio.run(main())

Первый скрипт

В нашем первом скрипте мы перейдем на https://playwright.dev/ и сделаем скриншот в WebKit.

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
browser = p.webkit.launch()
page = browser.new_page()
page.goto("https://playwright.dev/")
page.screenshot(path="example.png")
browser.close()

По умолчанию Playwright запускает браузеры в безголовом режиме. Чтобы увидеть интерфейс браузера, установите опцию headless в False. Вы также можете использовать slow_mo для замедления выполнения. Узнайте больше в разделе инструментов отладки section.

firefox.launch(headless=False, slow_mo=50)

Интерактивный режим (REPL)

Вы можете запустить интерактивный python REPL:

python

а затем запустить Playwright в нем для быстрой экспериментации:

from playwright.sync_api import sync_playwright
playwright = sync_playwright().start()
# Используйте playwright.chromium, playwright.firefox или playwright.webkit
# Передайте headless=False в launch(), чтобы увидеть интерфейс браузера
browser = playwright.chromium.launch()
page = browser.new_page()
page.goto("https://playwright.dev/")
page.screenshot(path="example.png")
browser.close()
playwright.stop()

Асинхронный REPL, такой как asyncio REPL:

python -m asyncio
from playwright.async_api import async_playwright
playwright = await async_playwright().start()
browser = await playwright.chromium.launch()
page = await browser.new_page()
await page.goto("https://playwright.dev/")
await page.screenshot(path="example.png")
await browser.close()
await playwright.stop()

Pyinstaller

Вы можете использовать Playwright с Pyinstaller для создания автономных исполняемых файлов.

main.py
from playwright.sync_api import sync_playwright

with sync_playwright() as p:
browser = p.chromium.launch()
page = browser.new_page()
page.goto("https://playwright.dev/")
page.screenshot(path="example.png")
browser.close()

Если вы хотите упаковать браузеры с исполняемыми файлами:

PLAYWRIGHT_BROWSERS_PATH=0 playwright install chromium
pyinstaller -F main.py
примечание

Упаковка браузеров с исполняемыми файлами приведет к созданию более крупных бинарных файлов. Рекомендуется упаковывать только те браузеры, которые вы используете.

Известные проблемы

time.sleep() приводит к устаревшему состоянию

Скорее всего, вам не нужно ждать вручную, так как Playwright имеет автоожидание. Если вы все же полагаетесь на это, вы должны использовать page.wait_for_timeout(5000) вместо time.sleep(5), и лучше вообще не ждать тайм-аута, но иногда это полезно для отладки. В этих случаях используйте наш метод ожидания (wait_for_timeout) вместо модуля time. Это связано с тем, что мы внутренне полагаемся на асинхронные операции, и при использовании time.sleep(5) они не могут быть обработаны корректно.

несовместимость с SelectorEventLoop из asyncio на Windows

Playwright запускает драйвер в подпроцессе, поэтому он требует ProactorEventLoop из asyncio на Windows, потому что SelectorEventLoop не поддерживает асинхронные подпроцессы.

На Windows Python 3.7 Playwright устанавливает цикл событий по умолчанию на ProactorEventLoop, так как это значение по умолчанию в Python 3.8+.

Потоки

API Playwright не является потокобезопасным. Если вы используете Playwright в многопоточном окружении, вы должны создавать экземпляр Playwright для каждого потока. Подробнее см. проблему с потоками.