at.*_*at. 13 google-chrome google-cloud-platform google-cloud-functions
有没有办法在Google Cloud功能中运行Headless Chrome/Chromium?我知道我可以在GCF中包含和运行静态编译的二进制文件.我可以获得一个静态编译的Chrome版本吗?
Ste*_*ren 16
Google Cloud Functions的Node.js 8运行时现在包含运行Headless Chrome所需的所有操作系统包.
以下是返回屏幕截图的HTTP函数的代码示例:
主index.js文件:
const puppeteer = require('puppeteer');
exports.screenshot = async (req, res) => {
const url = req.query.url;
if (!url) {
return res.send('Please provide URL as GET parameter, for example: <a href="?url=https://example.com">?url=https://example.com</a>');
}
const browser = await puppeteer.launch({
args: ['--no-sandbox']
});
const page = await browser.newPage();
await page.goto(url);
const imageBuffer = await page.screenshot();
await browser.close();
res.set('Content-Type', 'image/png');
res.send(imageBuffer);
}
Run Code Online (Sandbox Code Playgroud)
和 package.json
{
"name": "screenshot",
"version": "0.0.1",
"dependencies": {
"puppeteer": "^1.6.2"
}
}
Run Code Online (Sandbox Code Playgroud)
我刚刚部署了一个运行 headless Chrome 的 GCF 函数。一些要点:
对于 1,您应该能够在网上找到大量说明。
对于2,我使用的代码如下:
static executablePath() {
let bin = path.join(__dirname, '..', 'bin', 'chromium');
let nss = path.join(__dirname, '..', 'bin', 'nss', 'Linux3.16_x86_64_cc_glibc_PTH_64_OPT.OBJ');
if (process.env.PATH === undefined) {
process.env.PATH = path.join(nss, 'bin');
} else if (process.env.PATH.indexOf(nss) === -1) {
process.env.PATH = [path.join(nss, 'bin'), process.env.PATH].join(':');
}
if (process.env.LD_LIBRARY_PATH === undefined) {
process.env.LD_LIBRARY_PATH = path.join(nss, 'lib');
} else if (process.env.LD_LIBRARY_PATH.indexOf(nss) === -1) {
process.env.LD_LIBRARY_PATH = [path.join(nss, 'lib'), process.env.LD_LIBRARY_PATH].join(':');
}
if (fs.existsSync('/tmp/chromium') === true) {
return '/tmp/chromium';
}
return new Promise(
(resolve, reject) => {
try {
fs.chmod(bin, '0755', () => {
fs.symlinkSync(bin, '/tmp/chromium'); return resolve('/tmp/chromium');
});
} catch (error) {
return reject(error);
}
}
);
}
Run Code Online (Sandbox Code Playgroud)
启动 Chrome 时,您还需要使用一些必需的参数,即:
--disable-dev-shm-usage
--disable-setuid-sandbox
--no-first-run
--no-sandbox
--no-zygote
--single-process
Run Code Online (Sandbox Code Playgroud)
我希望这有帮助。
| 归档时间: |
|
| 查看次数: |
3115 次 |
| 最近记录: |