pyppeteer Chrome无响应问题解决

本文分享了使用Pyppeteer进行淘宝自动登录时遇到的Chrome卡顿问题及解决方案。通过设置launch参数'dumpio':True,解决了由于stdout和stderr累积导致的程序卡顿。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pyppeteer 是puppeteer的python非官方实现。感觉以后要比selenium好用,不过现在用的人还不多,所以有些问题卡了半天也没人可以问。

我用pyppeteer来做淘宝自动登录的时候发现页面打开多了就卡主了,chrome未响应。折腾了我好几天,自己看源码才发现launch要设置dumpio:True,不然程序调用subprocess.Popen打开chrome之后stderr,stdout没有输出重定向,然后累积多了就卡住了。

        browser = await launch({'headless': False, 'args': ['--no-sandbox'],'dumpio':True})  #dumpio':True就不会卡住了
### 回答1: 关于pyppeteer拦截websocket的问题,我可以回答。Pyppeteer是一个基于Python的无头浏览器控制库,可以通过它来模拟人类的浏览行为。Pyppeteer中的websocket拦截功能可以用于拦截浏览器中的WebSocket请求,并对请求进行自定义处理。具体操作可以查阅相关文档和示例代码。 ### 回答2: pyppeteer 是一个非常强大的 Python 库,使用它可以对 Chrome 或者 Chromium 进行远程控制。如果想要拦截 WebSocket,可以使用 pyppeteer 提供的 WebSocket 相关的 API 来实现。 首先,我们需要使用 `pyppeteer.page.Page` 类的 `expose_function` 方法在 JavaScript 环境中注册一个回调函数。这个回调函数将会在每当有 WebSocket 打开时被调用。示例如下: ```python async def handle_websocket(future, msg): # 在这里处理 WebSocket 相关的逻辑 print('Handle WebSocket: {}'.format(msg)) # 你可以在这里进行拦截、修改或者记录 WebSocket 的数据 page = await browser.newPage() # 注册回调函数 await page.expose_function('handleWebSocket', handle_websocket) ``` 然后,在每次打开 WebSocket 时,可以通过在 JavaScript 中调用注册函数,来将 WebSocket 的信息传递给 Python 进行处理。示例如下: ```javascript // 创建 WebSocket 连接 const ws = new WebSocket('wss://example.com'); // 在 WebSocket 打开时,调用注册的回调函数,将 WebSocket 信息传递给 Python ws.onopen = () => { window.handleWebSocket('ws opened'); }; // 在 WebSocket 关闭时,调用注册的回调函数,将 WebSocket 信息传递给 Python ws.onclose = () => { window.handleWebSocket('ws closed'); }; ``` 通过这种方法,你可以在 `handle_websocket` 回调函数中处理 WebSocket 数据,可以拦截、修改或记录 WebSocket 的内容,以满足你的特定需求。 以上就是使用 pyppeteer 拦截 WebSocket 的基本方法,希望对你有所帮助。 ### 回答3: pyppeteer是一个基于Python的无头浏览器控制库,可以用于模拟浏览器行为,实现自动化测试、数据爬取等功能。在pyppeteer中,我们可以通过拦截websocket来实现对浏览器的网络请求的控制和监控。 要拦截websocket,我们可以使用pyppeteer的Page对象的`waitForRequest()`和`waitForResponse()`方法。首先,我们可以使用`waitForRequest()`方法来等待页面发起的websocket请求。例如,我们可以使用以下代码来等待页面中发起的websocket请求: ``` request = await page.waitForRequest(lambda request: request.url.startswith('ws://')) ``` 这样,当页面中发起websocket请求时,代码将会暂停执行,直到请求发起,然后将请求对象赋值给`request`变量。 然后,我们可以使用`waitForResponse()`方法来等待服务器对websocket请求的响应。例如,我们可以使用以下代码来等待服务器对websocket请求的响应: ``` response = await page.waitForResponse(lambda response: response.request.url.startswith('ws://')) ``` 这样,当服务器对websocket请求进行响应时,代码将会暂停执行,直到接收到响应,然后将响应对象赋值给`response`变量。 在拦截到websocket请求和响应后,我们可以进行进一步的操作,比如修改请求参数、过滤响应数据等。这样,我们就可以实现对websocket的拦截和控制。 总而言之,使用pyppeteer可以很方便地拦截websocket,通过`waitForRequest()`和`waitForResponse()`方法可以实现对浏览器的网络请求的控制和监控,从而达到我们的目的。希望以上回答能够帮到你!
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值