2017-10-20 34 views
0

Essayer d'obtenir une fonction AWS Lambda pour exécuter Selenium sur .NET Core. Voici le code:Comment faire fonctionner Selenium dans AWS Lambda en utilisant .net core

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"; 
      } 
     } 

L'erreur que je reçois dans la console AWS est:

OpenQA.Selenium.WebDriverException: Impossible de démarrer le service du pilote sur http://localhost:41663/ à OpenQA.Selenium.DriverService.Start() à OpenQA.Selenium.Remote.DriverServiceCommandExecutor.Execute (Command commandToExecute) à OpenQA.Selenium.Remote.RemoteWebDriver.Execute (String driverCommandToExecute, les paramètres Dictionary`2) à OpenQA.Selenium.Remote.RemoteWebDriver.StartSession (ICapabilities desiredCapabilities) à OpenQA.Selenium.Remote.Re moteWebDriver..ctor (ICommandExecutor commandExecutor, ICapabilities desiredCapabilities) à OpenQA.Selenium.IE.InternetExplorerDriver..ctor (service InternetExplorerDriverService, options InternetExplorerOptions, TimeSpan CommandTimeOut) à OpenQA.Selenium.IE.InternetExplorerDriver..ctor (service InternetExplorerDriverService, InternetExplorerOptions options) à OpenQA.Selenium.IE.InternetExplorerDriver..ctor (options) InternetExplorerOptions à OpenQA.Selenium.IE.InternetExplorerDriver..ctor() à InstagramMagic.Function.FunctionHandler (contexte ILambdaContext)

+0

Il est préférable de ne pas utiliser les pilotes locaux sur Lambda, vous serait mieux servi en gardant une grille de sélénium externe, puis en utilisant l'URL de la grille dans votre script –

Répondre

0

Il est possible , mais jusqu'ici je n'ai eu de la chance que de travailler avec Chrome. AWS Lambda exécute une version minimale d'Amazon Linux. Si vous voulez exécuter quelque chose dessus au-delà des bases, vous devez empaqueter un fichier zip et le déployer avec tous les binaires requis. Malheureusement, je doute que IE fonctionnera sur AWS Lambda. Cependant, il existe un espoir qu'il puisse s'exécuter sur le service équivalent d'Azure, qui utilise ce qu'il appelle un «conteneur Windows».

Vous devez spécifier l'emplacement du binaire Chrome dans le système de fichiers d'exécution de Lambda qui contient votre fonction, qui sera/var/task /. Ceci est un exemple de node.js de ce que vous essayez de faire, mais en utilisant 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(); 
 
};

J'ai fait un zip emballé runnable cela avec un tutoriel vidéo sur GitHub, avec une explication plus détaillée. Pic à l'intérieur du fichier zip pour avoir une idée de la façon dont le paquet devrait être aménagé. https://blackboard.github.io/lambda-selenium/

En outre, j'ai soumis un problème en votre nom pour un exemple exécutable .net.

https://github.com/blackboard/lambda-selenium/issues/22

+0

fantastique! Je vais essayer. Merci pour l'exemple! – scottndecker