如何在casperjs中访问多个网页

how to access to many webpages in casperjs

我是 casperjs 的初学者,我正在尝试自动访问网站并抓取一些信息,我启动 url 然后将一些 link 存储在 table 调用了 "links",然后我尝试单击 table 中的第一个元素 (links[0]),最后测试 link 是否具有id("ctl0_CONTENU_PAGE_resultSearch_PagerTop_ctl2")存在。

问题是,我无法获得任何输出,我猜这是因为程序首先无法访问 link(links[0]),这就是为什么它找不到我要找的 id 的原因。 这是我写的代码。

 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

为了使其正常工作,您需要将其包装在测试套件中。至少我是这样做的。我不是最新的 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();