异常回顾:
python版本:3.9
pyppeteer版本:0.2.6
pyee版本:8.2.2
实现响应拦截的功能
async def intercept_response(response):
# resourceType = response.request.resourceType
# print(resourceType)
if 'get-list' in response.url:
print(response.url)
# print(await response.json())
print(await response.text())
async def main():
browser = await launch({
'handleSIGINT': False,
'handleSIGTERM': False,
'handleSIGHUP': False, # 以上禁用信号
'headless': False,
'dumpio': True,
'autoClose': False, # 避免长时间运行 内存泄漏
'ignoreDefaultArgs': ['--enable-automation'], # 过滤掉列表中的默认参数
})
page = await browser.newPage()
page.on('response', intercept_response)
await page.goto('https://www.bhsf.com.cn/index.html#/template/?cid=17&page_type=imageList')
await asyncio.sleep(200)
# await browser.close()
asyncio.get_event_loop().run_until_complete(main())
异常信息:
D:\Python\Python39\lib\site-packages\pyee_base.py:83: RuntimeWarning: coroutine ‘intercept_response’ was never awaited
f(*args, **kwargs)
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
以下是我的解决办法(均测试可用):
一、给 pyee 版本降级
pip install 'pyee==7.0.4' --force-reinstall
二、用 asyncio 包装
修改前:
page.on('response', intercept_response)
修改后:
page.on('response', lambda response: asyncio.ensure_future(intercept_response(response)))
以上参考:https://github.com/pyppeteer/pyppeteer/issues/220