2017-05-30 73 views
2

我試圖讀取動態表,它每秒更新1-3次。我在Python 3.x中使用Selenium,但如果您有其他語言的解決方案,我也可以解決它。閱讀實時表 - 硒

我的問題是:閱讀經常更新的表的最佳做法是什麼?

我已經試過

  • driver.wait.until隨着expected_conditions
  • 重新讀取調用該表find_elements如果舊的異常被拋出

他們既不正在工作,由於的刷新率高達。我可以成功地檢索表,但是當我嘗試訪問它的行後,我得到一個陳舊的例外。值得一提的是,當我在同一個表中嘗試相同的代碼時,如果更新頻率較低,則一切正常。

我現在沒有發佈任何代碼,因爲我有興趣知道更多有經驗的人在這種情況下做什麼。

我天真的想法:在網絡抓取和任何網絡相關語言中都不是專家(但熱衷於學習),我會說如果這是動態數據的問題,我會採取指針或對實際表格的引用(然後在行上動態循環)。在這個框架中可能嗎?

回答

2

當Webelement與webelement創建時的屬性相比較時,我們通常會得到過時的元素異常。

比方說,其目的是在一個表打印第二數據元素的每秒,我們的代碼看起來是這樣的,(對不起,給Java中的代碼)

//This will work if the page is static 

    WebElement element = driver.findElement(By.xpath("//td[2]")); 
    for(int i = 0; i< 10;i++) 
    { 
     System.out.println(element.getText()); 
     Thread.sleep(1000); 
    } 

爲了使這項工作動態加載表/刷新我們需要每個迭代這樣的事情之前啓動webelement表,

//This will work for dynamic content 

    WebElement element = null; 
    for(int i = 0; i< 10;i++) 
    { 
     element = driver.findElement(By.xpath("//td[2]")); 
     System.out.println(element.getText()); 
     Thread.sleep(1000); 
    } 

在這種情況下,如果你需要得到第i個單元格的值在一個表中,我們可以通過參數裏面的值xpath如

//In this case we need the fifth cell value 
    int j = 5; 
    WebElement element = null; 
    for(int i = 0; i< 10;i++) 
    { 
     element = driver.findElement(By.xpath("//td["+j+"]")); 
     System.out.println(element.getText()); 
     Thread.sleep(1000); 
    } 

    In the case if you need to have all five cell values, 

    WebElement element = null; 
    for(int i = 1; i<=5;i++) 
    { 
     element = driver.findElement(By.xpath("//td["+i+]")); 
     System.out.println(element.getText()); 
     Thread.sleep(1000); 
    } 

只是相應地構造一個循環。

希望這有助於你。謝謝。

+0

這樣做很有意義。如果不是單個元素,我需要第i行(我不知道數字i,但我知道行中的一個條件)?我如何循環執行每次需要更新的內容? – 7raiden7

+0

更新了我的答案......如果您需要我幫助確定基於行上某個條件的特定...,我需要DOM。我們需要在XPATH中使用以下或之前的同胞來識別特定的單元格。 –

+0

好吧,基本上我是檢索表格,然後循環行,而你說我應該直接檢索行。這就說得通了。我會嘗試 – 7raiden7