Как оставить браузер открытым до конца кода, запущенного с playwright-python?

Я хочу использовать playwright-python для автоматического заполнения некоторых форм. А затем дважды проверьте заполнение перед отправкой. Но он всегда закрывает браузер по окончании выполнения кода. Даже если бы я использовал handleSIGHUP=False, handleSIGINT=False, handleSIGTERM=False аргументы запуска и не использовали page.close() или же browser.close() в моем коде он по-прежнему закрывает браузер после завершения кода.

Кто-нибудь знает как это делать?

3 ответа

Браузер запускается скриптом python, поэтому он завершится, когда скрипт завершится.
Так что вам нужно сохранить сценарий в живых.
Для асинхронной части это немного сложно. Я предполагаю, что у вас такие же: asyncio.get_event_loop().run_until_complete(main())

поэтому в основной процедуре async вам нужно, чтобы цикл async работал:

например, ожидание клавиатуры:

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

вы можете использовать код ниже

      while True:
    page.wait_for_timeout(10000)

получить увидеть работающую ссылку

Контекст:

Версия Playwright: 1.16 Операционная система: Windows Версия Node.js: 14.18.1 Браузер: все Обзор Есть несколько способов включить инспектор, как описано в установите «PWDEBUG», он также отключит тайм-аут, установив его в 0. Это хорошая идея, поскольку она позволяет пользователю щелкать по инспектору без ограничения времени.

Однако это не относится к page.pause(). Эта опция также открывает инспектор, но тайм-аут не установлен на 0, поэтому инспектор принудительно выйдет через 30 секунд, например,

Медленный тест: тесты\my_test.test.js (30 с)

То же самое поведение упоминается в запросе функции здесь: #10132 И я считаю, что это должно быть исправлено, чтобы соответствовать поведению по умолчанию других параметров, по крайней мере, из соображений согласованности. Например, в привязке Java page.pause() не требует явного отключения timeOut.

Другие вопросы по тегам