2

Webページから数値を取得しようとしています。https://www.svenskaspel.se/resultat/kenoはphantomjsですが、evaluate()は何も返しません。PhantomJS queryselector()。textcontentは何も返しません。

は次のようにページの20個の数字があります。phantomjsで「栄冠」される数字の

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

1(スパンタグ内の2つのクラス)

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

私は配列を取得します/を持つすべての番号のリスト:

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

は、2つのクラスを持つ「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 

は私の番号を..gives。

PhantomJSでは、機能しません。

+0

どのPhantomJSバージョンを使用しますか? 'onConsoleMessage'、' onError'、 'onResourceError'、' onResourceTimeout'イベント([Example](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

もう一度お返事ありがとうございます。Vaviloff、私は掘り下げます.. –

+0

スクリーンショットは何を表示しますか?私はページが全くロードされているのだろうかと思います。実際に 'page.open'コールバックの' status'を確認する必要があります(** success **)。 – Vaviloff

関連する問題