首页 > 解决方案 > 如何在使用 playwright-python 运行的代码结束时保持浏览器打开?

问题描述

我想使用 playwright-python 自动填写一些表格。然后在提交前仔细检查填写。但它总是在代码运行结束时关闭浏览器。即使我使用了handleSIGHUP=False, handleSIGINT=False, handleSIGTERM=False启动参数,并且没有在我的代码中使用任何page.close()browser.close(),它仍然会在代码完成后关闭浏览器。

有谁知道该怎么做?

标签: playwright-python

解决方案


浏览器是由 python 脚本启动的,所以它会在脚本结束时结束。
所以你需要保持脚本活着。
对于异步部分,它有点棘手。我假设你有同样的 asyncio.get_event_loop().run_until_complete(main():)

所以在异步主程序中你需要保持异步循环运行:

例如等待键盘:

import asyncio
from playwright.async_api import async_playwright
from playwright.async_api import Page

async with async_playwright() as p:
    async def main(run_forever: bool):
        browser = await p.__getattribute__(C.BROWSER.browser).launch(headless=False, timeout=10000)
        page = await browser.new_page()
        if run_forever:
            print('Press CTRL-D to stop')
            reader = asyncio.StreamReader()
            pipe = sys.stdin
            loop = asyncio.get_event_loop()
            await loop.connect_read_pipe(lambda: asyncio.StreamReaderProtocol(reader), pipe)
             async for line in reader:
                 print(f'Got: {line.decode()!r}')
        else:
            browser.close()

推荐阅读