PhantomJS queryselector().textcontent returns 没有

PhantomJS queryselector().textcontent returns nothing

我正在尝试从网页中获取一个数字:https://www.svenskaspel.se/resultat/keno 使用 phantomjs,但是 evaluate() returns 什么都没有。

页面上有20个这样的号码:

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

其中一个数字是 "crowned"(span-tag 中有两个 类)

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

在 phantomjs 中,我得到所有数字的 array/list:

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

但是无论我尝试什么,获取 'crowned' 号码都失败了。

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' 标签有两个 类 吗?

在 firefox webinspector 中,我通过多种方式获得了号码,没有任何问题,

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

..给我号码。

在 PhantomJS 中,它不起作用。

等待页面上的脚本完成它们的工作:

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();
    }

}