我有两个我暂时无法解决的问题。
1。。我想保持浏览器运行,以便可以使用pyppeteer.launcher.connect()
函数重新连接,但是即使我不打{{ 3}}。
test01.py:
n
2。。如何创建CDP会话。此代码应打开另一个浏览器窗口,但无法按预期工作:
test02.py
import asyncio
from pyppeteer import launch, connect
async def fetch():
browser = await launch(
headless=False,
args=['--no-sandbox']
)
print(f'Endpoint: {browser.wsEndpoint}')
await browser.disconnect()
loop = asyncio.get_event_loop()
loop.run_until_complete(fetch())
$ python test01.py
Endpoint: ws://127.0.0.1:51757/devtools/browser/00e917a9-c031-499a-a8ee-ca4090ebd3fe
$ curl -i -N -H "Connection: Upgrade" -H "Upgrade: websocket" http://127.0.0.1:51757
curl: (7) Failed to connect to 127.0.0.1 port 51757: Connection refused
答案 0 :(得分:2)
您只需要使用autoClose
标志,这是docs:
autoClose(布尔):脚本时自动关闭浏览器进程 完成。默认为True。
在这种情况下,您 test01.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())
这里是:
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())
受pyppeteer
本身的Browser.createIncognitoBrowserContext的启发。
注意,通过CDP创建其他会话似乎不是一个好主意,因为browser._contexts
不会被更新并且会变得不一致。 Browser.createIncognitoBrowserContext
也可能无需任何CDP就能满足您的需求