解决pyppeteer导航超时问题: pyppeteer.errors.TimeoutError: Navigation Timeout Exceeded: 30000 ms exceeded

使用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导致的, 举例说明:
解决pyppeteer导航超时问题: pyppeteer.errors.TimeoutError: Navigation Timeout Exceeded: 30000 ms exceeded_第1张图片
由于点击事件执行很快已跳转到新的页面,导致程序运行到导航等待的时候,一直处于新的页面等待触发,直到30秒超时报错,所以,正确的做法应该是把点击和导航等待视为一个整体进行操作,以下为两种正确的写法,了解协程并发的朋友应该知道,在此不做详细说明
写法一:
await asyncio.gather(
page.waitForNavigation(),
page.click(’…’),
)
写法二:
await asyncio.wait([
page.waitForNavigation(),
page.click(’…’),
])
解决pyppeteer导航超时问题: pyppeteer.errors.TimeoutError: Navigation Timeout Exceeded: 30000 ms exceeded_第2张图片

你可能感兴趣的:(pyppeteer,pyppeteer)