Je souhaite exécuter un chrome sans tête à l'intérieur d'un conteneur Docker à l'aide de sélénium et de webdriver avec nodejs. J'ai créé un conteneur avec tout installé et pendant que je peux lancer un chrome sans tête à l'intérieur de lancer avec succès un test de nodejs webdriver se bloque toujours après un certain temps.Chrome sans tête dans Docker Erreur inconnue
WebDriverError: unknown error: Chrome failed to start: exited abnormally
(Driver info: chromedriver=2.32.498513 (2c63aa53b2c658de596ed550eb5267ec5967b351),platform=Linux 4.9.41-moby x86_64)
at WebDriverError (/usr/src/app/node_modules/selenium-webdriver/lib/error.js:27:5)
at Object.checkLegacyResponse (/usr/src/app/node_modules/selenium-webdriver/lib/error.js:529:15)
at parseHttpResponse (/usr/src/app/node_modules/selenium-webdriver/lib/http.js:509:13)
at doSend.then.response (/usr/src/app/node_modules/selenium-webdriver/lib/http.js:441:30)
at process._tickCallback (internal/process/next_tick.js:109:7)
From: Task: WebDriver.createSession()
at Function.createSession (/usr/src/app/node_modules/selenium-webdriver/lib/webdriver.js:769:24)
at Function.createSession (/usr/src/app/node_modules/selenium-webdriver/chrome.js:761:15)
at createDriver (/usr/src/app/node_modules/selenium-webdriver/index.js:170:33)
at Builder.build (/usr/src/app/node_modules/selenium-webdriver/index.js:642:16)
at Object.<anonymous> (/usr/src/app/selenium.js:19:4)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
code complet peut être vu here aussi.
Mon Dockerfile est quelque chose comme ça
FROM debian:sid
# Install deps + add Chrome Stable + purge all the things
RUN apt-get update && apt-get install -y \
apt-transport-https \
ca-certificates \
curl unzip \
gnupg \
--no-install-recommends \
&& curl -sSL https://dl.google.com/linux/linux_signing_key.pub | apt-key add - \
&& echo "deb [arch=amd64] https://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google-chrome.list \
&& apt-get update && apt-get install -y \
nodejs npm google-chrome-stable \
--no-install-recommends \
&& apt-get purge --auto-remove -y gnupg \
&& rm -rf /var/lib/apt/lists/*
# Add Chrome as a user
RUN groupadd -r chrome && useradd -r -g chrome -G audio,video chrome \
&& mkdir -p /home/chrome && chown -R chrome:chrome /home/chrome
# Add app and install dependencies
WORKDIR /usr/src/app
RUN chown -R chrome: /usr/src/app
USER chrome
COPY . .
RUN npm install
ENV DBUS_SESSION_BUS_ADDRESS=/dev/null
CMD ["node", "selenium.js"]
J'ai essayé plusieurs versions mais il est toujours plus ou moins la même chose.
Asp dépendances NPM j'ai
"chromedriver": "^2.32.0",
"selenium-webdriver": "^3.5.0"
Et mon code est ce genre de Bonjour tout le monde qui fonctionne en douceur dans mon ordinateur régulier
const fs = require('fs');
const webdriver = require('selenium-webdriver');
const chromedriver = require('chromedriver');
// const PATH_TO_CHROME = 'C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe';
const PATH_TO_CHROME = '/usr/bin/google-chrome';
const chromeCapabilities = webdriver.Capabilities.chrome();
chromeCapabilities.set('chromeOptions', {
binary: PATH_TO_CHROME,
'args': [
'--headless --window-size=800,600 --disable-gpu',
]
});
const driver = new webdriver.Builder()
.forBrowser('chrome')
.withCapabilities(chromeCapabilities)
.build();
// Navigate to google.com, enter a search.
driver.get('https://www.google.com/ncr');
driver.findElement({ name: 'q' }).sendKeys('webdriver', webdriver.Key.RETURN);
driver.wait(webdriver.until.titleIs('webdriver - Google Search'), 1000);
// Take screenshot of results page. Save to disk.
driver.takeScreenshot().then(base64png => {
fs.writeFileSync('screenshot.png', new Buffer(base64png, 'base64'));
});
driver.quit();
Enfin je cours tout avec
docker run --rm --cap-add=SYS_ADMIN headless
Que se passe-t-il? Je ne sais pas comment obtenir plus de détails de journal aussi. J'ai lu différents articles sur les particularités de l'exécution de chrome dans docker mais il semble y avoir quelque chose qui empêche mon pilote web de fonctionner.
J'ai rempli un issue in the webdriver project pour suivre ce problème.
Ma question concerne l'utilisation de webdriver à partir du noeud à l'intérieur du conteneur plutôt que du serveur Java autonome. De toute façon la même erreur se produit avec l'image autonome. Il n'est pas basé sur debian mais sur Ubuntu16.04 qui est venu avec une ancienne version de noeud donc vous devez installer un noeud avec un script. – guillem