我正在尝试使用Selenium和.NET Core来构建一个网络抓取应用程序,但是我很难找到我的WebDriver exe
。
我有一个.csproj,它将为该项目运行API,并(除其他外)调用另一个将处理网络抓取的.csproj。
全部都在单个.sln中,并且都在运行.NET Core 2.1
在抓取项目中,我已经nuget安装了Selenium.WebDriver
和Selenium.WebDriver.ChromeDriver
。
我已经在API中创建了一个终结点,该终结点调用了抓取项目,并运行了一个尝试调用new ChromeDriver()
的方法。它不起作用:(具体来说,我得到:
The chromedriver.exe file does not exist in the current directory or in a directory on the PATH environment variable. The driver can be downloaded at ... <url>
似乎很清楚(尽管令人失望的是它并没有告诉您“当前目录”是什么意思。我将立即为此提交PR)
通过观察重建和其他在线研究期间的变化,我发现:
dll
和exe
都存储在Global Nuget高速缓存中,而不是存储在解决方案目录中的nuget packages
文件夹中。chromedriver.exe
复制到<solutionFolder>\<ScrapingProjectFolder>\bin\Debug\chromeDriver.exe
。ChromeDriver
Nuget包所做的;当然,我自己还没有配置它。 new ChromeDriver()
JustWork成为一件合理的事情”。 WebDriver.dll
的位置”。<globalNugetPackagesCache>\selenium.webdriver\3.141.0\lib\netstandard2.0
” chromedriver.exe
最终出现在此文件夹中-将其复制到其他程序包的全局高速缓存中似乎是错误的吗? (人们同意吗?) new ChromeDriver(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location))
<solutionFolder>\<APIProjectFolder>\bin\Debug\<ScrapingProjectFolder>.dll
,因为dll被复制到API项目的文件夹中。 我想到了几种解决方案,但没有一种真正吸引人:
Selenium.WebDriver.ChromeDriver
安装到API项目中。exe
。是否有解决该问题的好方法,且不会引起黑客的注意。哪个会导致JustWorks生成一个git repo,并且将来将其部署到服务器上将相对容易些?
我上面描述的任何事情是否错误或配置错误?
最佳答案
如果我错了,请纠正我。您有某种引用了Selenium的类库,并且您想使用ChromeDriver.exe,但是会收到一个错误消息,即在以下位置找不到该错误。这很简单。
当前,您正在引用类库,可以说Foo到API。您的程序集位置将指向API容器位置,而chromedriver.exe位于类库容器下。
如果是这种情况,您唯一要做的就是将chromedriver.exe之后复制到最终的bin目录(即API)。
将以下构建后事件添加到您的API项目中,以复制chromedriver:
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
<Exec Command="copy $(SolutionDir)\ClassLibrary\bin\Debug\netstandard2.0\chromedriver.exe $(TargetDir)" />
</Target>
这会将您的chromedriver.exe复制到API bin。稍后在初始化ChromeDriver使用时:
var options = new ChromeOptions();
var service = ChromeDriverService.CreateDefaultService(AppDomain.CurrentDomain.BaseDirectory);
WebDriver = new ChromeDriver(service, options);
而
AppDomain.CurrentDomain.BaseDirectory
将指向您的API bin目录。关于c# - 在带有.NET Core的库csproj中使用Selenium WebDriver,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54282110/