[英]selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally with ChromeDriver Chrome and Selenium
[英]selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally. Dockerize Flask Application
一个多星期以来,我一直在尝试将 Flask 应用程序与 MongoDB 数据库对接。 我的应用程序具有以下结构:
aplication
- db
Dockerfile
- web
app.py
Dockerfile
requirements.txt
docker-compose.yml
此应用程序使用 selenium、selenium-requests 和 BeautifulSoup 库进行 web 抓取。 我一周以来遇到的问题是:
selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally.
(unknown error: DevToolsActivePort file doesn't exist)
(The process started from chrome location /usr/bin/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)
我一直在尝试几种不同的方法来制作应用程序的 Dockerfile,但我找不到真正有效的方法。
我的代码如下:
from bs4 import BeautifulSoup
from seleniumrequests import Chrome
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from flask import Flask, request, jsonify
from flask_restful import API, Resource
from pymongo import MongoClient
app = Flask(__name__)
api = api(app)
client = MongoClient("mongodb://db:27017")
db = client.FlaskAPI
users = db["users"]
chrome_options = Options()
chrome_options.add_argument("--headless")
webdriver = Chrome(executable_path='/usr/local/bin/chromedriver', options=chrome_options)
webdriver.get(self.url+'login')
webdriver.find_element_by_id("userName-id").send_keys(username)
webdriver.find_element_by_id("passWd-id").send_keys(password)
webdriver.find_element(By.XPATH, '//input[@value="Login"]').click()
soup = BeautifulSoup(self.webdriver.page_source, 'lxml')
data = ''
p = re.compile('var userParam=(.*);')
for script in soup.find_all("script", {"src":False}):
if p.search(script.string):
data = json.dumps(str(script.string))
data = remove_formatation_elements(data)
users.insert({"data": data})
FROM mongo:5.0.3
FROM python:3.8
WORKDIR /usr/src/app
# Install Chrome WebDriver
RUN CHROMEDRIVER_VERSION=`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE` && \
mkdir -p /opt/chromedriver-$CHROMEDRIVER_VERSION && \
curl -sS -o /tmp/chromedriver_linux64.zip http://chromedriver.storage.googleapis.com/$CHROMEDRIVER_VERSION/chromedriver_linux64.zip && \
unzip -qq /tmp/chromedriver_linux64.zip -d /opt/chromedriver-$CHROMEDRIVER_VERSION && \
rm /tmp/chromedriver_linux64.zip && \
chmod +x /opt/chromedriver-$CHROMEDRIVER_VERSION/chromedriver && \
ln -fs /opt/chromedriver-$CHROMEDRIVER_VERSION/chromedriver /usr/local/bin/chromedriver
# Install Google Chrome
RUN curl -sS -o - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - && \
echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list && \
apt-get -yqq update && \
apt-get -yqq install google-chrome-stable && \
rm -rf /var/lib/apt/lists/*
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "app.py"]
flask
flask-restful
pymongo
bs4
selenium
selenium-requests
lxml
webdriver-manager
和
version: '3.9'
services:
web:
build: './web'
ports:
- '5000:5000'
links:
- db
db:
build: './db'
使用 web 文件夹 dockerfile 在 /usr/local/bin 文件夹中创建 chromedriver,在 /usr/bin 文件夹中创建 google-chrome 和 google-chrome-stable 文件。
所以我不明白为什么,即使经过这么多不同的尝试,我也无法让这段代码工作......有人可以帮我吗?
此错误消息...
selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally.
(unknown error: DevToolsActivePort file doesn't exist)
(The process started from chrome location /usr/bin/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)
...意味着ChromeDriver无法启动/生成新的WebBrowser ,即Chrome 浏览器session。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.