如何在 PhantomJS 中停止/中止/取消页面加载?

Posted

技术标签:

【中文标题】如何在 PhantomJS 中停止/中止/取消页面加载?【英文标题】:How to stop/abort/cancel a page load in PhantomJS? 【发布时间】:2016-04-13 11:22:05 【问题描述】:

我使用 PhantomJS 检查特定内容的链接列表。找到这些内容后,我想取消页面加载以避免进一步的资源请求并继续下一页以提高速度。

我在 page.onResourceRequested 和 request.abort() 中过滤请求;所有不匹配但不会阻止 PhantomJS 请求直到站点完成的所有内容。

试过 page.stop(); -> 使 PhantomJS 崩溃

文档似乎缺乏,我想知道是否有一个命令可以用来做这件事。 我不能使用 page.close();因为找到内容后需要page对象。

【问题讨论】:

我不确定您是否可以取消正在进行的请求,但您可以使用 request.abort() 阻止新请求。这不行吗? 我认为 request.abort();只取消正在进行的请求,而不是所有进一步的请求? 它绝对可以取消 starting 请求(甚至在任何数据上线之前)。我不知道它是否可以中止客户端正在等待服务器响应的请求。 但是我想一次取消整个页面加载,目前我取消了每个与 request.abort() 不匹配的请求;但如果我找到我的资源,则无需进一步加载该网站。 我认为您可以跟踪所有当前正在进行的资源请求,一旦您想停止页面加载,您可以设置一个全局变量来中止 all 新请求然后遍历数组并中止所有正在进行的请求。这是我的想法,但正如我所说,我不知道它是否可以工作。 【参考方案1】:
page.onResourceRequested = function(requestData, request) 
    var matchUrlNeeded = ((/someregexforurl\/js/g).test(requestData.url));
    if (matchUrlNeeded) 
        doStuffWithTheUrl;
        response.close(); 
        request.abort();
        page.cancel(); 
    
    else 
        //console.log("NO MATCH : " + requestData.url); request.abort();   

【讨论】:

以上是关于如何在 PhantomJS 中停止/中止/取消页面加载?的主要内容,如果未能解决你的问题,请参考以下文章

正确中止或取消 PostAsync

如果请求中止,则停止处理 Flask 路由

在 Python 中使用 PhantomJS 向下滚动到无限页面的底部

页面加载中止上的 Javascript 事件

XHR 中止不会停止文件上传

当我打开太多页面并忽略最后一个 URL 时,PhantomJS 崩溃