gpt4 book ai didi

selenium - 如何使用官方的 selenium docker 镜像?

转载 作者:行者123 更新时间:2023-12-02 19:28:50 25 4
gpt4 key购买 nike

我正在尝试在 Docker 中设置一个使用 Selenium Webdriver 和 Firefox 的 .NET Core 控制台应用程序,但我很难理解如何实际使用 official Selenium docker images .

目前,控制台应用程序只是一个尝试访问 Google.com 并成功报告的应用程序。

尝试创建新的 FirefoxDriver 时,我一直收到以下错误消息:

Expected browser binary location, but unable to find binary in default location, no 'moz:firefoxOptions.binary' capability provided, and no binary flag set on the command line (SessionNotCreated)



这是Dockerfile(由VSCode Docker扩展生成+我添加的一行,现在注释掉):
FROM microsoft/dotnet:2.1-runtime AS base
WORKDIR /app

FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
COPY ["MyAppName.csproj", "./"]
RUN dotnet restore "./MyAppName.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "MyAppName.csproj" -c Release -o /app

FROM build AS publish
RUN dotnet publish "MyAppName.csproj" -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .

# FROM selenium/standalone-firefox-debug ## where does this go?

ENTRYPOINT ["dotnet", "MyAppName.dll"]

我尝试在各个点插入 selenium 独立图像,尝试从 '/bin/bash/' 入口点开始尝试查找 firefox 是否真的在图像中(它似乎不是,不在常规位置)。它仍然抛出异常。

我真正想要的只是在我的容器中安装 firefox,以便我可以运行我的 .NET Core 控制台应用程序,但根据一些谷歌搜索,最简单的方法应该是通过 selenium 图像。

如何正确使用 selenium docker 镜像?

最佳答案

回答我自己的问题,以防 Docker 新手遇到同样的问题并在这里结束。

我想到了。

更好的方法是使用 docker-compose运行 3 个不同的服务:我的 C# 脚本、一个 selenium hub 服务和一个 selenium firefox 节点。 (你可能只需要一个脚本和一个 selenium firefox 独立图像就可以做到这一点,但我只是发布了对我有用的第一件事。稍后会尝试其他东西)

我删除了 FROM selenium/standalone-firefox-debug来自我的 .NET Core 控制台应用程序 Dockerfile 的语句,然后输入以下 docker-compose.yml与我的 Dockerfile 位于同一文件夹中的文件(大部分来自 this stackoverflow answer ):

version: '2'
services:
seltest:
build:
context: .
volumes:
- ./temp:/usr/src/app/target
environment:
- HUB_PORT_4444_TCP_ADDR=seleniumhub
- HUB_PORT_4444_TCP_PORT=4444
depends_on:
- seleniumhub
seleniumhub:
image: selenium/hub
ports:
- 4444:4444
firefoxnode:
image: selenium/node-firefox-debug
ports:
- 5900
environment:
- HUB_PORT_4444_TCP_ADDR=seleniumhub
- HUB_PORT_4444_TCP_PORT=4444

在我的 C# 脚本中,我现在必须进行一些更改。我必须将我的远程 webdriver 连接到正确的 URI:
IWebDriver driver = new RemoteWebDriver(new Uri("http://seleniumhub:4444/wd/hub"), firefoxOptions);

( seleniumhub :4444 因为我在 docker-compose.yml 中创建的服务名称是 seleniumhub 而 4444 是为此服务打开的端口)

因为 depends_on在 docker-compose 中只等待 the services to start and not until they're 'ready' ,在我尝试使用它们之前,我采用了一种 hacky 方法来确保 selenium hub 和 firefox 服务已准备就绪,并且只是做了一个:
Thread.Sleep(10000);

在调用远程 webdriver 之前。如果我 不要这样做然后我在尝试调用 webdriver 时收到以下错误:

Unhandled Exception: OpenQA.Selenium.WebDriverException: A exception with a null response was thrown sending an HTTP request to the remote WebDriver server for URL http://seleniumhub:4444/wd/hub/session. The status of the exception was UnknownError, and the message was: Connection refused Connection refused ---> System.Net.WebException: Connection refused Connection refused ---> System.Net.Http.HttpRequestException: Connection refused ---> System.Net.Sockets.SocketException: Connection refused



然后我就运行 docker compose up从命令行启动服务,我可以验证我的 C# 脚本是否已到达 https://www.google.com成功地。

似乎整个它可以在很多方面进行优化,但对我来说,概念验证已经完成!

关于selenium - 如何使用官方的 selenium docker 镜像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53640345/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com