2016-12-16 146 views
0

我正在編寫一個從站點讀取數據的自動機器人程序。它正確讀取數據,但現在我想用定時器間隔來完成。 所以我寫了一個擴展TimerTask的類,它工作。我現在有一個問題,就是我的程序每次都讀取相同的數據,即使它發生了變化。Selenium Java刷新元素

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程序它`每次相同。

+1

你總是想得到第一個「消息」? Driver.findElements(By.className(「messages」))。get(0)你想增加它嗎?你的網站結構如何? –

+0

只有一個消息元素,但我必須用類來搜索它,所以我讓(0) – Talcore

+0

請張貼一些示例數據以及相關HTML文本的屏幕截圖。 – JeffC

回答

0

我會從簡化代碼開始。我建議你花一些時間閱讀CSS選擇器。他們非常強大和快速。你基本上可以將你的三個定位器合併成一個,這樣你只需要搜索一次,而不應該結束陳舊的元素。

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

CSS Selectors Reference

SauceLabs: CSS Selectors Tips

注意:如果你只是想第一要素,沒有必要使用.findElements().get(0),只需使用.findElement()。注意單數而不是複數。

+0

好的消息隊友,但我得到仍然這個重複的東西 – Talcore

+0

你確定你正在加載正確的頁面?應該是最新的?如果是這樣的話聽起來像是一種奇怪的緩存問題。這個代碼應該工作...或者你會你可以發佈一個鏈接到頁面嗎? – JeffC

+0

這個網站被命名爲社會,正如我用我的javascript擴展所說的那樣工作,但只有硒與phantomjs結合它不起作用 – Talcore