Sho*_*hoe 14 c# asp.net selenium docker asp.net-core
如何安装所有组件以在docker容器中运行Selenium?
我从这张图片开始:
FROM microsoft/aspnetcore-build:2 AS builder
WORKDIR /source
COPY . .
RUN dotnet restore
RUN dotnet build
ENTRYPOINT ["dotnet", "run"]
Run Code Online (Sandbox Code Playgroud)
我该如何制作它以便我可以启动并使用无头Chrome驱动程序:
ChromeOptions options = new ChromeOptions();
options.AddArgument("--headless");
options.AddArgument("--disable-gpu");
var driverPath = Path.GetFullPath(Path.Combine(environment.ContentRootPath, "bin/Debug/netcoreapp2.0"));
return new ChromeDriver(driverPath, options, TimeSpan.FromSeconds(60));
Run Code Online (Sandbox Code Playgroud)
在docker容器内?
它chromedriver通过Selenium.WebDriver.ChromeDriverNuGet包分发.
在安装了Google Chrome的Mac OS X上,当前设置工作正常.
我试图添加这些行:
RUN apt-get update && apt-get -y install libglib2.0-dev libxi6 libnss3-dev
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
RUN sh -c 'echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
RUN apt-get update && apt-get -y install google-chrome-stable
Run Code Online (Sandbox Code Playgroud)
以上安装此版本的Chrome:
google-chrome-stable:
Installed: 64.0.3282.119-1
Candidate: 64.0.3282.119-1
Version table:
*** 64.0.3282.119-1 500
500 http://dl.google.com/linux/chrome/deb stable/main amd64 Packages
100 /var/lib/dpkg/status
Run Code Online (Sandbox Code Playgroud)
与Chrome驱动程序的版本兼容.
它来自试图通过尝试使用docker容器运行Selenium来解决每个错误.
如果我运行此设置,我得到:
在端口57889上启动ChromeDriver 2.35.528139(47ead77cb35ad2a9a83248b292151462a66cd881)仅允许本地连接.发送请求时发生错误.无法连接到
在运行容器时.
如果我手动输入容器并尝试手动运行chrome驱动程序,我会得到:
在端口9515上启动ChromeDriver 2.35.528139(47ead77cb35ad2a9a83248b292151462a66cd881)仅允许本地连接.
并且curl -i http://localhost:9515/status我得到了:
HTTP/1.1 200 OK
Content-Length:136
Content-Type:application/json; charset=utf-8
Connection:close
{"sessionId":"","status":0,"value":{"build":{"version":"alpha"},"os":{"arch":"x86_64","name":"Linux","version":"4.9.60-linuxkit-aufs"}}}
Run Code Online (Sandbox Code Playgroud)
所以看起来司机工作得很好.
如果我运行chrome headless而不是通过google-chrome-stable --headless --disable-cpu --no-sandbox我得到:
[0125/210641.877388:WARNING:discardable_shared_memory_manager.cc(178)] Less than 64MB of free space in temporary directory for shared memory files: 63
[0125/210641.902689:ERROR:instance.cc(49)] Unable to locate service manifest for metrics
[0125/210641.902756:ERROR:service_manager.cc(890)] Failed to resolve service name: metrics
[0125/210642.031088:ERROR:instance.cc(49)] Unable to locate service manifest for metrics
[0125/210642.031119:ERROR:service_manager.cc(890)] Failed to resolve service name: metrics
[0125/210642.032934:ERROR:gpu_process_transport_factory.cc(1009)] Lost UI shared context.
Run Code Online (Sandbox Code Playgroud)
第一个警告可以通过设置docker volume /dev/shm:/dev/shm或设置-shm-size为大(高于64MB)来解决.
其余的错误,如果谷歌,导致我从谷歌Chrome存储库的许多错误报告.
我使用了 Selenium 映像,在那里安装了 dotnet 运行时并使其正常工作。
这是我的 Dockerfile:
FROM selenium/standalone-chrome:latest AS base
WORKDIR /app
# build and copy dotnet project
FROM mcr.microsoft.com/dotnet/sdk:5.0-buster-slim AS build
WORKDIR /src
COPY ["TestBot/TestBot.csproj", "TestBot/"]
RUN dotnet restore "TestBot/TestBot.csproj"
COPY . .
WORKDIR "/src/TestBot"
RUN dotnet build "TestBot.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "TestBot.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
# install dotnet
RUN sudo wget https://packages.microsoft.com/config/debian/10/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
RUN sudo dpkg -i packages-microsoft-prod.deb
RUN sudo apt-get update
RUN sudo apt-get install -y dotnet-runtime-5.0
ENTRYPOINT ["dotnet", "TestBot.dll"]
Run Code Online (Sandbox Code Playgroud)
我的 C# 代码与您的类似:
using OpenQA.Selenium.Remote;
using OpenQA.Selenium;
using System;
using OpenQA.Selenium.Chrome;
using System.Drawing;
using OpenQA.Selenium.Firefox;
using System.Threading;
namespace TestBot
{
internal class Program
{
private static void Main(string[] args)
{
ChromeOptions Options = new ChromeOptions();
if (OperatingSystem.IsWindows())
{
Options.AddAdditionalCapability("platform", "WIN10", true); // Supported values: "VISTA" (Windows 7), "WIN8" (Windows 8), "WIN8_1" (windows 8.1), "WIN10" (Windows 10), "LINUX" (Linux)
}
else
{
Options.AddAdditionalCapability("platform", "LINUX", true); // Supported values: "VISTA" (Windows 7), "WIN8" (Windows 8), "WIN8_1" (windows 8.1), "WIN10" (Windows 10), "LINUX" (Linux)
}
Options.AddArgument("--headless");
ChromeDriver driver = new ChromeDriver(Options);
try
{
// driver.Manage().Window.Size = new Size(1920, 1080);
driver.Navigate().GoToUrl("https://google.com/");
var test = driver.FindElementByTagName("html").Text;
Console.WriteLine(test);
}
finally
{
driver.Quit();
}
Console.ReadLine();
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 0
有一个围绕 Docker 容器构建的非常简洁的框架,用作远程驱动程序位置。
http://aerokube.com/selenoid/latest/
我还没有完全实现它,但我设法轻松地创建了 docker 容器,其中包含适当的 chrome 和 firefox 驱动程序。
| 归档时间: |
|
| 查看次数: |
3164 次 |
| 最近记录: |