Usar o selénio/cromo-autônomo na composição do docker ligando-se ao selénio do Python

Tenho tido dificuldade em fazer com que o selénio Python Se ligue ao selenium/standalone-chrome, e estava à procura de informações sobre como resolver o meu problema. Gostaria de evitar o uso de selenium/hub, mas incluí-lo não parece resolver o meu problema.

Aqui está a minha composição de Estivador.yml

version: '3.1'

networks:
  web:
    external: true

services:

  chrome:
    image: selenium/standalone-chrome:latest
    hostname: chrome
    networks:
      - web
    ports:
      - "5900:5900"
      - "4444:4444"
    privileged: true
    shm_size: 2g

  tests:
    build: ./tests
    networks:
      - web
E o teste que estou a fazer dentro do recipiente de teste. O entrypoint verifica se o chrome está pronto e em execução antes de executar os scripts.

#!/usr/bin/env python3
"""Tests that the remote webdriver works."""
import unittest
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities


class LocalGoogleTestCase(unittest.TestCase):

    def setUp(self):
        self.browser = webdriver.Chrome()
        self.addCleanup(self.browser.quit)

    def testPageTitle(self):
        self.browser.get('http://www.google.com')
        self.assertIn('Google', self.browser.title)


class RemoteGoogleTestCase(unittest.TestCase):

    def setUp(self):
        self.browser = webdriver.Remote(
            command_executor='http://chrome:4444/wd/hub',
            desired_capabilities=DesiredCapabilities.CHROME)
        self.addCleanup(self.browser.quit)

    def testPageTitle(self):
        self.browser.get('http://www.google.com')
        self.assertIn('Google', self.browser.title)


if __name__ == '__main__':
    unittest.main(verbosity=2)

para os resultados dos testes, o Local o teste tem sucesso, é só quando se tenta usar o comando. Ocasionalmente eu vou ter o erro hub not found in PATH, mas esse erro é intermitente.

Eu sou capaz de Acessar a interface web via http://server:444/wd/hub e pode iniciar sessões e executar scripts a partir daí.

Acho que pode ser uma questão relacionada com contêineres que não conseguem chegar um ao outro e avaliei os seguintes recursos para tentar questão:

lugares que examinei que não funcionavam:

Obrigado por procurar!

actualização: a partir de dentro os testes recipiente, eu sou capaz de curl http://chrome:4444/wd/hub/status para recuperar o status que a conexão está funcionando, e isso é parte do entryscript.sh, então eu sei que os recipientes podem falar uns com os outros de alguma forma.

Author: sempervent, 2020-05-14

1 answers

Primeiro, do al, quero agradecer-te por tudo isto. Depois de chegar a este post deu-me a esperança de que eu não sou o único que está tentando fazer tal coisa. Então, o que se passa é que sou capaz de executar com sucesso tudo a partir da composição do ancoradouro e tudo executado como esperado. Recebi dicas do teu post, fiz algumas alterações e funcionou. Aqui vai a solução.

Nome do ficheiro: "docker-compose".yml

version: '3.8'

networks:
    web:
      external: true
      driver:  bridge

services:
    chrome:
        image: selenium/standalone-chrome:latest
        hostname: chrome
        networks:
          - web
        privileged: true
        shm_size: 2g
    framework:
        build: .
        networks:
            - web
        depends_on: 
            - chrome

Também, note que o url da grelha é http://chrome:4444/wd/hub Com esta mudança na configuração, eu fui capaz de executar o meu código com sucesso e eu também foi capaz de enviar e-mails.

Espero que isto ajude alguém que está preso na composição do ancoradouro.yml
 3
Author: Abhishek Puri, 2020-08-22 07:54:26