javascript - 如何修复错误:产生 ENAMETOOLONG puppeteer?
问题描述
我想使用puppeteer从电子商务网站解析有关新产品的信息。当我在 1-2 小时后运行我的代码取决于我运行的浏览器数量(如果我在 +-1 小时后运行 2 个浏览器)发生错误并且 puppeteer 浏览器不会产生单元,我重新启动我的代码执行。
错误:产生 ENAMETOOLONG
Error: spawn ENAMETOOLONG at ChildProcess.spawn (internal/child_process.js:407:11) at Object.spawn (child_process.js:553:9) at BrowserRunner.start (C:\Users\Administrator\Desktop\crawler-test\node_modules\puppeteer\lib\launcher\BrowserRunner.js:51:34) at ChromeLauncher.launch (C:\Users\Administrator\Desktop\crawler-test\node_modules\puppeteer\lib\Launcher.js:64:16) at async PuppeteerExtra.launch (C:\Users\Administrator\Desktop\crawler-test\node_modules\puppeteer-extra\dist\index.cjs.js:129:25) at async getDataRestock (C:\Users\Administrator\Desktop\crawler-test\test.js:122:21) { errno: 'ENAMETOOLONG', code: 'ENAMETOOLONG', syscall: 'spawn' }
这是一个示例代码:
const puppeteer = require('puppeteer-extra');
const pluginProxy = require('puppeteer-extra-plugin-proxy');
async function getData(urlNew, ...args, proxy) {
puppeteer.use(pluginProxy({
address: proxy,
port: 1050,
credentials: {
username: 'okQLjn',
password: 'vYTNDiJ24D',
}
}));
const browser = await puppeteer.launch({ args: ['--disable-dev-shm-usage'], headless: false });
const page = await browser.newPage();
await page.setCookie(...cookies)
try {
await page.goto(urlNew, {
waitUntil: 'networkidle0',
});
const data = await page.evaluate(({ ...args }) => {
//do some parsing
return prodsAndSizesAndHookProducts;
}, { ...args });
await page.close();
await browser.close();
return data;
} catch (err) {
console.log("ERROR new " + err + ' proxy: ' + proxy);
await page.close();
await browser.close();
Parser(...args)
}
}
function Parser(...args) {
if (proxiesTempArr.length == 0) {
proxiesTempArr.push(...proxies);
}
const proxy = proxiesTempArr.shift();
getData(url, ...args, proxy)
.then(result => {
if (result != undefined) {
const status = 'new product'
for (let i = 0; i < result[1].length; i++) {
Discord.sendHook(...args);
Slack.sendHook(...args);
}
console.log(status)
Parser(...args);
}
})
.catch(err => {
console.log(err + ' err new ' + new Date().toLocaleString());
Parser(...args);
})
}
Parser(...args)
运行时会出现一些警告,例如:
MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 targetcreated listeners added to [Browser]. Use emitter.setMaxListeners() to increase limit
ERROR: The process with PID 1244 (child process of PID 7208) could not be terminated.
Reason: There is no running instance of the task.
- 木偶版:v3.3.0
- 平台/操作系统版本:win64
- Node.js 版本:v14
我知道警告很糟糕,但我认为它与错误无关。将不胜感激任何帮助和想法。
解决方案
推荐阅读
- c++ - 如何让“cin”读取原始模式终端
- javascript - 将 html 值放入 onClick()
- python - 如何将海岸线添加到 xarray.plot.facetgrid.FacetGrid?
- power-automate - Power Automate - 无法导航到文件夹或获取文件夹 ID
- angular - 检测何时在外部单击子组件
- python - 如何清理此脚本的响应以使其更具可读性?
- php - HTML 和 PHP 电子邮件
- python - Numpy 错误:当我使用 math.exp 时,只能将 size-1 数组转换为 python 标量
- python - 正则表达式获取逗号分隔值之间的数据
- blazor - 根据 URL 更改 Blazor 页面中的布局