如何访问casperjs中的许多网页

时间:2017-11-15 13:07:54

标签: javascript web-scraping casperjs

我是casperjs的初学者,我正在尝试自动访问网站并抓取一些信息,我启动网址,然后在一个名为“链接”的表中存储一些链接然后我尝试点击该表中的第一个元素(links [0]),最后测试是否存在具有id(“ctl0_CONTENU_PAGE_resultSearch_PagerTop_ctl2”)的链接。

问题是,我无法获得任何输出,我想这是因为程序首先无法访问链接(links [0]),这就是为什么它找不到id i'我正在寻找。 这是我写的代码。

 var url=''; //first link
 var casper = require('casper').create();
 var links;
 var lien;// second link
 function getLinks() {
 var links = document.querySelectorAll('td a');
 return Array.prototype.map.call(links, function (e) {
  return e.getAttribute('href')
 });
 }
 casper.start(url);
 casper.then(function () {
 links = this.evaluate(getLinks);
 });

 casper.then(function () {
 lien = links[0];
 });
 casper.thenOpen(lien , function(){
 if (this.exists('a[id="ctl0_CONTENU_PAGE_resultSearch_PagerTop_ctl2"]')) {
 this.echo('the heading exists');
 }
 else {console.log('does not exist');
 }
    });
 casper.run(function () {
 this.exit();
 });`

this is the link I'm trying the find

请注意,我使用的casperjs版本是1.1.4

this is what shows the console

1 个答案:

答案 0 :(得分:0)

为了使其工作,您需要将其包装在测试套件中。至少我是这样做的。我不知道与casper约会,我不知道过去一年是否有任何改变,但以前的问题是你在v1中没有测试套件就无法启动casper。

请使用以下命令

开始在终端中使用以下代码

casperjs test filename.js

在你的filename.js中输入以下代码

var url = 'https://www.marchespublics.gov.ma/pmmp/';
var url2 = 'https://www.marchespublics.gov.ma/index.php5?page=entreprise.EntrepriseAdvancedSearch&AllCons&EnCours&domaineActivite=1.15';

casper.test.begin('Scraping start', 3, function(test) {
    casper.start(url, function() {
        this.test.pass('Opened 1st page');
    })
    .thenOpen(url2, function(){
        this.test.pass('Opened 2nd page')
    })
    .then(function() {
        if (this.exists('a[id="ctl0_CONTENU_PAGE_resultSearch_PagerTop_ctl2"]')) {
            this.test.pass('the heading exists');
        } else {
            this.test.fail('Does not exist');
        }
    })
    .run(function() {
        test.done();
    });
});

有关执行脚本时casperjs的更多详细信息,请尝试使用其他参数(如

)运行它

casperjs test filename.js --verbose --log-level=debug

希望有所帮助

编辑1:

这也适用于没有测试套件只需调用此代码

casperjs filename.js

var casper = require('casper').create();
var url = 'https://www.marchespublics.gov.ma/index.php5?page=entreprise.EntrepriseAdvancedSearch&AllCons&EnCours&domaineActivite=1.15';

casper
    .start(url, function() {
        this.echo('Opened page')
    })
    .then(function() {
        if (this.exists('a[id="ctl0_CONTENU_PAGE_resultSearch_PagerTop_ctl2"]')) {
            this.echo('the heading exists');
        } else {
            this.echo('Does not exist');
        }
    })
    .run();