pyppeteer报错: pyppeteer.errors.TimeoutError: Navigation Timeout Exceeded: 30000 ms exceeded

发表时间:2020-02-22

使用pyppeteer的时候,有时候会遇到pyppeteer.errors.TimeoutError: Navigation Timeout Exceeded: 30000 ms exceeded这样的报错信息,目前发现有三个原因容易导致该错误

一 由于网速慢,或者访问国外的网站等原因,网页在30秒内没有加载完成,就会报导航超时错误

二 协程中乱用time.sleep(), 或者await async.sleep(),比如说睡的时间比较长,很容易导致导航超时错误,后者有时候会报pyppeteer.errors.NetworkError: Protocol Error (Runtime.evaluate): Session closed. Most likely the page has been closed.这样的错误,参考https://github.com/miyakogi/pyppeteer/pull/181/files修改pyppeteer的collection模块代码解决

三 错误使用了 await page.waitForNavigation导致的, 举例说明:

Snipaste_2020-02-22_13-25-10.png

由于点击事件执行很快已跳转到新的页面,导致程序运行到导航等待的时候,一直处于新的页面等待触发,直到30秒超时报错,所以,正确的做法应该是把点击和导航等待视为一个整体进行操作,以下为两种正确的写法,了解协程并发的朋友应该知道,在此不做详细说明

写法一:

await asyncio.gather(

page.waitForNavigation(),

page.click(’…’),

)

写法二:

await asyncio.wait([

page.waitForNavigation(),

page.click(’…’),

])

Snipaste_2020-02-22_13-25-43.png

文章来源互联网,尊重作者原创,如有侵权,请联系管理员删除。邮箱:417803890@qq.com / QQ:417803890


Python Free

邮箱:417803890@qq.com
QQ:417803890

皖ICP备19001818号
© 2019 copyright www.pythonf.cn - All rights reserved

微信扫一扫关注公众号:

联系方式

Python Free