本篇作为笔记。
错误提示:
selenium selenium.common.exceptions.WebDriverException: Message: unknown error: session deleted because of page crash from unknown error: cannot determine loading status
#3 0x5646cbacaac6 <unknown>
#4 0x5646cbac9cff <unknown>
#5 0x5646cbac9b10 <unknown>
#6 0x5646cbac86f4 <unknown>
#7 0x5646cbac8c4c <unknown>
#8 0x5646cbad5e9d <unknown>
#9 0x5646cbad6b92 <unknown>
#10 0x5646cbae7c40 <unknown>
#11 0x5646cbaec274 <unknown>
#12 0x5646cbac9219 <unknown>
#13 0x5646cbae77df <unknown>
#14 0x5646cbb57772 <unknown>
#15 0x5646cbb3e443 <unknown>
#16 0x5646cbb0f3c5 <unknown>
#17 0x5646cbb10531 <unknown>
#18 0x5646cbd6ddce <unknown>
#19 0x5646cbd71192 <unknown>
#20 0x5646cbd5293e <unknown>
#21 0x5646cbd72103 <unknown>
#22 0x5646cbd45d85 <unknown>
#23 0x5646cbd930a8 <unknown>
#24 0x5646cbd93239 <unknown>
#25 0x5646cbdae492 <unknown>
#26 0x7f40e2af9609 start_thread
前提说明:
1、使用selenium对目标网站进行数据抓取,结合flask写的接口,现在要打包成docker镜像测试。
2、在测试过程中发现:对接口进行请求,该接口调用对应的函数使用selenium获取目标网站上的数据是发生了上面的错误提示。重点是:selenium selenium.common.exceptions.WebDriverException: Message: unknown error: session deleted because of page crash from unknown error: cannot determine loading status
然后找了好久看到了一篇文章介绍的解决方法:
https://www.jianshu.com/p/aa7d289d858f
这里面说了是因为:shm_size 的问题,然后采取了该文章的改进方式,在启动docker的时候,命令由:
docker run -p 8045:4060 -e port=4060 flask_demo:v1.1
改为:
docker run -p 8045:4060 -it --shm-size="2g" -e port=4060 flask_demo:v1.1
就成功解决了该问题。
关于的设置还有一种方式是修改配置文件,这个博主有介绍可以参考:https://blog.csdn.net/baobei0112/article/details/132275770
记录一下常用的docker命令:
# 将docker中的文件保存到本地一份
docker ps # 获取正在运行的dockerid
docker docker_id:docker目录 本地目录
# 将本地文件上传到docker当中
docker ps # 获取正在运行的dockerid
docker 本地目录 docker_id:docker目录
# 打包docker镜像
docker images # 查看dockerid
docker save docker_id > 本地目录
# 上传进项到仓库
docker login # 登录,需输入账号密码
# 1、将容器只作为镜像
docker commit 容器名 镜像名
# 2、标记到个人仓库
docker tag 镜像名 username/仓库名称:targname
例如:docker tag a_test:v1.0 wow28218/pyflink:a # 这里的a即上传的a_test在仓库中的名字
# 3、上传
docker push username/仓库名称:targname
例如:docker push wow28218/pyflink:a
# 扩充:2、3合并为一步
docker commit a_test wow28218/pyflink:a
# 4、下载镜像
docker pull wow28218/pyflink:a
或
docker tag wow28218/pyflink:a my_test:latest # 拉取下来并修改名称
Dockerfile编写
# 使用 Selenium 的 Chrome 镜像作为基础镜像 107版本在网站的第22页
FROM selenium/standalone-chrome:107.0.5304.87-chromedriver-107.0.5304.62
# 安装 Python 和相关依赖
USER root
RUN apt-get update && \
apt-get install -y \
software-properties-common \
curl
# 添加 Python PPA 和安装 Python 3.10
RUN add-apt-repository ppa:deadsnakes/ppa && \
apt-get update && \
apt-get install -y \
python3.10 \
python3.10-distutils
# 安装 pip
RUN curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py && \
python3.10 get-pip.py
# 设置 Python 3.10 为默认的 Python 版本
RUN update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 1 && \
update-alternatives --install /usr/bin/python python /usr/bin/python3.10 1 && \
update-alternatives --install /usr/bin/pip pip /usr/local/bin/pip 1
# 检查 Python 和 pip 版本
RUN python --version && pip --version
# 设置工作目录
WORKDIR /mycode
# 复制当前目录下的内容到容器中的/mycode
COPY . /mycode
USER root
RUN apt-get update && \
apt-get install -y python3-pip
RUN pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
# 暴露应用程序端口
EXPOSE 5050
# 设置环境变量,指定Flask应用的模块
#ENV FLASK_APP app.py
ENV host 0.0.0.0
ENV port 5050
ENV debug True
ENV proxy None
ENV context /
# 设置容器启动时默认执行的命令
ENTRYPOINT ["sh","-c","python3 run_flask_demo.py --host ${host} --port ${port} --debug ${debug} --proxy ${proxy} --context ${context}"]
#CMD ["python3", "run_flask_demo.py", "--host", "${host}", "--port", "${port}", "--debug", "${debug}", "--proxy", "${proxy}", "--context", "${context}"]
#CMD python3 run_flask_demo.py --host $host --port $port --debug $debug --proxy $proxy --context $context