使用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导致的, 举例说明:
在这里插入图片描述
由于点击事件执行很快已跳转到新的页面,导致程序运行到导航等待的时候,一直处于新的页面等待触发,直到30秒超时报错,所以,正确的做法应该是把点击和导航等待视为一个整体进行操作,以下为两种正确的写法,了解协程并发的朋友应该知道,在此不做详细说明
写法一:
await asyncio.gather(
page.waitForNavigation(),
page.click(’…’),
)
写法二:
await asyncio.wait([
page.waitForNavigation(),
page.click(’…’),
])
在这里插入图片描述
爬虫逆向学习,请关注公众号:逆向小白在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐