为什么phantomJS无法从此页面获得标记?

时间:2018-06-06 01:13:17

标签: javascript phantomjs casperjs

我已经在某些网站上尝试过此代码,但是在其他网站上看起来PhantomJS和casperJS无法成功等待动态加载的内容。即使在等待几分钟后,JavaScript加载的内容也不会被casperJS看到。

var casper = require('casper').create({
  pageSettings: {
    loadImages: false
  }
});


casper.start('https://betyetu.co.ke/sportsbook/SOCCER/');

casper.waitFor(function check() {
  return this.evaluate(function () {
    return document.querySelectorAll('div.events-app__group').length > 1;
  });
}, function then() {
  this.echo('Found elements');
  }, function timeout() {
    this.echo('Still timing out before returning element count');
  }, 60000);

casper.run();

当我仅查询没有该类的div时,它返回已找到匹配元素的消息。这是来自外部脚手架,不需要JS来加载。具有我感兴趣的数据的所有内部元素都不会被加载/不能用于casperJS。为什么会这样?

1 个答案:

答案 0 :(得分:1)

CasperJS是一个用于运行PhantomJS脚本的帮助程序库。 PhantomJS已经过时了不支持现代JavaScript的网络引擎,因此网站将在PhantomJS中越来越频繁地破解。目标站点是在PhantomJS甚至Internet Explorer 11中完全无法工作的站点之一。

但是使用 polyfills ,模拟旧浏览器的新js功能的库,我们可以使用CasperJS更长一点。在PhantomJS中创建页面后,我在注入优秀的core.js库,但在访问该站点之前。这样,我们的旧浏览器将拥有一组新的JavaScript功能。

var casper = require('casper').create({
    // it's better to blend with the crowd
    pageSettings: {
        userAgent: "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36",
        loadImages: false
    },
    viewportSize : { width: 1280, height: 720 },
    verbose: true,
});

// Apply the bandaid in the form of core.js polyfill
casper.on('page.initialized', function() {
    casper.page.injectJs('./core.js');
});

casper.start('https://betyetu.co.ke/sportsbook/SOCCER/');

casper.waitFor(function check() {
  return this.evaluate(function () {
    return document.querySelectorAll('div.events-app__group').length > 1;
  });
}, function then() {
  var count = this.evaluate(function () {
    return document.querySelectorAll('div.events-app__group').length;
  });
  this.echo('Found elements: ' + count);
  casper.capture('screen.jpg');
}, function timeout() {
    this.echo('Still timing out before returning element count');
}, 5000);

casper.run();
  

找到的元素:28