Python:在pyppeteer中保持打开浏览器并创建CDPSession
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python:在pyppeteer中保持打开浏览器并创建CDPSession,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2687字,纯文字阅读大概需要4分钟。
内容图文
![Python:在pyppeteer中保持打开浏览器并创建CDPSession](/upload/InfoBanner/zyjiaocheng/782/f177b81a8fb84d5ca33b030181c0b0f0.jpg)
我有两个问题,我现在无法解决.
1.我想保持浏览器运行,所以我可以使用pyppeteer.launcher.connect()功能重新连接,但即使我不拨打pyppeteer.browser.Browser.close(),它似乎也会立即关闭.
test01.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
2.如何创建CDP会话.此代码应该打开另一个浏览器窗口,但它不能按预期工作:
test02.py
import asyncio
import time
from pyppeteer import launch, connect
async def fetch():
browser = await launch(
headless=False,
args=['--no-sandbox']
)
page = await browser.newPage()
cdp = await page.target.createCDPSession()
await cdp.send('Target.createBrowserContext')
time.sleep(5)
await browser.disconnect()
loop = asyncio.get_event_loop()
loop.run_until_complete(fetch())
$python test02.py
Future exception was never retrieved
future: <Future finished exception=NetworkError('Protocol error Target.sendMessageToTarget: Target closed.',)>
pyppeteer.errors.NetworkError: Protocol error Target.sendMessageToTarget: Target closed.
解决方法:
如何保持浏览器运行
你只需要使用autoClose标志,这里是docs:
autoClose (bool): Automatically close browser process when script
completed. Defaults to 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())
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())
灵感来自于pyppeteer本身的Browser.createIncognitoBrowserContext.
注意,通过CDP创建其他会话似乎并不是一个好主意,因为browser._contexts不会更新并且会变得不一致. Browser.createIncognitoBrowserContext也可能适合您的需求而无需借助CDP
内容总结
以上是互联网集市为您收集整理的Python:在pyppeteer中保持打开浏览器并创建CDPSession全部内容,希望文章能够帮你解决Python:在pyppeteer中保持打开浏览器并创建CDPSession所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。