我正在尝试从一个网页获取一个数字: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中,它只是不起作用。
答案 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();
}
}