美文网首页
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