Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript CasperJS-关注页面上的所有链接_Javascript_Jquery_Automation_Phantomjs_Casperjs - Fatal编程技术网

Javascript CasperJS-关注页面上的所有链接

Javascript CasperJS-关注页面上的所有链接,javascript,jquery,automation,phantomjs,casperjs,Javascript,Jquery,Automation,Phantomjs,Casperjs,我正在尝试自动检查附加在给定页面上所有链接上的参数。所以我的问题是,如何对所有链接执行单击事件,并跟踪它们的位置,然后运行我的检查 我的链接如下所示: <a href="http://google.com" class="track-me logo"></a> 我尝试了很多方法,但我认为以下解决方案最接近预期结果: var config = { url: 'http://linktomy.page', parameterValue: 12345 };

我正在尝试自动检查附加在给定页面上所有链接上的参数。所以我的问题是,如何对所有链接执行单击事件,并跟踪它们的位置,然后运行我的检查

我的链接如下所示:

<a href="http://google.com" class="track-me logo"></a>
我尝试了很多方法,但我认为以下解决方案最接近预期结果:

var config = {
    url: 'http://linktomy.page',
    parameterValue: 12345
};

var links = [];

casper.start(config.url);

casper.then(function getLinks() {
    links = this.evaluate(function () {
        var links = document.getElementsByTagName('a');
        links = Array.prototype.map.call(links, function (link) {
            return link.getAttribute('href');
        });
        return links;
    });
});

casper.then(function () {
    this.each(links, function (self, link) {
        casper.thenClick("a[href='" + link + "']");

        casper.waitFor(function check() {
            return this.getCurrentUrl() !== config.url;
        }, function then() {
            console.log('NEW URL >>>> ' + this.getCurrentUrl());
        });
    });
});

casper.run(function () {
    this.exit();
});

我用另一种方式获得casper.getElementsAttribute的链接,如下所示:

links = casper.getElementsAttribute(selector, 'href');
为了验证我在while循环中调用它们的链接:

while (links.length > 0) {
    link = links.pop();
    (function(link){
        casper.then(function(){
           casper.echo("Checking link " + link);
        });
        casper.thenOpen(link, function() {
            title = casper.getTitle();
        });
        casper.then(function() {
             casper.waitForText(title);
        });
        casper.then(function() {
             casper.test.assertHttpStatus(200, "link '" + title + "' (title) - returns Http Status 200!");
        });     
    })(link);
}
这当然可以做得更好,但对我来说效果很好。如果有人能找到更好的方法,我也很感兴趣
希望它能对您有所帮助。

如果我不使用JavaScript构建链接,这肯定会起作用,不幸的是,我是这样做的……为什么这不起作用?您已经展示了一些代码,但没有描述它当前的行为。在我看来,你拥有你所需要的一切。这段代码到底是如何实现您的要求的?URL是用JavaScript生成的,目前我只得到最后一个URL位置。因此,您有一个完全不同的问题,因为您没有问题跟踪所有链接,而是收集所有链接。因为您已经收到了第一个问题的答案,所以您需要与实际问题联系起来。你可以通过这个问题来澄清实际问题,但这会使现有答案无效,所以不要这样做。
while (links.length > 0) {
    link = links.pop();
    (function(link){
        casper.then(function(){
           casper.echo("Checking link " + link);
        });
        casper.thenOpen(link, function() {
            title = casper.getTitle();
        });
        casper.then(function() {
             casper.waitForText(title);
        });
        casper.then(function() {
             casper.test.assertHttpStatus(200, "link '" + title + "' (title) - returns Http Status 200!");
        });     
    })(link);
}