Puppeteer 需要为每次抓取重新启动服务器
Puppeteer needs to restart server for each scrape
我正在 抓取 一个使用 Puppeteer 的网站 Nest.js module.
scraping 在我第一次调用 GET 方法时工作,但之后它不会再次抓取。这意味着我必须为每个 重新启动 服务器 抓取 ,这并不理想。
抓取代码(简体):
@Injectable()
export class AppService {
constructor(@InjectBrowser() private readonly browser: Browser) {}
async getFoodoraRestaurantMenus(url: string): Promise<string> {
console.log("Calling method");
const page = await this.browser.newPage();
console.log('Never gets here the second time');
await page.goto(url);
const content = await page.evaluate(() => {});
await this.browser.close();
return JSON.stringify(content, null, 4);
}
}
我第二次调用 getFoodoraRestaurantMenus
我从未进入第二个控制台日志,因此从未打开新页面。我不确定我是否需要做的不仅仅是 browser.close()
,我能找到的就这些了。
我不知道为什么每次要执行抓取时都需要重新启动服务器。非常感谢我能得到的所有帮助。
谢谢。
如果您只想释放内存并重复使用同一个浏览器,您可以尝试只关闭页面而不是浏览器:
await page.close();
我正在 抓取 一个使用 Puppeteer 的网站 Nest.js module.
scraping 在我第一次调用 GET 方法时工作,但之后它不会再次抓取。这意味着我必须为每个 重新启动 服务器 抓取 ,这并不理想。
抓取代码(简体):
@Injectable()
export class AppService {
constructor(@InjectBrowser() private readonly browser: Browser) {}
async getFoodoraRestaurantMenus(url: string): Promise<string> {
console.log("Calling method");
const page = await this.browser.newPage();
console.log('Never gets here the second time');
await page.goto(url);
const content = await page.evaluate(() => {});
await this.browser.close();
return JSON.stringify(content, null, 4);
}
}
我第二次调用 getFoodoraRestaurantMenus
我从未进入第二个控制台日志,因此从未打开新页面。我不确定我是否需要做的不仅仅是 browser.close()
,我能找到的就这些了。
我不知道为什么每次要执行抓取时都需要重新启动服务器。非常感谢我能得到的所有帮助。
谢谢。
如果您只想释放内存并重复使用同一个浏览器,您可以尝试只关闭页面而不是浏览器:
await page.close();