首页 > 解决方案 > 尝试为 selenium-node-firefox 创建 dockerfile

问题描述

我正在尝试为使用 Selenium WebDriver 的 Node 应用程序创建一个 dockerfile。我尝试了下面的代码,它为节点创建了一个目录,安装了 geckodriver 和 firefox。

FROM node:12

WORKDIR /usr/app

COPY package*.json ./
RUN npm install

# Install geckodriver
RUN wget https://github.com/mozilla/geckodriver/releases/download/v0.24.0/geckodriver-v0.24.0-linux64.tar.gz 
RUN tar -xvzf geckodriver-v0.24.0-linux64.tar.gz 
RUN chmod +x geckodriver 
RUN mv geckodriver /usr/local/bin/

# Install firefox
RUN wget "https://download.mozilla.org/?product=firefox-latest&os=linux&lang=pt-BR" -O firefox.tar.bz2
RUN tar -jxvf  firefox.tar.bz2 -C /usr/local/bin/

COPY . .

EXPOSE 3000

CMD ["npm", "start"]

我收到的错误是SessionNotCreatedError: Expected browser binary location, but unable to find binary in default location, no 'moz:firefoxOptions.binary' capability provided, and no binary flag set on the command line. 因此,geckodriver 找不到 firefox 二进制文件。我猜在PATH系统中没有设置好firefox,我尝试调用firefox --version并没有找到。

index.js唯一的做法:

  const { Builder } = require('selenium-webdriver');
  const driver = await new Builder().forBrowser('firefox').build();
  await driver.get('https://google.com');

标签: node.jsdockerseleniumfirefox

解决方案


我用这个 dockerfile 解决了这个问题:

FROM ubuntu

RUN apt-get update
RUN apt install nodejs -y
RUN apt install npm -y
RUN node -v

WORKDIR /usr/app

COPY package*.json ./
RUN npm install

RUN apt install wget -y
RUN wget https://github.com/mozilla/geckodriver/releases/download/v0.29.0/geckodriver-v0.29.0-linux64.tar.gz 
RUN tar -xvzf geckodriver-v0.29.0-linux64.tar.gz 
RUN chmod +x geckodriver 
RUN mv geckodriver /usr/local/bin/

RUN apt install firefox -y
RUN export MOZ_HEADLESS=1

COPY . .

EXPOSE 3000

CMD ["npm", "start"]

我已经更改了firefox的安装方式并添加了export MOZ_HEADLESS=1


推荐阅读