我的浏览器是这样启动的:
async function startBrowser() {
const browser = await puppeteer.launch({
args: [
'--no-sandbox',
'--disable-gpu',
'--disable-dev-shm-usage',
'--disable-setuid-sandbox',
'--no-first-run',
'--no-zygote',
'--single-process',
],
});
const page = await browser.newPage();
return { browser, page };
}
我有一个被调用的函数来运行此代码:
const { browser, page } = await startBrowser();
const tab = await browser.newPage()
const request = await (await tab.goto(``));
await page.goto(``);
console.log('scraping...');
console.log(page.url());
await page.screenshot({
path: `frontend/public/assets/${coinId}.png`,
});
const text = await request.text();
const $ = cheerio.load(text);
const coinImage = $('#one img').attr('src');
const coinTitle = $('#three div h1').text();
const bids = $('#bidsrow td input').attr('value');
const timeLeft = $('#endsrow #endstext').text();
const currentBid = $('#currentbidtext').text();
const itemId = $('#itemidrow td .bolder').text();
const minBid = $('#minimumbidtext').text().replace('$', '');
在我的本地计算机上,它可以完美地抓取数据,但是当我将此应用程序部署到 Heroku 甚至 AWS EC2 时,它似乎没有抓取任何内容?并且只返回空数据。
这是因为浏览器没有正确启动吗?或者 ? 花了一整天的时间将该应用程序部署到 heroku 和 aws,但仍然很困惑出了什么问题?
浏览器启动方面的一些变化
const 浏览器 = 等待 puppeteer.launch({ 参数:[ “--禁用-setuid-沙箱”, “--无沙箱”, “--单进程”, “--无合子”, ], 可执行路径:process.env.NODE_ENV = =“生产”? process.env.PUPPETEER_EXECUTABLE_PATH : puppeteer.executablePath(), });
在主目录添加Dockerfile
来自 ghcr.io/puppeteer/puppeteer:22.4.1
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
PUPPETEER_EXECUTABLE_PATH=/usr/bin/google-chrome-stable
工作目录/usr/src/app
复制包*.json ./ 运行 npm ci
复制。 .
CMD ["node","app.js"] /* app.js 替换为你的起始节点 */
注意:不要忘记添加 env 变量来添加渲染环境。