2

Я пытаюсь получить номер с веб-страницы: https://www.svenskaspel.se/resultat/keno с phantomjs, но оценка() ничего не возвращает.PhantomJS queryselector(). Textcontent ничего не возвращает

есть 20 номеров на странице, как это:

<span class="result-ball-number ">28</span> 

один из чисел «коронованных» (два класса в поверочного тэгом)

<span class="result-ball-number result-ball-number-kungkeno">47</span> 

В phantomjs я получаю массив/список всех номеров с:

list = document.querySelectorAll(".result-ball-number"); 

но получение «коронованного» номера терпит неудачу, как я стараюсь.

document.querySelector(".result-ball-number-kungkeno").textContent; 

Это работает:

var ua = page.evaluate(function() { 
    var list = []; 
    ll = document.getElementsByClassName("result-ball-number"); 
    for(i=0;i<20;i++) { 
     list.push(ll[i].textContent); 
    } 
    return list; 
}); 

Это не удается:

var ua = page.evaluate(function() { 
    var tmp = document.querySelector(".result-ball-number-kungkeno").textContent; 
    return tmp; 
}); 

Является ли проблема, с которой «span'-тег с двумя классами?

В WebInspector FireFox я получаю номер несколькими способами без проблем,

document.querySelectorAll(".result-ball-number-kungkeno")[0].textContent 
document.querySelector(".result-ball-number-kungkeno").textContent 

или

k = document.getElementsByClassName("result-ball-number-kungkeno") 
k[0].textContent 

..gives мне номер.

В PhantomJS это просто не работает.

+0

Какую версию PhantomJS вы используете? Пожалуйста, зарегистрируйтесь в событиях onConsoleMessage, 'onError',' onResourceError', 'onResourceTimeout' ([Пример] (https://gist.github.com/artjomb/4cf43d16ce50d8674fdf#file-1_phantomerrors-js)). Возможно, есть ошибки. –

+0

Я попробовал это, и они были полезны во многих отношениях. По-видимому, моя версия слишком устарела для этой задачи, поэтому обновление решило ее. –

ответ

3

Просто подождать немного для сценариев на странице, чтобы делать свою работу:

var page = require('webpage').create(); 
var url = "https://www.svenskaspel.se/resultat/keno"; 

page.viewportSize = { width: 1280, height: 800 }; 

page.open(url, function(status) { 

    page.render("just loaded.jpg"); 
    setTimeout(getKeno, 2500); 

}); 

function getKeno() 
{ 
    page.render("keno.jpg"); 
    var num=page.evaluate(function() { 
     var k = document.querySelector(".result-ball-number-kungkeno").textContent; 
     return k; 
    }); 
    console.log(num); 
    phantom.exit(); 
} 

47

Очень полезной практика при работе с обезглавленным браузером, чтобы сделать скриншоты сейчас и потом. Кроме того, при попытке получить содержимое объекта сначала убедитесь, что он есть.

page.open(url, function(status) { 

    page.render("just loaded.jpg"); 

    getKeno(); 

}); 

function getKeno() 
{ 
    var numKeno = page.evaluate(function(){ 
     return document.querySelectorAll(".result-ball-number-kungkeno").length; 
    }); 

    if(numKeno == 0) 
    { 
     console.log("waiting..."); 
     setTimeout(getKeno, 500); 
    } 
    else 
    { 
     page.render("keno.jpg"); 
     var num=page.evaluate(function() { 
      var k = document.querySelector(".result-ball-number-kungkeno").textContent; 
      return k; 
     }); 
     console.log(num); 
     phantom.exit(); 
    } 

} 
+0

Спасибо! Я попробовал, а также увеличил тайм-аут из-за переходов во время загрузки страницы. Тем не менее, возврат равен «null». TypeError: 'null' не является объектом (оценка 'document.querySelector (". Result-ball-number-kungkeno"). TextContent') –

+0

Еще раз спасибо Вавилофф, я буду копаться .. –

+0

Что показывают скриншоты? Интересно, загружена ли страница вообще. Мы должны действительно проверить статус в обратном вызове 'page.open', если это ** success **. – Vaviloff

Смежные вопросы