如何在casperjs

时间:2016-12-30 09:10:56

标签: javascript casperjs

我一直在争取获得图像src。我需要的是获取具有特定类名的图像并在控制台上回显它。我试过不同的代码方法没有运气。非常感谢您的帮助。下面的HTML代码。

<a href="http://www.yudala.com/tecno-w5-1gb-16gb-grey.html"  class="product photo product-item-photo" tabindex="-1">
    <span class="product-image-container em-alt-hover" style="width:205px;">
        <span class="product-image-wrapper" style="padding-bottom: 100%;">
            <img class="product-image-photo" src="http://www.yudala.com/pub/media/catalog/product/cache/1/thumbnail/280x280/beff4985b56e3afdbeabfc89641a4582/t/e/tecno_w5.jpg" alt="Tecno W5 | 1GB, 16GB | Grey + Free Alcatel 1050D Phone" width="205" height="205">
        </span>
    </span>
</a>

以下的JS代码

casper.then(function getImages(){
    links = this.evaluate(function(){
        var links = document.getElementsByClassName('product-image-photo');
        links = Array.prototype.map.call(links,function(link){
            return link.getAttribute('src');
        });
        return links;
    });
});

casper.then(function(){
    this.echo(this.getCurrentUrl());
    this.each(links,function(self,link){
        self.thenOpen(link,function(src){
            this.echo(this.getCurrentUrl());
        });
    });
});

我想只获得班级名称的图像:'class =“product-image-photo”'。如果我使用document.getElementByTagName('img');它获取网站中的所有图像,但如果我使用:document.getElementByClassName('product-image-photo');什么都没有回来。很高兴收到你们的来信。

1 个答案:

答案 0 :(得分:0)

这比你的代码简单。

casper.evaluate(function(){
    if(document.querySelector('.product-image-photo')){
        return document.querySelector('.product-image-photo').src;
   }
});

将获取的src代码包装在casper.waitFor(...)中会更有效。

更新代码:

casper.waitForSelector('ol.products li.product-item', function(){
    var links = this.evaluate(function(){
        var imgs = document.querySelectorAll('ol.products li.product-item .product-image-wrapper img');
        var links = [];
        for(var i=0; i<imgs.length; i++){
            links.push(imgs[i].src);
        }
        return links;
    });

    this.then(function(){
       this.each(links, function(){
           // further code here
       });
    });
}, function(){
    this.echo('No el. found');
});