无法在Python中连接到Docker容器内的Selenium

im9ewurl  于 2023-08-03  发布在  Docker
关注(0)|答案(2)|浏览(101)

我正在尝试在Python中连接Docker容器内的 selenium 。
我用的是M1 Mac我采取的步骤是

  1. $ docker run -d -p 4444:4444 --shm-size="2g" selenium/standalone-chrome:4.0.0-rc-1-prerelease-20210804(此命令引用自https://github.com/SeleniumHQ/docker-selenium
    1.执行下面的Python代码。
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

driver = webdriver.Remote(
    command_executor="http://localhost:4444/wd/hub",
    desired_capabilities=DesiredCapabilities.CHROME
)

driver.get("https://stackoverflow.com/")
print(driver.title)
driver.quit()

字符串
它给我的错误显示在下面。

Traceback (most recent call last):
  File "/Users/ren/Code/rarejob-tutor-checker/server/index.py", line 9, in <module>
    driver = webdriver.Remote(
  File "/Users/ren/.local/share/virtualenvs/rarejob-tutor-checker-yZ3a8Uiu/lib/python3.9/site-packages/selenium/webdriver/remote/webdriver.py", line 157, in __init__
    self.start_session(capabilities, browser_profile)
  File "/Users/ren/.local/share/virtualenvs/rarejob-tutor-checker-yZ3a8Uiu/lib/python3.9/site-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session
    response = self.execute(Command.NEW_SESSION, parameters)
  File "/Users/ren/.local/share/virtualenvs/rarejob-tutor-checker-yZ3a8Uiu/lib/python3.9/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "/Users/ren/.local/share/virtualenvs/rarejob-tutor-checker-yZ3a8Uiu/lib/python3.9/site-packages/selenium/webdriver/remote/errorhandler.py", line 130, in check_response
    status = value["status"]
KeyError: 'status'


我不知道为什么会这样。
※注意事项
1.我可以连接到http://localhost:4444/ui/index.html#/Screen shot

  1. curl也可以
$ curl http://localhost:4444/status
{
  "value": {
    "ready": true,
    "message": "Selenium Grid ready.",
    "nodes": [
      {
        "id": "af7033c1-aea3-46f3-9669-e8b1edb4922a",
        "uri": "http:\u002f\u002f4d3bede65cd7:4444",
        "maxSessions": 1,
        "osInfo": {
          "arch": "amd64",
          "name": "Linux",
          "version": "5.10.25-linuxkit"
        },
        "heartbeatPeriod": 60000,
        "availability": "UP",
        "version": "4.0.0-rc-1 (revision c498dad8c5)",
        "slots": [
          {
            "lastStarted": "2021-08-09T23:37:31.804771Z",
            "session": null,
            "id": {
              "hostId": "af7033c1-aea3-46f3-9669-e8b1edb4922a",
              "id": "eec094e6-ac6d-4fbc-907c-56d7d4cf8090"
            },
            "stereotype": {
              "browserName": "chrome",
              "browserVersion": "92.0",
              "platformName": "Linux",
              "se:vncEnabled": true
            }
          }
        ]
      }
    ]
  }
}

ycggw6v2

ycggw6v21#

似乎Selenium官方镜像selenium/standalone-chrome在M1 Mac OS上不起作用,因为代码在Ubuntu OS上运行时可以正常工作。

jjhzyzn0

jjhzyzn02#

我最近遇到并解决了一个类似的问题,这可能对你有帮助。
转到Docker Desktop设置>>正在开发的功能>>启用在Apple Silicon上使用Rosetta进行x86/amd 64仿真
在启用该选项之前,在Mac M1上执行selenium/standalone-chrome docker镜像时,您可能会遇到以下警告消息:
警告:请求的映像的平台(linux/amd 64)与检测到的主机平台(linux/arm 64/v8)不匹配,并且没有请求特定的平台
这个问题可以通过参考here提供的信息来解决,如果您没有在Mac Docker Desktop中启用Use Rosetta for x86/amd64 emulation on Apple Silicon,那么您可以找到容器日志(docker logs $YOUR_CONTAINER_ID),在您启动新会话后可能会产生以下错误消息:
使用驱动程序服务创建会话时出错。正在停止驱动程序服务:无法启动新会话。响应代码500。错误信息:DevToolsActivePort文件不存在
我的Golang代码的错误消息如下:
“message”:“无效的会话ID:无法执行现有会话的请求:无法找到ID为:\n生成信息:版本:“4.10.0”,修订版本:'c14 d967899'\n系统信息:os.name:'Linux',os.arch:“amd 64”,操作系统版本:'5.15.49-linuxkit-pr',java.版本:'11.0.19'\n驱动程序信息:driver.version:未知”
本质上,当请求的Docker镜像的平台与主机平台不匹配时,就会发生此错误。启用'Rosetta'选项进行仿真应该可以通过允许Docker运行为不同架构构建的镜像来缓解这个问题。
我希望这对你的场景有帮助。

相关问题