【问题标题】:How can I exit PhantomJS when a specific request is not found?找不到特定请求时如何退出 PhantomJS?
【发布时间】:2015-09-01 09:16:09
【问题描述】:

问题是,有些网站包含对 test.com/test.aspx 的请求,有些则没有。

如果请求存在,它应该打印 JSON 并退出。 如果请求不存在,它也应该退出 - 目前,在这种情况下它保持打开状态。

另外,我怎样才能使代码更好?如果可能的话,也许会更快?

我的 JS 代码:

var Url = "http://www.test.de";
var params = new Array();
var webPage = require('webpage');
var page = webPage.create();
var targetJSON = {};
page.open(Url);
page.onResourceRequested = function(requestData, networkRequest) {
var match = requestData.url.match(/test.com\/test.aspx/g);
if (match != null) {
    var targetString = decodeURI(JSON.stringify(requestData.url));
    var klammerauf = targetString.indexOf("{");
    var jsonobjekt = targetString.substr(klammerauf,     (targetString.indexOf("}") - klammerauf) + 1);
    targetJSON = (decodeURIComponent(jsonobjekt));
    console.log(targetJSON);
    phantom.exit();
} 

};

我尝试添加

} else {
  phantom.exit();
}

} if (match == null) {
phantom.exit();
}

但没有什么能解决我的问题。

【问题讨论】:

    标签: javascript get request phantomjs exit


    【解决方案1】:

    如果你想检查某个东西是否不存在,那么你需要检查所有的东西,看看它们是否不是它或者first-order logic:

    您首先需要查看所有请求,以确定您的预期请求是否存在。比如这样:

    var found = false;
    page.onResourceRequested = function(requestData, networkRequest) {
        var match = requestData.url.match(/test.com\/test.aspx/g);
        if (match != null) {
            var targetString = decodeURI(JSON.stringify(requestData.url));
            var klammerauf = targetString.indexOf("{");
            var jsonobjekt = targetString.substr(klammerauf,     (targetString.indexOf("}") - klammerauf) + 1);
            targetJSON = (decodeURIComponent(jsonobjekt));
            console.log(targetJSON);
            found = true;
            phantom.exit();
        } 
    };
    page.open(Url, function(){
        setTimeout(function(){
            console.log("found: " + found); // will always print "false"
            phantom.exit();
        }, 1000);
    });
    

    我用一个表示是否找到请求的全局变量解决了这个问题。如果不是,那么您可以退出 PhantomJS。如果等到页面加载完毕,如果有 Ajax 请求,则需要额外的等待时间。

    【讨论】:

    • 现在如果找不到请求就退出,如果找到请求就保持打开状态?
    • 这两种情况下都应该退出,如果我的问题不清楚,很抱歉。
    • 好的,非常感谢。有没有办法区分找到/未找到?它应该在打印出 JSON 后立即退出而不打印任何其他内容,但如果请求不存在,Phantom 会抛出错误,因为 targetJSON 不存在。
    • 是的,当然。您的代码中可以有多个 phantom.exit() 调用。我添加了一个,现在您甚至不再需要 found 变量了。您可以根据自己的需要定制输出。你可以以我的回答为模板。它不必反映您的具体要求。
    • 谢谢,我会尝试一下你的模板。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多