如何设置 Chrome 和 Chromedriver 以在线托管它

问题描述 投票:0回答:2

我有一个

flask
应用程序,可以在
selenium
路线上触发
/scrape
脚本,我已在 render.com 上部署了该应用程序,该应用程序运行良好,可以对其进行测试我已在
custom_hello() 上定义了 
/
 
路线,通过它我可以确认烧瓶工作正常。 当我尝试重定向触发脚本的
/scrape
时,由于多种原因而失败 -

  • 无法获取
    Chromedriver
    路径和
    google-chrome binary
    路径
  • FileNotFoundError: No such file or directory: 'google-chrome' 
  • selenium.common.exceptions.WebDriverException: Message: unknown error: cannot find Chrome binary

我已经尝试过了

我在网上查找了解决 python 脚本本身中的 chromedriver 问题,并找到了几个 python 库 -

  • chrome-driver-binary
  • get-chrome-driver
  • chromedriver

我阅读了

pypy
上的说明并尝试了这些,但问题是相同的。

我尝试将 chrome 浏览器本身下载到服务器中,因此在构建设置中使用

wget
以便安装 chrome 浏览器,但它不允许我使用
sudo
命令来构建已安装的浏览器(如果您知道我的意思)

任何人都可以看到代码 -

进口

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
import json
import os

代码

    # Set up ChromeDriver path
    chrome_driver_path = '/path/to/chromedriver'
    # Set Chrome options
    chrome_options = Options()
    chrome_options.add_argument('--headless')  # Run ChromeDriver in headless mode

    # Create a new ChromeDriver instance
    service = Service(chrome_driver_path)
    driver = webdriver.Chrome(service=service, options=chrome_options)

对于任何建议

chrome_driver_path
的人,是的,当我使用
get-chromedriver
get-chrome-binary

时,我也尝试修改它

代码并不总是这样,每次我在调试它并尝试部署它时推送一些更改,如果你想查看所有提交,你可以检查它们这里

我只是需要部署此类应用程序的人的帮助,您在其中发出请求并触发

selenium
脚本,我知道托管平台不提供对
chrome
chromedriver
的支持,我很好奇如何部署此应用程序并使其正常工作。

flask selenium-webdriver selenium-chromedriver render.com
2个回答
1
投票

这是一个对我有用的解决方案,并且应该适用于遇到此麻烦的任何人,前提是您有一个适用于本地环境但不适用于云或托管的 API 或简单的 selenium 脚本。

请阅读最后的

docker run
命令部分的完整答案,您需要使用该命令才能成功运行您的脚本/应用程序。

您需要在容器中运行脚本

您需要将以下代码添加到

Dockerfile
并必须使用该
Dockerfile
托管它,相信我,这是最简单、最简单的方法,如果您正在考虑尝试
selenium/standalone-chrome
图像,那么祝您好运相应地配置你的脚本。 相反,只需配置
Dockerfile
一点点,就可以开始了...

Dockerfile


# FROM ubuntu:bionic
FROM python:3.10

RUN apt-get update && apt-get install -y \
    # python3 python3-pip \
    fonts-liberation libappindicator3-1 libasound2 libatk-bridge2.0-0 \
    libnspr4 libnss3 lsb-release xdg-utils libxss1 libdbus-glib-1-2 \
    curl unzip wget vim \
    xvfb libgbm1 libu2f-udev libvulkan1

RUN CHROMEDRIVER_VERSION=`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE` && \
    wget https://chromedriver.storage.googleapis.com/$CHROMEDRIVER_VERSION/chromedriver_linux64.zip && \
    unzip chromedriver_linux64.zip -d /usr/bin && \
    chmod +x /usr/bin/chromedriver && \
    rm chromedriver_linux64.zip

RUN CHROME_SETUP=google-chrome.deb && \
    wget -O $CHROME_SETUP "https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb" && \
    dpkg -i $CHROME_SETUP && \
    # apt install $CHROME_SETUP && \
    apt-get install -y -f && \
    rm $CHROME_SETUP

ENV LANG C.UTF-8
ENV LC_ALL C.UTF-8
ENV PYTHONUNBUFFERED=1
ENV PATH="$PATH:/bin:/usr/bin"

# RUN pip3 install pyvirtualdisplay
# RUN pip3 install Selenium-Screenshot
WORKDIR /app

# COPY requirements.txt /app

COPY . /app

RUN --mount=type=cache,target=/root/.cache/pip \
    pip3 install -r requirements.txt

# ENTRYPOINT ["python3"]
CMD ["python3", "app.py"]

# ENV APP_HOME /usr/src/app
# WORKDIR /$APP_HOME

# COPY . $APP_HOME/

# CMD tail -f /dev/null
# CMD python3 app.py

现在,我正在拉取

python
图像,然后安装构建 chrome 浏览器所需的所有软件包,然后安装和设置 chrome 浏览器和
chromedriver

你需要改变什么

Dockerfile
中更改
CMD
命令以运行脚本或应用程序名称。 在python脚本中将
chromdriver
的路径更改为
/path/to/chromedriver
,它将自动检测
chromediver

Docker 构建失败

如果您的构建失败,很可能是因为在安装和设置 google-chrome 之前您可能需要安装一些额外的软件包

Dockerfile
,在提示中它会提到您
google-chrome depends on ~@@###
一些您需要查看的软件包在线获取该软件包,如何在 ubuntu 上安装该软件包并将安装名称添加到
Dockerfile
RUN
命令,如下 -

RUN CHROMEDRIVER_VERSION=`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE` && \
    wget https://chromedriver.storage.googleapis.com/$CHROMEDRIVER_VERSION/chromedriver_linux64.zip && \
    unzip chromedriver_linux64.zip -d /usr/bin && \
    chmod +x /usr/bin/chromedriver && \
    rm chromedriver_linux64.zip && \
    {package(s) name}

我已经在最后加上名字了。

Docker运行命令

当您使用 google-chrome 时,您需要修改您的

docker run
命令,它应该是这样的 -

docker run -p portnumber:portnumber --shm-size="2g" name_of_image

0
投票

使用 dockerfile 对您有用吗?

© www.soinside.com 2019 - 2024. All rights reserved.