【问题标题】:Using selenium/standalone-chrome in docker-compose connecting with Python's selenium在 docker-compose 中使用 selenium/standalone-chrome 与 Python 的 selenium 连接
【发布时间】:2020-05-14 18:41:22
【问题描述】:

我在让 Python selenium 连接到 selenium/standalone-chrome 时遇到了麻烦,我正在寻找有关如何解决我的问题的见解。我想避免使用selenium/hub,但包括它似乎并不能解决我的问题。

这是我的 docker-compose.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

我在测试容器中运行的测试。在运行脚本之前,入口点会检查以确保 chrome 已启动并正在运行。

#!/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)

对于测试结果,Local 测试成功,只是在尝试使用遥控器时。有时我会收到错误hub not found in PATH,但该错误是间歇性的。

我可以通过http://server:444/wd/hub 访问网络界面,并且可以从那里启动会话和运行脚本。

我认为这可能是与容器无法相互联系有关的问题,我已经评估了以下资源以尝试解决该问题:

我检查过的帖子没有用:

感谢收看!

更新:在测试容器中,我可以通过curl http://chrome:4444/wd/hub/status 检索连接已启动并正在运行的状态,这是entryscript.sh 的一部分,所以我知道容器可以相互通信以某种方式。

【问题讨论】:

    标签: python-3.x selenium-webdriver docker-compose


    【解决方案1】:

    首先,我要感谢您所做的一切。到达这篇文章后,它给了我希望,我不是那个试图做这种事情的人。

    所以,问题是我能够成功地运行 docker-compose 中的所有内容,并且所有内容都按预期执行。

    从您的帖子中获得提示并进行了一些更改,并且确实有效。

    解决方案来了。

    文件名: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
    

    另外,请注意网格 url 是 http://chrome:4444/wd/hub 通过这种配置更改,我能够成功运行我的代码,并且还能够发送电子邮件。

    我希望这可以帮助那些被 docker-compose.yml 卡住的人

    【讨论】:

      【解决方案2】:

      感谢解决方案,我一直在为同样的错误而苦苦挣扎,但在我的情况下,失败是我没有添加以下行:

      privileged: true
      shm_size: 2g
      

      如果您想将其添加到您的解决方案中,我将只添加一个“修复”。 由于所有容器都在同一个 docker-compose 文件下构建,您无需创建网络,它会自动为所有容器创建

      version: '3.8'
      
      services:
          chrome:
              image: selenium/standalone-chrome:latest
              hostname: chrome
              privileged: true
              shm_size: 2g
          framework:
              build: .
              depends_on: 
                  - chrome
      

      再一次。谢谢!

      【讨论】:

        猜你喜欢
        • 2023-03-19
        • 1970-01-01
        • 2019-06-18
        • 2023-03-18
        • 1970-01-01
        • 2022-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多