【问题标题】:Running browsermob with selenium grid on docker在 docker 上运行带有 selenium 网格的 browsermob
【发布时间】:2017-09-01 21:07:07
【问题描述】:

我正在使用用于 browsermob 的 python 客户端来记录我的 selenium 测试的流量。 Selenium 网格位于 docker 容器中,其中包含 chrome 和 firefox 的图像。我似乎无法正确配置 docker 图像以连接到代理和网格。 这是我用来创建代理和远程 Web 驱动程序的代码:

server = browsermobproxy.Server('mylocalpathtobrowsermobbin')
server.start()
proxy = server.create_proxy()
proxy.new_har()
driver = webdriver.Remote(
                command_executor='http://127.0.0.1:4444/wd/hub',
                desired_capabilities={
                    'browserName': 'chrome',
                    'chromeOptions': {
                        'args': ["--proxy-server={}".format(proxy.proxy)]}
                    })

这是我的 docker-compose 文件:

中心: 图片:硒/集线器 端口: - “4444:4444” 铬合金: 图片:硒/节点铬调试 卷: - /dev/shm:/dev/shm 链接: - 中心 端口: - “5900:5900”

我是 docker 新手,我知道我需要公开代理用来连接的端口,但我无法让它工作。任何帮助表示赞赏,谢谢!

【问题讨论】:

  • 代码在哪里运行?
  • 现在它在本地运行,包括测试和 docker 镜像,最终它将在 jenkins CI 上运行,这与我的本地机器的设置几乎相同。

标签: python selenium docker browsermob browsermob-proxy


【解决方案1】:

根据 Sergey 的回答回答我自己的问题: 我将 browsermob-proxy 图像推送到 docker hub: https://hub.docker.com/r/spothero/browsermob-proxy/

从这个存储库创建: https://github.com/sskorol/docker-browsermob-proxy

Docker 文件的所有功劳归谢尔盖所有。

我的 docker 撰写文件:

中心: 图片:硒/集线器 端口: - “4444:4444” 火狐: 图片:硒/节点火狐 链接: - 中心 铬合金: 图片:硒/节点铬调试 卷: - /dev/shm:/dev/shm 链接: - 中心 端口: - “5900:5900” 浏览器mobproxy: 图片:spothero/browsermob-proxy:1.0.0 端口: - “9090-9191:9090-9191” 暴露: - “9090-9191” 链接: - 中心 - 火狐 - 铬合金

在詹金斯的工作中,我有一个 shell 步骤:

#!/bin/bash docker-compose up -d --force-recreate 睡10s PROXY_IP_ADDRESS="$(docker inspect --format {{.NetworkSettings.IPAddress}} browsermobproxy_1)" 导出 BROWSERMOB_CONTAINER_HOST=$PROXY_IP_ADDRESS

我使用环境变量将主机传递给我的测试代码。 下面是使用代理初始化 webdriver 的代码:


    import browsermobproxy
    self.client = browsermobproxy.Client('localhost:9090')
    self.driver = webdriver.Remote(
        command_executor=settings.SELENIUM_GRID_HUB,
        desired_capabilities={
            'browserName': 'chrome',
            'chromeOptions': {
                'args': ["--proxy-server={}".format(
                    os.environ.get('BROWSERMOB_CONTAINER_HOST'), self.client.port)]
            }
        })

希望这会有所帮助!

【讨论】:

  • 嗨@eduardoreynoso,我已经使用了上面提到的dockerfile。使用它我可以启动 browsermob 和网格。但是,当我尝试使用您的代码初始化 webdriver 时,它失败了。因为我提供的是 browsermob docker 容器的 ip 而不是 localhost。你能告诉我如何解决这个问题吗?
【解决方案2】:

您还必须在容器中培养 BMP。然后将其与网格链接。检查此article 以获得想法和关键实现/配置点。

【讨论】:

  • 谢谢 Sergey,我使用了这篇文章和你的实现的链接,我设法让它工作,一旦我有时间,我会发布一个完整的答案供其他人查看。再次感谢!
猜你喜欢
  • 2023-03-22
  • 2018-04-18
  • 1970-01-01
  • 1970-01-01
  • 2013-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-02
相关资源
最近更新 更多