问题一:使用 pyppeteer 的时候,有时候会遇到 pyppeteer.errors.TimeoutError: Navigation Timeout Exceeded: 30000 ms exceeded 这样的报错信息,这是页面加载超时 就是我们使用代理和浏览器形式访问页面 长时间未打开
就一直会加载 要知道代理有很大的不稳定性
所以我们前解决方案 设置超时时间
await page.goto(
'https://i.meituan.com/',{
'timeout': 10000*20 #这里超时
})
`</pre>
问题二:pyppeteer.errors.NetworkError: Protocol error Network.getCookies: Target close
控制访问指定 url 之后 await page.goto(url),会遇到上面的错误,如果这时候使用了 sleep 之类的延时也会出现这个错误或者类似的 time out。
这个问题是 puppeteer 的 bug,但是对方已经修复了,而 pyppeteer 迟迟没更新
这里测试使用 websockets6.0 版本可以
可以把 python 第三方库 websockets 版本 8.0 改为 6.0 就可以了,亲测可用。
<pre>`pip uninstall websockets #卸载websockets
pip install websockets==6.0 #指定安装6.0版本
`</pre>
问题三:
ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接
网上找资料 发现有人说分析原因,是因为使用 urlopen 方法太过频繁,引起远程主机的怀疑,被网站认定为是攻击行为。导致 urlopen()后,request.read()一直卡死在那里。最后抛出 10054 异常。
具体的解决方法如下:
<pre>`1.在 request 后面写入一个关闭的操作,response.close()
2. 设置 socket 默认的等待时间,在 read 超时后能自动往下继续跑
socket.setdefaulttimeout(t_default)
3. 设置 sleep()等待一段时间后继续下面的操作
time.sleep(t)
我使用的是第一种 失败
注意:本文归作者所有,未经作者允许,不得转载