问题描述
当我们在 docker 中启动了 selenium 服务的时候,有时候当我们的爬虫服务已经启动,但是 selenium 服务尚在准备阶段的时候,有可能会报出服务拒绝的异常。
解决思路
一种解决的方案是我们在调用服务之前强制睡眠一段时间,等待服务完全准备好再进行连接。这种方案的不优雅之处在于当我们有多个服务需要调度的时候,睡眠的时间间隔是很难确定和把控的。
另外的思路就是去请求 selenium 暴露出的提供服务状态的接口,在得到确定的响应回复之后即可知道该服务已经准备好了。
简单实现代码
import requests
def _check_selenium_status():
"""
检查 selenium 服务端的状态
:return:
"""
while True:
i = 0
try:
# 检查本地的 selenium 服务是否已经启动
resp = requests.get("http://127.0.0.1:4444/wd/hub/status", timeout=0.5)
except:
i += 1
if i > 10:
raise
else:
print(resp.text)
break
_check_selenium_status()
运行结果:
后记
疫情期间,在家办公。据说很多企业因此已经生存不下去了,内心惶惶自是难免,说不焦虑一定是假的。
同情、悲愤他人的遭遇,同时更感慨做一个普通人,能有平安顺遂的一生已经很不容易了。
我们应该是因为不如意的遭遇变得更加坚强,而不是就此消沉。
更新时间: 2020-02-03