【问题标题】:AWS Lambda Nodejs 12.x using Selenium: Chrome Driver not found使用 Selenium 的 AWS Lambda Nodejs 12.x:找不到 Chrome 驱动程序
【发布时间】:2020-06-08 11:55:20
【问题描述】:

当我运行调用 selenium 的 nodejs 12.x 代码时,我收到以下错误。

在我的目录结构的顶层,我有我的 index.js 文件、一个 lib 文件夹和一个 node_modules 文件夹。

我正在 Mac 上准备代码,然后将其压缩,上传到 S3 并在 Lambda 中运行。

我的 chrome 和 chromedriver 可执行文件应该在哪里?我不认为我可以使用 npm 安装它们,因为我认为我需要 linux 版本才能在 Lambda 中运行?

这是我得到的错误:

{ "errorType": "错误", "errorMessage": "在当前路径中找不到 ChromeDriver。请从http://chromedriver.storage.googleapis.com/index.html 下载最新版本的 ChromeDriver 并确保它可以在您的路径中找到。", “痕迹”: [ "错误:在当前 PATH 中找不到 ChromeDriver。请从http://chromedriver.storage.googleapis.com/index.html 下载最新版本的 ChromeDriver,并确保它可以在您的 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/selenium-webdriver/index.js:662:16)", "在 Runtime.exports.handler (/var/task/index.js:38:26)", “在 Runtime.handleOnce (/var/runtime/Runtime.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();
};

【问题讨论】:

    标签: node.js aws-lambda selenium-chromedriver


    【解决方案1】:

    检查一下:

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

    欢迎来到 lambda-selenium 项目!本项目的目的是展示如何将 Selenium Webdriver 与 Amazon Web Services (AWS) Lambda 计算服务一起使用。

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

    Lambdium 使用 Selenium Webdriver 和 Headless Chromium 在 AWS Lambda 上运行用 JavaScript 编写的 Webdriver 脚本。

    【讨论】:

      【解决方案2】:

      您可以使用 chrome-aws-lambda 包在您的 lambda 函数中无头运行它,根据文档,将使用 512 MB 的 ram https://www.npmjs.com/package/chrome-aws-lambda

      【讨论】:

        猜你喜欢
        • 2016-12-16
        • 1970-01-01
        • 2018-08-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-10
        • 2023-04-01
        相关资源
        最近更新 更多