2016-12-16 96 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