JavaScript   发布时间:2022-04-16  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了javascript – PhantomJS使用太多线程大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我写了一个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);

解决方法

从文档:

解决方案是在适当的时间显式调用网页对象的close()(即在许多情况下为页面).

一些包含的示例(例如follow.js)演示了具有显式关闭的多个页面对象.

大佬总结

以上是大佬教程为你收集整理的javascript – PhantomJS使用太多线程全部内容,希望文章能够帮你解决javascript – PhantomJS使用太多线程所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: