2017-05-30 6 views
2

私は毎秒1〜3回更新される動的テーブルを読み込もうとしています。私はPython 3.xでSeleniumを使用していますが、他の言語のための解決策があれば、私もそれを解決することができます。リアルタイムテーブルを読む - Selenium

私の質問はです:頻繁に更新されるテーブルを読むためのベストプラクティスは何ですか? expected_conditions

  • とともに

    • driver.wait.until古い例外が

    それらのどちらもがスローされた場合find_elementsを呼び出して、テーブルを再読み込み:私はを試してみた何

    高いリフレッシュレートのために動作しています。テーブルを一瞬で正常に取得できますが、その瞬間にその行にアクセスしようとすると、古い例外が発生します。同じテーブルで同じコードを試してみると、頻繁に更新される頻度が少ない場合はすべて正常に動作すると言いましょう。

    このケースでは、経験豊富な人々が何をしているかを知ることに興味があるので、私はその時点でコードを投稿していません。

    私の素朴な思考:ビーイング非専門家(しかし学ぶことに熱心)は、Webスクレイピングや任意のWeb関連の言語で、私はこれは動的なデータに問題だった場合、私は取るだろうと言うだろうでポインタまたは実際のテーブルへの参照(そして、行に対して動的にループする)このフレームワークで可能ですか?

  • 答えて

    2

    web要素が作成された時点の属性と比較して、Web要素が現在変更されている場合、通常、古い要素の例外が発生します。

    動的ローディングテーブルのため、この作業を行うには

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

    (Javaでコードを与えるために申し訳ありませんが)、私たちのコードは次のようになり、の意図は、テーブルの2番目のデータ要素ごとに秒を印刷することであるとしましょうあなたは、テーブル内のセルの値i番目の取得する必要がある場合は/、ケースでは、このような各反復何かの前に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); 
        } 
    

    をリフレッシュ、我々は内部の値をパラメータすることができます例えば、

    などの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

    これは多くの意味があります。 1つの要素の代わりにi行目が必要な場合(どこの番号がわからないのですが、行の条件がわかります)どのように毎回更新する必要があるものをループすることができますか? – 7raiden7

    +0

    私の答えが更新されました...行の条件に基づいて特定のものを特定するのに手伝ってもらう必要がある場合は、DOMが必要です。特定のセルを特定するには、XPATHで次の、または先行する兄弟を使用する必要があります。 –

    +0

    ああ、基本的には、テーブルを取得してから行をループしていましたが、行を直接取得する必要があると言っています。それは理にかなっている。私はそれを試してみる – 7raiden7

    関連する問題