Как с помощью Python-playwright сделать снимок экрана, не сохраняя его на диск или используя временный файл?

Я хочу сделать снимок экрана с помощью Python Playwright и передать этот снимок в REST API. Я нашел здесь пример, который делает снимок экрана и сохраняет его в файл:

      from playwright import sync_playwright
with sync_playwright() as p:
    for browser_type in [p.chromium, p.firefox, p.webkit]:
        browser = browser_type.launch()
        page = browser.newPage()
        page.goto('https://scrapingant.com/')
        page.screenshot(path=f'scrapingant-{browser_type.name}.png')
        browser.close()

Как сделать снимок экрана, не сохраняя его на диск или используя временный файл, и передать его в вызов REST?

1 ответ

Решение

Вам вообще не нужно сохранять изображение в файл ( документация по скриншоту cmp. ), Вместо этого вы можете просто сохранить его в переменной, например img = page.screenshot(). Затем вы можете передать эту переменную в свой REST-запрос. Я использую requests В приведенном ниже примере POST-запрос упрощен и может потребовать некоторых дополнительных параметров (в зависимости от вашего API) или, например, разных URL-адресов для разных типов браузеров:

      from playwright import sync_playwright
import requests

with sync_playwright() as p:
    for browser_type in [p.chromium, p.firefox, p.webkit]:
        browser = browser_type.launch()
        page = browser.newPage()
        page.goto('https://scrapingant.com/')
        # save screenshot to var
        img = page.screenshot() 
        # pass var directly to your request
        files = {'image': img, 'content-type': 'image/png'}
        requests.post('http://yourresturl.com', files=files)
        browser.close()

Если вы действительно хотели по какой-то причине сохранить изображение во временный файл (что, насколько я понимаю, в вашем случае использования, на самом деле не требуется), вы можете, например, использовать <tcode id="4319521"></tcode>модуль и создайте именованный временный файл (cmp. Как использовать tempfile.NamedTemporaryFile()?):

      from playwright import sync_playwright
import tempfile
import requests

tf = tempfile.NamedTemporaryFile(suffix='.png')

with sync_playwright() as p:
    for browser_type in [p.chromium, p.firefox, p.webkit]:
        browser = browser_type.launch()
        page = browser.newPage()
        page.goto('https://scrapingant.com/')
        # save screenshot to temporary file
        page.screenshot(path=tf.name)
        # send request loading temporary file
        requests.post('http://myresturl.com', {'media': open(tf.name, 'rb')})
        browser.close()        

# close temporary file
tf.close()
Другие вопросы по тегам