当前位置: 首页 > 知识库问答 >
问题:

如何利用.NET内核使Selenium在AWS Lambda中运行

梁巴英
2023-03-14

试图获得AWS Lambda函数以在.NET内核上运行Selenium。下面是代码:

public string FunctionHandler(ILambdaContext context)
        {
            context.Logger.LogLine("Entering function");
            try
            {
                var driver = new InternetExplorerDriver();
                context.Logger.LogLine("Navigating to URL");

                driver.Navigate().GoToUrl("http://www.google.com/");

                context.Logger.LogLine("Returning Done");
                return "Done";
            }
            catch (Exception e)
            {
                context.Logger.LogLine("Oops: " + e);
                return "Failed";
            }
        }

OpenQa.Selenium.WebDriverException:无法在http://localhost:41663/at OpenQa.Selenium.DriverService.start()at OpenQa.Selenium.Remote.DriverServiceCommandToExecute(命令commandToExecute)at OpenQa.Selenium.Remote.RemoteWebDriver.Execute(字符串driverCommandToExecute,字典`2参数)at OpenQa.Selenium.Remote.RemoteWebDriver.StartSession(ICapabilities desiredCapabilitiesext上下文)

共有1个答案

傅旺
2023-03-14

这是可能的,但到目前为止,我只是运气让它与Chrome一起工作。AWS Lambda正在运行Amazon Linux的裸版。如果您想在其上运行一些超出基本内容的东西,您必须打包一个zip文件,并将其与所需的所有二进制文件一起部署。不幸的是,我怀疑IE是否会在AWS Lambda上运行。然而,它有希望运行在Azure的等价服务上,该服务使用他们所谓的“Windows容器”。

您必须指定Chrome二进制文件在包含您的函数的lambda运行时文件系统中的位置,该函数将是/var/task/。这是一个Node.js示例,说明您正在尝试执行的操作,但使用的是ChromeDriver。

'use strict';

exports.handler = (event, context, callback) => {
    var webdriver = require('selenium-webdriver');
    var chrome = require('selenium-webdriver/chrome');
    var builder = new webdriver.Builder().forBrowser('chrome');
    var chromeOptions = new chrome.Options();
    const defaultChromeFlags = [
        '--headless',
        '--disable-gpu',
        '--window-size=1280x1696', // Letter size
        '--no-sandbox',
        '--user-data-dir=/tmp/user-data',
        '--hide-scrollbars',
        '--enable-logging',
        '--log-level=0',
        '--v=99',
        '--single-process',
        '--data-path=/tmp/data-path',
        '--ignore-certificate-errors',
        '--homedir=/tmp',
        '--disk-cache-dir=/tmp/cache-dir'
    ];

    chromeOptions.setChromeBinaryPath("/var/task/lib/chrome");
    chromeOptions.addArguments(defaultChromeFlags);
    builder.setChromeOptions(chromeOptions);

    var driver = builder.build();
    driver.get(event.url);
    driver.getTitle().then(function(title) {

        console.log("Page title for " + event.url + " is " + title)
        callback(null, 'Page title for ' + event.url + ' is ' + title);
    });

    driver.quit();
};
 类似资料:
  • 我正在尝试使用iTextSharpLGPLv2将HTML文档转换为PDF。核心nuget库。 我面临的问题是,HTMLWorker不再支持iTextSharper。 下面是我的代码。 任何替代iTextSharper的产品。净核心?或者用其他方法来解决这个问题?

  • 我已经为主项目和测试创建了.NET Standard1.6类库,并复制了代码。我将单元测试改为使用xUnit属性和断言,而不是NUnit。 除此之外,我基本上遵循了文档中的说明,因此添加了以下NuGet包: microsoft.net.test.sdk xUnit xunit.runner.visualstudio

  • 运行代码后,我检查http://localhost:8983/solr/#/~cores/core1并看到1000000个索引文档。 然后我添加了另一个核心(以与核心1相似的方式命名为核心2),然后再次运行该作业,这一次,我看到核心2没有显示任何文档,只有核心1仍然显示。 有没有人可以建议一下如何使用solr的内核来分发和存储文档,这样我就可以更快地索引数据,我的假设是,如果增加内核的数量,索引的

  • 我想发送动态对象,如 作为HTTP POST消息的主体。所以我试着写 但我找不到方法 所以我尝试添加微软。AspNetCore.http://http.扩展包project.json并添加 to使用子句。然而,这对我没有帮助。 那么,在ASP. NET Core中使用JSON主体发送POST请求的最简单方法是什么?

  • 我向我的.NET核心应用程序添加了一个app.config文件,如下所示 现在我在下面发现了一个错误 消息“无法加载在应用程序配置文件中注册得实体框架提供程序类型'System.Data.Entity.SqlServer.SqlProviderServices、EntityFramework.SqlServer',以固定名称为'System.Data.SqlClient'得ADO.NET提供程序.