2016-12-16 10 views
0

サイトからデータを読み取る自動ボットをプログラミングしています。それはデータを正しく読み込みますが、今はTimersで一定の間隔でそれをやりたかったのです。 私はTimerTaskを継承したクラスを作成しました。私は今、プログラムが変更されても同じデータが読み込まれるという問題を抱えています。Selenium Java refresh要素

messages = Driver.findElements(By.className("messages")).get(0).findElements(By.className("message")); 
    String message = null; 
    for(int i = 0; i < messages.size(); i++){ 
     try{ 
      message = messages.get(i).findElements(By.className("text")).get(0).getAttribute("innerHTML"); 
      System.out.println(message); 
     }catch(StaleElementReferenceException e){ 
      e.printStackTrace(); 
     } 

    } 

私はそのサイトではJavaScriptを使用して行う場合、私は常にリフレッシュの結果を得るが、ここで私のJavaプログラムでは、毎回同じことをそれ `s。

+1

いつも最初の "メッセージ"を入手したいですか? Driver.findElements(By.className( "messages"))。get(0)インクリメントしますか?サイトはどのように構造化されていますか? –

+0

メッセージ要素は1つだけですが、クラスで検索する必要があります。get(0) – Talcore

+0

関連するHTMLのテキストとともにいくつかのサンプルデータのスクリーンショットを投稿してください。 – JeffC

答えて

0

私はコードを単純化することから始めます。私はあなたがCSSセレクタを読む時間を過ごすことをお勧めします。彼らは非常に強力で速いです。基本的に3つのロケータをすべて1つにまとめることができるので、一度検索するだけで済み、古い要素で終わることはありません。

for (WebElement message : Driver.findElements(By.cssSelector(".messages .message .text"))) 
{ 
    System.out.println(message.getAttribute("innerHTML")); 
} 

CSS Selectors Reference

SauceLabs: CSS Selectors Tips

注:あなたが最初の要素だけをしたい場合は、.findElement()を使用するだけで、.findElements().get(0)を使用する必要はありません。複数形ではなく単数形に注意してください。

+0

)まだこの繰り返しのもの – Talcore

+0

あなたは正しいページを読み込んでいますか?最新のものになっているはずですか?もしそうなら、それは奇妙なキャッシングの問題のように思えます。 – JeffC

+0

このサイトは社会という名前で、私のjavascript拡張機能では機能しましたが、phantomjsとの組み合わせではセレンのみで動作しませんでした – Talcore

関連する問題