我写了一个PhantomJS应用程序来抓取我构建的网站并检查要包含的
JavaScript文件. JavaScript类似于Google,其中一些内联代码加载到另一个JS文件中.该应用程序查找其他JS文件,这就是我使用Phantom的原因.
预期的结果是什么?
控制台输出应读取大量URL,然后判断脚本是否已加载.
真的发生了什么?
控制台输出将按预期读取大约50个请求,然后才开始吐出此错误:
2013-02-21T10:01:23 [FATAL] QEventDispatcherUNIXPrivate(): Can not continue without a thread pipe QEventDispatcherUNIXPrivate(): Unable to create thread pipe: Too many open files
page.open(url,function (status) { console.log(YELLOW,url,status,CLEAR); var found = page.evaluate(function () { if (document.querySelectorAll("script[src='***']").length) { return true; } else { return false; } }); if (found) { console.log(GREEN,'JavaScript found on',CLEAR); } else { console.log(RED,'JavaScript not found on',CLEAR); } self.crawledURLs[url] = true; self.crawlURLs(self.getAllLinks(page),depth-1); });
crawledURLs对象只是我已经抓取过的url对象. crawlURLs函数只是通过getAllLinks函数的链接,并在具有搜寻器启动的域的基本域的所有链接上调用open函数.
编辑
我修改了代码的最后一个块如下,但仍然有相同的问题.我已将page.close()添加到该文件中.
if (!found) { console.log(RED,CLEAR); } self.crawledURLs[url] = true; var links = self.getAllLinks(page); page.close(); self.crawlURLs(links,depth-1);