美文网首页
pyppeteer 弹出页面造成阻塞

pyppeteer 弹出页面造成阻塞

作者: eeert2 | 来源:发表于2019-08-18 16:47 被阅读0次

一、问题场景

最近在使用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
    try:
        await asyncio.wait_for(eternity(), timeout=1.0)
    except asyncio.TimeoutError:
        print('timeout!')

asyncio.run(main())

# Expected output:
#
#     timeout!

所以很简单的,这样我们在使用 pyppeteer 遇到可能会超时任务时候,在放在asyncio.wait_for()里面执行就好了

相关文章

网友评论

      本文标题:pyppeteer 弹出页面造成阻塞

      本文链接:https://www.haomeiwen.com/subject/ghjbjctx.html