如何解决哪些 ChromeDriver 和 Headless Chrome 版本与 ruby 2.7 兼容?
问题
我有一个在 AWS lambda 中运行的网络抓取工具,但 几周后,AWS lambda 将停止支持 Ruby 2.7。我去年使用 this tutorial 构建了我的刮刀。
我需要找到与 Ruby 2.7 兼容的 chrome 驱动程序和无头 chrome 版本,但我不知道从哪里开始。
我查看了 ChromeDriver's downloads portal,但没有任何迹象表明 Chrome 驱动程序适用于 ruby 2.7 或任何其他特定版本的 ruby。
我的代码通过访问 ChromeDriver 二进制文件并在特定文件夹中启动它来工作
我通过运行以下命令下载了我正在使用的特定二进制文件:
# serverless chrome
wget https://github.com/adieuadieu/serverless-chrome/releases/download/v1.0.0-37/stable-headless-chromium-amazonlinux-2017-03.zip
unzip stable-headless-chromium-amazonlinux-2017-03.zip -d bin/
rm stable-headless-chromium-amazonlinux-2017-03.zip
# chromedriver
wget https://chromedriver.storage.googleapis.com/2.37/chromedriver_linux64.zip
unzip chromedriver_linux64.zip -d bin/
rm chromedriver_linux64.zip
解决方法
解决方案
我找到了这个问题的解决方案。 Lambda 默认提供的 Ruby 2.7 运行在 Amazon Linux 2 之上(缺少许多重要的库和依赖项),不幸的是,您无法改变它。
我通过使用以下 Dockerfile 创建自己的图像解决了这个问题
FROM public.ecr.aws/lambda/ruby:2.7
# Install dependencies needed to run MySQL & Chrome
RUN yum -y install libX11
RUN yum -y install dejavu-sans-fonts
RUN yum -y install procps
RUN yum -y install mysql-devel
RUN yum -y install tree
RUN mkdir /var/task/lib
RUN cp /usr/lib64/mysql/libmysqlclient.so.18 /var/task/lib
RUN gem install bundler
RUN yum -y install wget
RUN yum -y groupinstall 'Development Tools'
# Ruby Gems
ADD Gemfile ${LAMBDA_TASK_ROOT}/
ADD Gemfile.lock ${LAMBDA_TASK_ROOT}/
RUN bundle config set path 'vendor/bundle' && \
bundle install
# Install chromedriver & chromium
RUN mkdir ${LAMBDA_TASK_ROOT}/bin
# Chromium
RUN wget https://github.com/adieuadieu/serverless-chrome/releases/download/v1.0.0-37/stable-headless-chromium-amazonlinux-2017-03.zip
RUN unzip stable-headless-chromium-amazonlinux-2017-03.zip -d ${LAMBDA_TASK_ROOT}/bin/
RUN rm stable-headless-chromium-amazonlinux-2017-03.zip
# Chromedriver
RUN wget https://chromedriver.storage.googleapis.com/2.37/chromedriver_linux64.zip
RUN unzip chromedriver_linux64.zip -d ${LAMBDA_TASK_ROOT}/bin/
RUN rm chromedriver_linux64.zip
# Copy function code
COPY app.rb ${LAMBDA_TASK_ROOT}
WORKDIR ${LAMBDA_TASK_ROOT}
RUN tree
RUN ls ${LAMBDA_TASK_ROOT}/bin
# Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile)
CMD [ "app.handle" ]
注意事项
- 如果您的代码之前是使用 zip 文件部署的,您将不得不销毁之前的函数或使用代码更新创建第二个函数,这一切都取决于您希望如何处理部署。
- 可以使用 serverless framework 自动执行部署过程
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。