一、问题场景
最近在使用
pyppeteer
采集数据的时候遇到一个新问题,在调用
page.goto()
函数时,页面突然跳出一个弹出窗口。
这个时候需要点击一下
确定
按钮,但是由于页面还在加载中,也就是
goto()
函数还在执行中,这个时候也就无法执行
js
去操作页面。
我的解决方式是直接读取页面的内容,不再等待页面加载完成。
但是在执行
page.content()
方法时,程序卡住,没有反应,但是这个函数没有 自带的
timeout
选项,所以我们要自己给他实现
timeout
功能以控制程序的最长执行时间。
二、解决方法
解决方式很简单,在
协程
里,官方已经给了一个控制程序执行时长的方法:
asyncio.wait_for(
aw
,
timeout
, ***,
loop=None
)
使用
timeout
可以指定超时秒数,超时后会抛出异常
asyncio.TimeoutError
来看一下官网例子:
async def eternity():
# Sleep for one hour
await asyncio.sleep(3600)
print('yay!')
async def main():
# Wait for at most 1 second
await asyncio.wait_for(eternity(), timeout=1.0)
except asyncio.TimeoutError:
print('timeout!')
asyncio.run(main())