node.js - 尝试为 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');
解决方案
我用这个 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
推荐阅读
- c# - EpiServer 网站注销不再起作用
- pandas - 如何使用方法链接跨列使用 groupby 转换?
- google-apps-script - 如何在饼图中显示值 - Google Apps 脚本
- python-3.x - Pandas:如何计算 DateTime 索引
- nginx - Nginx 2 重写 2 例
- javascript - 导航栏不展开(React JS)
- reactjs - 样式(css)不适用于阴影 DOM 中的 React 应用程序
- regex - 替换为 regexp i Template Toolkit
- sparql - RDFlib 空白节点更新查询
- javascript - InfoWindow 上的按钮事件