【问题标题】:Which ChromeDriver & Headless Chrome versions exist that are compatible with ruby 2.7?存在哪些与 ruby​​ 2.7 兼容的 ChromeDriver 和 Headless Chrome 版本?
【发布时间】:2021-08-22 18:56:17
【问题描述】:

问题

我有一个在 AWS lambda 中运行的网络爬虫,但 几周后 AWS lambda 将停止支持 Ruby 2.7。我去年使用this tutorial 构建了我的刮刀。

我需要找到与 Ruby 2.7 兼容的 chrome driver & headless 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

【问题讨论】:

  • 这个问题你解决了吗?我有和你一样的问题。因此,当我只是将 ruby​​ 版本 2.5 迁移到 2.7 时,出现了诸如“Selenium::WebDriver::Error::WebDriverError:无法连接到 chromedriver 127.0.0.1:9515”之类的问题。我的 Serverless chrome 和 chromedriver 版本和你一样。
  • @Hoonki 我找到了一种让它工作的方法,你需要做的是将你的 Lambda 从使用 .zip 文件更改为使用存储在 ECR 中的 docker 图像,我会写一个 propper在我完成之后回答我的问题。
  • 谢谢。但是使用 docker image 是什么意思呢?我们还需要使用 ruby​​ 2.5 环境吗?
  • @Hoonki 您可以创建自己的自定义 docker 映像以从头开始在 Lambda 中使用。你只需要遵循这样的指南 docs.aws.amazon.com/lambda/latest/dg/images-create.html 我一直在研究这个问题一段时间了。我会回答我自己的问题并在dev.to 中创建一个教程,但我认为你应该能够自己解决这个问题。或者你可以等我更新。
  • 我更新了帖子并包含了我使用的 Docker 文件。 @HarrisJT

标签: selenium-webdriver aws-lambda google-chrome-headless ruby-2.7


【解决方案1】:

解决方案

我找到了解决这个问题的方法。 Lambda 默认提供的 Ruby 2.7 运行在 Amazon Linux 2 之上(缺少许多重要的库和依赖项),不幸的是,您无法更改它。

但是,Amazon offers you the ability to run your code in a custom docker image that can be up to 10GB in size.

我通过使用以下 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" ]

备注

  1. 如果您的代码之前是使用 zip 文件部署的,您将不得不销毁之前的函数或使用代码更新创建第二个函数,这一切都取决于您希望如何处理部署。
  2. 可以使用serverless framework 自动执行部署过程

【讨论】:

    猜你喜欢
    • 2017-04-29
    • 2012-02-23
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    • 2014-09-25
    • 2018-04-25
    相关资源
    最近更新 更多