AWS Лямбда Nodejs 12.x с использованием Selenium: Chrome Драйвер не найден - PullRequest
0 голосов
/ 24 февраля 2020

Когда я запускаю свой nodejs 12.x код, вызывающий селен, я получаю сообщение об ошибке ниже.

На верхнем уровне моей структуры каталогов у меня есть индекс. js файл, Папка lib и папка node_modules.

Я готовлю код на Ma c, а затем архивирую его, загружаю на S3 и запускаю в Lambda.

Где должны быть мои исполняемые файлы chrome и chromedriver? Я не думаю, что могу использовать npm для их установки, так как я думаю, что мне нужны версии linux для работы в Lambda?

Это ошибка, которую я получаю:

{"errorType": "Error", "errorMessage": "ChromeDriver не найден в текущей переменной PATH. Загрузите последнюю версию ChromeDriver с http://chromedriver.storage.googleapis.com/index.html и убедитесь, что его можно найти в вашей переменной PATH. "," trace ": [" Ошибка: не удалось найти ChromeDriver в текущей переменной PATH. Загрузите последнюю версию ChromeDriver с http://chromedriver.storage.googleapis.com/index.html и убедитесь, что можно найти в вашем PATH. "," в новом ServiceBuilder (/var/task/node_modules/selenium-webdriver/chrome.js:232:13) "," в getDefaultService (/ var / task / node_modules /) selenium-webdriver / chrome. js: 321: 22) "," в Function.createSession (/var/task/node_modules/selenium-webdriver/chrome.js:695:44) "," в createDriver (/var/task/node_modules/selenium-webdriver/index.js:155:33) "," в Builder.build (/ var / task / node_modules / sel enium-webdriver / index. js: 662: 16) "," в Runtime.exports.handler (/var/task/index.js:38:26) "," в Runtime.handleOnce (/ var / время выполнения / время выполнения. js: 66: 25) "]}

Это мой код

'use strict';

exports.handler = async (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);

    //*****this is the problem line****//
    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();
};

Ответы [ 2 ]

0 голосов
/ 25 февраля 2020

Вы можете использовать chrome - aws -lambda пакет для запуска безголового в вашей лямбда-функции. Согласно документации будет использовано 512 МБ ОЗУ https://www.npmjs.com/package/chrome-aws-lambda

0 голосов
/ 24 февраля 2020

Проверьте это:

https://github.com/blackboard/lambda-selenium/blob/master/README.md

Добро пожаловать в проект лямбда-селен! Цель этого проекта - показать, как использовать Selenium Webdriver с сервисом лямбда-вычислений Amazon Web Services (AWS).

или

https://github.com/smithclay/lambdium/blob/master/README.md

Lambdium использует Selenium Webdriver с Headless Chromium для запуска скриптов Webdriver, написанных в JavaScript на AWS Lambda.

...