使用Python playwright,如何在不将屏幕截图保存到磁盘或使用临时文件的情况下制作屏幕截图?

使用Python playwright,如何在不将屏幕截图保存到磁盘或使用临时文件的情况下制作屏幕截图?,python,screenshot,temporary-files,playwright,playwright-python,Python,Screenshot,Temporary Files,Playwright,Playwright Python,我想使用Python剧作家制作一个屏幕截图,并将该屏幕截图交给RESTAPI。我找到了一个制作屏幕截图并将其保存到文件的示例: 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 = brow

我想使用Python剧作家制作一个屏幕截图,并将该屏幕截图交给RESTAPI。我找到了一个制作屏幕截图并将其保存到文件的示例:

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调用?

您根本不需要将图像保存到文件(cmp.),而是可以将其存储在变量中,如
img=page.screenshot()
。然后可以将该变量传递给REST请求。我在下面的示例中使用了
请求
模块,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()
如果出于某种原因(据我所知,您的用例并不需要这样做),您确实希望将图像保存到临时文件中,例如,您可以使用并创建命名临时文件(cmp.):

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()