PhantomJS queryselector()。textcontent什么都不返回

时间:2016-03-27 09:07:41

标签: javascript phantomjs getelementsbyclassname selectors-api

我正在尝试从一个网页获取一个数字:https://www.svenskaspel.se/resultat/keno与phantomjs,但evaluate()不返回任何内容。

页面上有20个数字,如下所示:

    Properties p = new Properties();
    p.put(Context.INITIAL_CONTEXT_FACTORY,
            "org.jboss.naming.remote.client.InitialContextFactory");
    p.put(Context.URL_PKG_PREFIXES,
            "org.jboss.as.naming.interfaces:org.jboss.ejb.client.naming");
    p.put(Context.PROVIDER_URL, "remote://localhost:4447");
    p.put("jboss.naming.client.ejb.context", true);
    InitialContext ctx = new InitialContext(p);

其中一个数字是"加冕" (span-tag中的两个类)

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

在phantomjs中,我得到一个包含所有数字的数组/列表:

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

但是获得了加冕&#39;无论我尝试什么,数字都会失败。

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

问题是&span?&#39; -tag有两个类?

在firefox webinspector中,我通过多种方式获取数字,没有问题,

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

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

..给我这个号码。

在PhantomJS中,它只是不起作用。

1 个答案:

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

}