私信  •  关注

ffeast

ffeast 最近创建的主题
ffeast 最近回复了
5 年前
回复了 ffeast 创建的主题 » python:在pyppeter中保持打开的浏览器并创建cdpsession

如何保持浏览器运行

你只需要使用 autoClose 旗子,这是 docs :

autoclose(bool):脚本时自动关闭浏览器进程 完整的。默认为true。

在这种情况下,你 试验01.py 如下所示:

import asyncio

from pyppeteer import launch, connect

async def fetch():
    browser = await launch(
        headless=False,
        args=['--no-sandbox'],
        autoClose=False
    )
    print(f'Endpoint: {browser.wsEndpoint}')
    await browser.disconnect()

loop = asyncio.get_event_loop()
loop.run_until_complete(fetch())

CDP会议

这里是:

import asyncio
import time

from pprint import pprint

from pyppeteer import launch, connect
from pyppeteer.browser import BrowserContext

async def fetch():
    browser = await launch(
        headless=False,
        args=['--no-sandbox'],
        autoClose=False
    )
    page = await browser.newPage()
    cdp = await page.target.createCDPSession()
    raw_context = await cdp.send('Target.createBrowserContext')
    pprint(raw_context)
    context = BrowserContext(browser, raw_context['browserContextId'])
    new_page = await context.newPage()
    await cdp.detach()
    await browser.disconnect()

loop = asyncio.get_event_loop()
loop.run_until_complete(fetch())

灵感来自 Browser.createIncognitoBrowserContext pyppeteer 本身。 注意,通过CDP创建额外的会话似乎不是一个好主意,因为 browser._contexts 不会被更新,并且会变得不一致。也有可能 Browser.createIncognitoBrowserContext 可能适合你的需要而不诉诸CDP