【发布时间】: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