我写了一个使用Selenium框架进行爬网的网络机器人。安装了ChromeDriver 72.0.3626.69,还下载了Chromium 72.0.3626.121。该应用使用此包含的Chromium二进制文件(而不是本地安装的Chrome二进制文件)初始化ChromeDriver。所有这些都可以在我的本地计算机上完美运行。
我一直在尝试将应用程序移植到Azure Functions。我编写了一个函数,对其进行了测试,它在本地运行良好。但是,一旦我将其发布到Azure Functions,它就会由于大约182个类型的错误而失败:
试图以一种禁止其访问的方式访问套接字 访问权限
我知道发生这种情况是由于超出了Azure沙箱的TCP连接限制,但是这里唯一的尝试是创建一个ChromeDriver实例(甚至还没有导航!)
这是Azure Function调用日志的屏幕截图。
该错误连续出现182次,基本上只是尝试创建一个浏览器实例(确切地说是ChromeDriver实例-不确定是由Chromium还是ChromeDriver引起的)。
问题:有没有人在启动ChromeDriver / Chromium时创建太多(显然过多)的连接?还有什么可能有助于避免这种情况。
如果有帮助,基本上这是一段代码,最后一行崩溃了:
ChromeOptions options = new ChromeOptions();
options.BinaryLocation = this.chromePath;
options.AddArgument("no-sandbox");
options.AddArgument("disable-infobars");
options.AddArgument("--disable-extensions");
if (this.headlessMode)
{
options.AddArgument("headless");
}
options.AddUserProfilePreference("profile.default_content_setting_values.images", 2);
Log.LogInformation("Chrome options compiled. Creating ChromeDriverService...");
var driverService = ChromeDriverService.CreateDefaultService(this.driverPath);
driver = new ChromeDriver(driverService, options, timeout);