Почему phantomJS не может получить разметку с этой страницы? - PullRequest
0 голосов
/ 06 июня 2018

Я пробовал этот код на некоторых сайтах, и он работает, но на других кажется, что 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 голосов
/ 08 июня 2018

CasperJS - это вспомогательная библиотека для запуска скриптов PhantomJS.PhantomJS имеет довольно устаревший веб-движок, который не поддерживает современный javascript, поэтому сайты все чаще и чаще ломаются в PhantomJS.Целевой сайт - один из тех, которые не будут полностью работать в PhantomJS или даже в Internet Explorer 11.

Но используя polyfills , библиотеки, которые эмулируют новые функции js для старых браузеров, мы можем использоватьCasperJS немного дольше.Здесь я внедряю отличную библиотеку core.js сразу после создания страницы в PhantomJS, но перед переходом на сайт.Таким образом, наш старый браузер будет обладать новым набором функций 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

...