【问题标题】:Phantomjs load static content only in page.openPhantomjs 仅在 page.open 中加载静态内容
【发布时间】:2013-11-20 09:36:37
【问题描述】:

我的情况是使用 phantomjs 仅加载静态内容(我们使用“wget”获得的内容),然后运行一些 javascript 来确定页面的“标题”。我不需要加载整个页面来知道它的标题吗?

尝试使用:

page.settings.resourceTimeout = 0;

page.settings.javascriptEnabled = false;

page.settings.loadImages = false;

page.settings.localToRemoteUrlAccessEnabled = false;

page.settings.webSecurityEnabled = false;

但在这种情况下,我的 document.title 不起作用,因为我的 JS 被禁用。有道理!

有没有办法只加载静态内容?像

page.open(uri, static = true, ...

【问题讨论】:

  • 另外,page.onLoadStarted 是确定标题的竞争者,但我也想对正文中的一些 div 节点进行一些分析。请帮忙。

标签: phantomjs headless-browser


【解决方案1】:

根据this issue,您可以在page.onResourceRequested 中调用request.abort()。那里给出的示例是:停止加载所有 css:

page.onResourceRequested = function(requestData, request) {
    if ((/http:\/\/.+?.css/gi).test(requestData['url']) || requestData['Content-Type'] == 'text/css') {
       console.log('The url of the request is matching. Aborting: ' + requestData['url']);
       request.abort();
    }
}

【讨论】:

  • @Devaroop 我理解你的问题,因为你想加载 HTML 内容,但不加载任何其他资源,如图像、外部 Javascript、外部 CSS、字体等。如果是这样,那就是添加此功能的用例。 (如果您想停止一切,则中止除第一个请求之外的所有请求)
  • 同意。这给了我们过滤 css、js 以及我们可以猜到的任何其他调用的特权。可能还有其他无法确定的调用,如 php、java 等。我想要一个模拟“wget”行为的电话。有意义吗?
  • @Devaroop 如果你想模拟 wget 行为,我已经给了你答案(除了它在浏览器中,所以 inline JavaScript 仍将运行并可以修改文档正文 - 但不会进行进一步的网络请求)。通过中止所有请求,您可以停止其他任何加载(包括 AJAX,我猜这就是您所说的“php、java 等”?)如果这仍然不能回答问题,也许您可​​以解释为什么您不简单使用 wget?与 wget 相比,PhantomJS 是一个资源怪物。
猜你喜欢
  • 1970-01-01
  • 2017-03-25
  • 2013-02-11
  • 2011-12-04
  • 1970-01-01
  • 2019-03-04
  • 2017-07-19
  • 2012-05-01
  • 1970-01-01
相关资源
最近更新 更多