【发布时间】:2020-06-09 09:14:01
【问题描述】:
在 ubuntu 服务器上使用 Node.js、Chrome 和 puppeteer 作为 headless,我正在抓取几个不同的网站。偶尔的任务之一是与加载的页面进行交互(单击链接以打开另一个页面,然后可能再次单击以接受条款等)。
我可以很好地完成这一切,但我试图了解如果我同时打开多个页面并尝试同时与不同加载的页面交互(重叠时间),它将如何工作。
为了形象化这一点,我在想用户将如何做同样的工作。他们必须打开多个浏览器窗口,打开页面并在它们之间切换才能查看,然后单击链接。
但是使用 puppeteer,我们有单独的浏览器对象,我们不需要看到窗口或页面就知道点击哪里。我们可以通过浏览器对象遍历它,然后在不看(无头)的情况下单击所需的元素。
我想我应该能够同时处理多个页面,只要我有可用的 CPU 和内存来处理它们。
有没有人有过 puppeteer 同时与多个网站交互的经验?有什么需要注意的吗?
【问题讨论】:
-
我试图同时用 puppeteer 抓取页面,但我很快就耗尽了内存。我用˙forEach`打开了很多网址,它立即杀死了我的电脑????。然后我每次尝试大量 10 个 url,这都不好:很多尝试导致超时。所以现在我依次浏览了 3000 多个网址,但仍然存在一些问题,例如:stackoverflow.com/questions/62220867/…。如果你的 ubuntu 服务器背后有一个庞大的硬件,你可能会成功。
-
我正在考虑下次使用puppeteer-cluster。
-
谢谢@theDavidBarton,我会研究 puppeteer-cluster。我看到 puppeteer-cluster 的作者发布了一个答案。我也会在那里回复。
标签: javascript node.js google-chrome web-scraping puppeteer