Puppeteer 代码注意
部署到服务器,报错
Running as root without --no-sandbox is not supported.
解决方案:
const browser = await puppeteer.launch({
args: ['--no-sandbox'],
env: {
DISPLAY: ":10.0"
}
});
Dockerfile
编写Dockerfile根据自己项目的文件结构来
我的目录结构与Dockerfile,main.js为入口函数,在main里面启动所有爬虫并创建定时任务
# 基于 Node.js 16 镜像
FROM node:16.20.0-slim
# 设置工作目录
WORKDIR /app
# 更新 npm
RUN npm install -g npm@latest
# 将 package.json 和 package-lock.json 复制到工作目录
COPY ./package*.json ./
# 软件源修改为淘宝的镜像源
RUN sed -i 's/http:\/\/deb\.debian\.org\/debian/http:\/\/mirrors\.aliyun\.com\/debian/g' /etc/apt/sources.list
# 更新 apt-get
RUN apt-get update
# 安装 Chromium
RUN apt-get install -y chromium
# 安装依赖
RUN npm install
# 复制源代码到工作目录
COPY ./src ./src
COPY ./main.js ./
# 设置环境变量,可根据需要进行调整
ENV NODE_ENV=production
ENV PUPPETEER_SKIP_DOWNLOAD=true
# 运行脚本
CMD [ "node", "./main.js" ]
main.js
main.js如下:
const puppeteer = require('./src/puppeteer/puppeteer'); // 亚马逊爬虫程序
const TaskManager = require('./src/utils/TaskManager'); // 定时任务管理器
// 创建定时任务管理器实例
//puppeteer.main() // 执行亚马逊爬虫程序
const taskManager = new TaskManager();
const task1 = () => {
puppeteer.main() // 添加定时任务
};
const interval1 = 2 * 60 * 60 * 1000;
taskManager.addTask(task1, interval1, "亚马逊新品页面爬虫");
./src/puppeteer/puppeteer为自己写的爬虫,TaskManager是定时任务管理器
TaskManager.js如下
class TaskManager {
constructor() {
this.tasks = [];
}
addTask(task, interval, taskName) {
console.log(`添加定时任务: ${taskName}`);
const taskId = setInterval(task, interval);
this.tasks.push({id: taskId, name: taskName});
return taskId;
}
removeTask(taskId) {
const task = this.tasks.find(task => task.id === taskId);
if (task) {
console.log(`移除定时任务: ${task.name}`);
clearInterval(taskId);
this.tasks = this.tasks.filter(task => task.id !== taskId);
}
}
clearAllTasks() {
console.log("移除所有定时任务");
this.tasks.forEach(task => clearInterval(task.id));
this.tasks = [];
}
}
module.exports = TaskManager;
配置Dockerfile的启动项
使用Idea打卡项目,右键Dockerfile,点击修改运行配置
添加服务器的ssh,点击三个点
点击ssh后面的三个点配置服务器
接下来回到配置页面,填写配置消息,1、镜像名称:版本号 2、容器名称 3、端口号
配置好以后,运行Dockerfile
构建镜像会花费一定的时间,最后会显示容器部署成功
查看Puppeteer 脚本运行情况
pc为容器名称,–tail 500 表示查看文件末尾500行数据
docker logs -f --tail 500 pc