我是puppeteer和docker的新手。我在docker容器中以headful模式设置人偶时遇到问题。
Puppeteer version: 1.6.2 Platform / OS version: Docker node:8-slim Node.js version: node 8
DockerFile-
FROM node:8-slim
RUN apt-get update && apt-get install --no-install-recommends -y ca-certificates curl fontconfig fonts-liberation gconf-service git libappindicator1 libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libnss3 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 locales lsb-release unzip wget xdg-utils
RUN apt-get update && apt-get install -y wget --no-install-recommends && wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - && sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' && apt-get update && apt-get install -y google-chrome-unstable fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst ttf-freefont --no-install-recommends && rm -rf /var/lib/apt/lists/* \
&& apt-get purge --auto-remove -y curl && rm -rf /src/*.deb
ADD https://github.com/Yelp/dumb-init/releases/download/v1.2.0/dumb-init_1.2.0_amd64 /usr/local/bin/dumb-init
RUN chmod +x /usr/local/bin/dumb-init
RUN groupadd -r pptruser && useradd -r -g pptruser -G audio,video pptruser && mkdir -p /home/pptruser/Downloads && chown -R pptruser:pptruser /home/pptruser && chown -R pptruser:pptruser .
USER pptruser
EXPOSE 4081/tcp
CMD [ "npm", "start" ]
应用代码:
const browser = await puppeteer.launch({
headless: false,
args:['--no-sandbox']
});
我正在使用puppeteer截取所提供网址的屏幕截图。它在无头真实模式下成功执行。但是,当相同的脚本以无头假执行时,会产生以下错误:
错误:无法启动Chrome![0803 / 070106.562113:ERROR:nacl_helper_linux.cc(310)] NaCl帮助程序进程在没有沙箱的情况下运行!
[11104:11104:0816 / 105455.434188:FATAL:zygote_host_impl_linux.cc(123)]没有可用的沙箱!更新您的内核,或参阅https://chromium.googlesource.com/chromium/src/+/master/docs/linux_suid_sandbox_development.md以获得有关使用SUID沙箱进行开发的更多信息。如果您想过着危险的生活并需要立即解决,可以尝试使用–no-sandbox
您能帮忙解决这个问题吗?或者您可以共享一个示例应用程序代码,该代码使用puppeteer在headful模式下在Docker容器中截图。使用Headful模式的原因:更好的性能,某些网站不允许
检查以下内容Dockerfile
,阅读注释。它应该正常运行。
# First, we need to make sure all dependencies are there. If you are using docker, then the important dependencies are already present on most node images.
FROM node:8
# To run Headful mode, you will need to have a display, which is not present in a server.
# To avoid this, we will use Xvfb, and create a fake display, so the chrome will think there is a display and run properly.
# So we just need to install Xvfb and Puppeteer related dependencies.
RUN apt-get update && apt-get install -yq gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget x11vnc x11-xkb-utils xfonts-100dpi xfonts-75dpi xfonts-scalable xfonts-cyrillic x11-apps xvfb
# I am going to ignore dumb-init or such for now since it will add complexities to understand what is actually needed here.
# Assuming we are working on /app folder, cd into /app
WORKDIR /app
# Copy package.json into app folder
COPY package.json /app
# Install dependencies
RUN npm install
COPY . /app
# Start server on port 3000
EXPOSE 3000
# I'll also assume you are going to use root user,
# and your script has `--no-sandbox` and `--disable-setuid-sandbox` arguments.
# We run a fake display and run our script.
# Start script on Xvfb
CMD xvfb-run --server-args="-screen 0 1024x768x24" npm start
然后我用以下命令运行它,
# build the app
sudo docker build -t app .
# start the container, expose to network and remove after running
sudo docker run --network=host -it app
我上面使用的脚本的示例结果,可以是任何脚本,
Step 8/8 : CMD xvfb-run --server-args="-screen 0 1024x768x24" npm start
---> Using cache
---> b1319f0e68ef
Successfully built b1319f0e68ef
Successfully tagged scraper:latest
> puppeteer-with-xvfb@1.1.0 start /app
> node index.js
Example app listening on port 3000!
> Opening browser
> Navigating url
> Typing text
> Wait for results
> Extracted data
> Cleaning up instances
我被要求评估Robotframework,并对我所看到的大部分情况感到满意。然而,为了让它成为一个可行的选择,我需要它在Firefox中工作。 提线木偶功能在我的Ruby/Capybara环境中是一个问题,我能够关闭它。 在Robot/Python 2.7/FF44.0中获取相同的内容会在两个方向上产生错误。 当提线木偶上演时: 我明白了: 我们的产品摇滚失败WebDriverException:
我在docker容器中运行redis,我使用redis sentinel模式。我已经设置了以下配置- 我使用Redisson库创建了一个Java客户机来访问Redis。将客户端配置为使用redis-sentinel模式,如下所示- 这就是我面临的问题。每当我试图通过这个客户机在redis上运行一些命令时,请求都会通过哨兵节点,这会给我当前的redis主节点地址。但是我的java客户机不能直接与re
我在Docker中执行触摸命令时遇到问题。 'touch'不被识别为内部或外部命令、可操作程序或批处理文件。
各位大佬们,当我在构建docker容器的时候意外遇到了这个错误,想问问各位如何解决 其中docker报错
问题内容: 当你事先不知道某个属性的名称时,Python的getattr()方法很有用。 此功能也将在模板中派上用场,但我从未想出实现此目的的方法。是否存在可以执行动态属性查找的内置标记或非内置标记? 问题答案: 最近,我还必须将此代码编写为自定义模板标签。要处理所有查找方案,它首先进行标准的属性查找,然后尝试进行字典查找,然后尝试进行getitem查找(以使列表起作用),然后在对象为对象时遵循标
我开发了一个机器学习模型,并将其与Flask应用程序集成。当我尝试为应用程序运行 docker 映像时,它显示我没有 GPU 访问权限。我应该如何编写一个 Docker 文件,以便我可以在容器内使用“cuda GPU”?下面是泊坞文件的当前状态。 来自蟒蛇:3.9 工作目录/myapp 补充。/myapp 运行pip3 install -r requirements.txt 复制… CMD["py